Decision models are quickly emerging as an important new category in AI. Unlike LLMs, which are designed to generate text or reason through complex problems, decision models are purpose-built to deliver structured outputs that software can immediately act on. And once you understand that capability—making decisions and classifying things at very low cost with high performance—all kinds of useful tasks get unlocked.
Today we’re introducing Microsoft-Decision-1 , our new model for fast decision-scoring, available in Microsoft Foundry and through OpenRouter . This model is designed for routing, classification, prioritization, verification, and workflow control, making it easier to incorporate decision intelligence into existing applications, agents, and workflows in a secure, trusted environment. Microsoft-Decision-1 delivers top performance in latency and quality on structured decision tasks to outperform both LLMs and other decision models.
Microsoft-Decision-1 achieved the highest accuracy in our 36-benchmark comparison, spanning nearly 150,000 questions across benchmarks kept blind from training. And in our benchmarking, it was the fastest measured: 2.5 times quicker than H2O-Lightning-4B v1.1, the runner-up, and 35 times quicker than GPT-6 Sol.
Editor’s note: This post was updated from the original to add benchmarks for Jev on accuracy and calibration.
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5BY2N1cmFjeSwgbGF0ZW5jeSBhbmQgY2FsaWJyYXRpb248L3RpdGxlPg0KPHN0eWxlPg0KQGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvb2sub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtTWVkaXVtLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvbGQub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtSXRhbGljLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiQ2FzY2FkaWEgQ29kZSI7Zm9udC13ZWlnaHQ6MjAwIDcwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9DYXNjYWRpYUNvZGUud29mZjIiKSBmb3JtYXQoIndvZmYyIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkNhc2NhZGlhIENvZGUiO2ZvbnQtd2VpZ2h0OjIwMCA3MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvQ2FzY2FkaWFDb2RlSXRhbGljLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpO30NCjpyb290IHsNCiAgLS1iZzogI2ZmZjsNCiAgLS1pbms6ICMwMDA7DQogIC0tbXV0ZWQ6ICM1NTU7DQogIC0tZmFpbnQ6ICNjOWM5Yzk7ICAgICAgICAvKiBzZWNvbmRhcnkgc2VyaWVzICovDQogIC0tZ29vZDogI0UzRjY3MTsgICAgICAgICAvKiBwcmltYXJ5IG1vZGVsIChzaXRlIGFjY2VudCBsaW1lKSAqLw0KICAtLWJhZDogI0ZGQTAzNzsgICAgICAgICAgLyogcHJpbWFyeSBtb2RlbCBiZWhpbmQgKHNpdGUgYWNjZW50IG9yYW5nZSkgKi8NCiAgLS1ydWxlOiAjMDAwOw0KICAtLXJ1bGUtc29mdDogI2U2ZTZlNjsNCiAgLS1ob3ZlcjogI2YzZjNmMzsNCiAgLS1iYWRnZS1iZzogIzAwMDsNCiAgLS1iYWRnZS1mZzogI2ZmZjsNCiAgLS10aXAtYmc6ICMwMDA7DQogIC0tdGlwLWZnOiAjZmZmOw0KICAtLXNhbnM6ICJQUCBOZXVlIE1vbnRyZWFsIiwgc2Fucy1zZXJpZjsNCiAgLS1tb25vOiAiQ2FzY2FkaWEgQ29kZSIsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgbW9ub3NwYWNlOw0KfQ0KaHRtbFtkYXRhLXRoZW1lPSJkYXJrIl0gew0KICAtLWJnOiAjMTExOw0KICAtLWluazogI2ZmZjsNCiAgLS1tdXRlZDogIzk5OTsNCiAgLS1mYWludDogIzQ0NDsNCiAgLS1ydWxlOiAjZmZmOw0KICAtLXJ1bGUtc29mdDogIzJhMmEyYTsNCiAgLS1ob3ZlcjogIzFmMWYxZjsNCiAgLS1iYWRnZS1iZzogI2ZmZjsNCiAgLS1iYWRnZS1mZzogIzExMTsNCiAgLS10aXAtYmc6ICNmZmY7DQogIC0tdGlwLWZnOiAjMTExOw0KfQ0KDQoqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KYm9keSB7DQogIG1hcmdpbjogMDsNCiAgYmFja2dyb3VuZDogdmFyKC0tYmcpOw0KICBjb2xvcjogdmFyKC0taW5rKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOw0KICBmb250LXNpemU6IDE1cHg7DQogIGxpbmUtaGVpZ2h0OiAxLjQ1Ow0KICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCn0NCi53cmFwIHsgcG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nOiAycHggMCA2cHg7IH0NCi5udW0geyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7IH0NCi5rIHsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDExcHg7DQogIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogIGNvbG9yOiB2YXIoLS1tdXRlZCk7DQp9DQpidXR0b24geyBmb250OiBpbmhlcml0OyBjb2xvcjogaW5oZXJpdDsgYmFja2dyb3VuZDogbm9uZTsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwOyBjdXJzb3I6IHBvaW50ZXI7IH0NCmJ1dHRvbjpmb2N1cy12aXNpYmxlLCBbdGFiaW5kZXhdOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0taW5rKTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT0gKi8NCi5oZWFkIHsgbWFyZ2luLWJvdHRvbTogMjhweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQouYmFkZ2Ugew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBhZGRpbmc6IDRweCA4cHg7DQogIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWJnKTsNCiAgY29sb3I6IHZhcigtLWJhZGdlLWZnKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDEwcHg7DQogIGxpbmUtaGVpZ2h0OiAxOw0KICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KfQ0KaDEgew0KICBtYXJnaW46IDE4cHggMCA4cHg7DQogIGZvbnQtc2l6ZTogY2xhbXAoMjRweCwgNC4ydncsIDMycHgpOw0KICBmb250LXdlaWdodDogNTAwOw0KICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07DQogIGxpbmUtaGVpZ2h0OiAxLjEyOw0KfQ0KLnN1YiB7IG1hcmdpbjogMCBhdXRvOyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1heC13aWR0aDogNjJjaDsgfQ0KLnN1YiAuZGlyIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTGVnZW5kIC8gdG9nZ2xlcyA9PT09PT09PT09PT09PT09PSAqLw0KLmNvbnRyb2xzIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZmxleC13cmFwOiB3cmFwOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogIGdhcDogMTBweCAyNHB4Ow0KICBtYXJnaW4tYm90dG9tOiAxOHB4Ow0KfQ0KLmxlZ2VuZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiA0cHggNnB4OyB9DQoubGVnZW5kIGJ1dHRvbiwgLnRvZ2dsZSBidXR0b24gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgZ2FwOiA4cHg7DQogIHBhZGRpbmc6IDVweCAxMXB4Ow0KICBmb250LXNpemU6IDEzcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJ1bGUtc29mdCk7DQogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOw0KfQ0KLmxlZ2VuZCBidXR0b246aG92ZXIsIC50b2dnbGUgYnV0dG9uOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXSB7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KLmxlZ2VuZCAuc3cgeyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBmbGV4OiAwIDAgMTBweDsgfQ0KLmxlZ2VuZCAuc3cucHJpIHsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi5sZWdlbmQgLnN3LnJlZiB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5sZWdlbmQgLnN3Lm90aCB7IGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsgfQ0KLmxlZ2VuZC5pc28gYnV0dG9uOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgb3BhY2l0eTogMC40NTsgfQ0KLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl06OmFmdGVyIHsgY29udGVudDogIsK3IGNsaWNrIHRvIGNsZWFyIjsgZm9udC13ZWlnaHQ6IDQwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLnRvZ2dsZSB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyB9DQoudG9nZ2xlIC5rIHsgbWFyZ2luLXJpZ2h0OiA4cHg7IH0NCi50b2dnbGUgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoNCi8qID09PT09PT09PT09PT09PT09IE5vdGVzIC8gc291cmNlID09PT09PT09PT09PT09PT09ICovDQoubm90ZSB7IG1hcmdpbjogMTZweCAwIDA7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuNTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLm5vdGUgLm51bSB7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQouc291cmNlIHsgbWFyZ2luLXRvcDogMzJweDsgcGFkZGluZy10b3A6IDE0cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOyBmb250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQouc291cmNlIHAgeyBtYXJnaW46IDAgMCA0cHg7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gVG9vbHRpcCA9PT09PT09PT09PT09PT09PSAqLw0KLnRpcCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogMjsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCiAgcGFkZGluZzogMTBweCAxMnB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS10aXAtYmcpOw0KICBjb2xvcjogdmFyKC0tdGlwLWZnKTsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBsaW5lLWhlaWdodDogMS40Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjEycyBlYXNlOw0KfQ0KLnRpcC5zaG93IHsgb3BhY2l0eTogMTsgfQ0KLnRpcCAudCB7IGZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1ib3R0b206IDZweDsgfQ0KLnRpcCAuciB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgZ2FwOiAxNnB4OyB9DQoudGlwIC5yICsgLnIgeyBtYXJnaW4tdG9wOiAycHg7IH0NCi50aXAgLnIuaGkgeyBmb250LXdlaWdodDogNzAwOyB9DQoudGlwIC5yLmhpID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgY29udGVudDogIiI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDhweDsgaGVpZ2h0OiA4cHg7IG1hcmdpbi1yaWdodDogOHB4OyB2ZXJ0aWNhbC1hbGlnbjogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1nb29kKTsgfQ0KLnRpcCAuci5oaS5iID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tYmFkKTsgfQ0KLnRpcCAucyB7IG1hcmdpbi10b3A6IDhweDsgcGFkZGluZy10b3A6IDZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS10aXAtZmcpIDI1JSwgdHJhbnNwYXJlbnQpOyBmb250LXNpemU6IDEycHg7IG9wYWNpdHk6IDAuODU7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTW90aW9uIChzaGFyZWQpID09PT09PT09PT09PT09PT09ICovDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsNCiAgLmhlYWQgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UsIHRyYW5zZm9ybSAwLjVzIGVhc2U7IH0NCiAgLmhlYWQuaW4geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0NCn0NCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7DQogICogeyB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0NCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgew0KICAuaGVhZCB7IG1hcmdpbi1ib3R0b206IDIycHg7IH0NCiAgLnN1YiB7IGZvbnQtc2l6ZTogMTVweDsgfQ0KICAubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXTo6YWZ0ZXIgeyBjb250ZW50OiAiwrcgdGFwIHRvIGNsZWFyIjsgfQ0KfQ0KDQouc291cmNlIHN0cm9uZyB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNzAwOyB9DQouYmYgeyAtLW5hbWUtdzogMjAwcHg7IC0tY2FsLXc6IDE1MHB4OyAtLWdhcDogMTZweDsgcG9zaXRpb246IHJlbGF0aXZlOyB9DQouY29scyB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgdmFyKC0tbmFtZS13KSBtaW5tYXgoMCwgMWZyKSB2YXIoLS1jYWwtdyk7IGdhcDogMCB2YXIoLS1nYXApOyB9DQouaGRyIHsgbWFyZ2luLWJvdHRvbTogMTBweDsgYWxpZ24taXRlbXM6IGVuZDsgfQ0KLmhkciAuayB7IGxpbmUtaGVpZ2h0OiAxLjM1OyB9DQouaGRyIC5sIHsgdGV4dC1hbGlnbjogcmlnaHQ7IH0NCi5oZHIgLmMgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCi5oZHIgLmRpciB7IGRpc3BsYXk6IGJsb2NrOyB0ZXh0LXRyYW5zZm9ybTogbm9uZTsgbGV0dGVyLXNwYWNpbmc6IDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtc2l6ZTogMTFweDsgfQ0KDQoubGluZXMsIC5iYXNlcyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQ0KLmxpbmVzIHsgei1pbmRleDogMDsgfSAuYmFzZXMgeyB6LWluZGV4OiAyOyB9DQoubGluZXMgLnNpZGUsIC5iYXNlcyAuc2lkZSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KLmdsIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGJvdHRvbTogMDsgd2lkdGg6IDFweDsgYmFja2dyb3VuZDogdmFyKC0tcnVsZS1zb2Z0KTsgfQ0KLmdsLmJhc2UgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlKTsgfQ0KLnNpZGUubCAuZ2wgeyByaWdodDogdmFyKC0tcCk7IH0NCi5zaWRlLnIgLmdsLCAuc2lkZS5jIC5nbCB7IGxlZnQ6IHZhcigtLXApOyB9DQoNCi5yb3dzIHsgcG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAxOyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyB9DQoucm93IHsgYWxpZ24taXRlbXM6IGNlbnRlcjsgcGFkZGluZzogOHB4IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOyBjdXJzb3I6IHBvaW50ZXI7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsgfQ0KLnJvdzpsYXN0LWNoaWxkIHsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJ1bGUtc29mdCk7IH0NCi5yb3c6aG92ZXIsIC5yb3cuaG90IHsgYmFja2dyb3VuZDogdmFyKC0taG92ZXIpOyB9DQoucm93OmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0taW5rKTsgb3V0bGluZS1vZmZzZXQ6IC0ycHg7IH0NCi5uYW1lIHsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxLjI7IH0NCi5uYW1lIHNtYWxsIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbi10b3A6IDJweDsgZm9udDogMTAuNXB4IHZhcigtLW1vbm8pOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyB9DQoNCi5jZWxsIHsgcG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDIycHg7IC0tYzogdmFyKC0tZmFpbnQpOyB9DQoucm93LnByaSAuY2VsbCB7IC0tYzogdmFyKC0tZ29vZCk7IH0NCi5yb3cucmVmIC5jZWxsLnIgeyAtLWM6IHZhcigtLWluayk7IH0NCi50cmFjayB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiB2YXIoLS13KTsgYmFja2dyb3VuZDogdmFyKC0tYyk7IH0NCi5jZWxsLmwgLnRyYWNrIHsgcmlnaHQ6IDA7IHRyYW5zZm9ybS1vcmlnaW46IDEwMCUgNTAlOyB9DQouY2VsbC5yIC50cmFjayB7IGxlZnQ6IDA7IHRyYW5zZm9ybS1vcmlnaW46IDAgNTAlOyB9DQoucm93LnByaSAuY2VsbC5yIC50cmFjay5wOTUgeyBsZWZ0OiB2YXIoLS13MCk7IHdpZHRoOiBjYWxjKHZhcigtLXcpIC0gdmFyKC0tdzApKTsgYmFja2dyb3VuZDogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWdvb2QpIDAgM3B4LCB0cmFuc3BhcmVudCAzcHggNnB4KTsgfQ0KLnZhbCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgZm9udDogMTIuNXB4IHZhcigtLW1vbm8pOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyB3aGl0ZS1zcGFjZTogbm93cmFwOyBjb2xvcjogdmFyKC0taW5rKTsgfQ0KLmNlbGwubCAudmFsIHsgcmlnaHQ6IGNhbGModmFyKC0tdykgKyA4cHgpOyB9DQouY2VsbC5yIC52YWwgeyBsZWZ0OiBjYWxjKHZhcigtLXcpICsgOHB4KTsgfQ0KLnZhbCAucHJlIHsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLyogbGFiZWwgbW92ZXMgaW5zaWRlIHRoZSBiYXIgd2hlbiBpdCB3b3VsZCBzcGlsbCBwYXN0IHRoZSBlZGdlIChtZWFzdXJlZCBhdCBydW50aW1lKSAqLw0KLmNlbGwubCAudmFsLmluIHsgcmlnaHQ6IGF1dG87IGxlZnQ6IGNhbGMoMTAwJSAtIHZhcigtLXcpICsgOHB4KTsgY29sb3I6IHZhcigtLWluayk7IH0NCi5jZWxsLnIgLnZhbC5pbiB7IGxlZnQ6IGF1dG87IHJpZ2h0OiBjYWxjKDEwMCUgLSB2YXIoLS13KSArIDhweCk7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQoucm93LnJlZiAuY2VsbC5yIC52YWwuaW4geyBjb2xvcjogdmFyKC0tYmcpOyB9DQoucm93LnJlZiAuY2VsbC5yIC52YWwuaW4gLnByZSB7IGNvbG9yOiB2YXIoLS1iZyk7IG9wYWNpdHk6IDAuNzsgfQ0KLm5vbmUgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGZvbnQ6IDExLjVweCB2YXIoLS1tb25vKTsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQ0KLmNlbGwubCAubm9uZSB7IHJpZ2h0OiA4cHg7IH0NCi5jZWxsLnIgLm5vbmUsIC5jZWxsLmMgLm5vbmUgeyBsZWZ0OiA4cHg7IH0NCg0KLyogY2FsaWJyYXRpb246IGRvdCBvbiBhbiA4MC0xMDAgdHJhY2sgKi8NCi5jZWxsLmMgLnN0ZW0geyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogNTAlOyB3aWR0aDogdmFyKC0tdyk7IGhlaWdodDogMnB4OyBtYXJnaW4tdG9wOiAtMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlLXNvZnQpOyB0cmFuc2Zvcm0tb3JpZ2luOiAwIDUwJTsgfQ0KLnJvdy5wcmkgLmNlbGwuYyAuc3RlbSB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQouY2VsbC5jIC5kb3QgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IHZhcigtLXcpOyB0b3A6IDUwJTsgd2lkdGg6IDEycHg7IGhlaWdodDogMTJweDsgbWFyZ2luOiAtNnB4IDAgMCAtNnB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLWMpOyB9DQoucm93LnByaSAuY2VsbC5jIC5kb3QgeyBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0taW5rKTsgfQ0KLmNlbGwuYyAudmFsIHsgbGVmdDogY2FsYyh2YXIoLS13KSArIDEycHgpOyB9DQouY2VsbC5jIC52YWwuaW4geyBsZWZ0OiBhdXRvOyByaWdodDogY2FsYygxMDAlIC0gdmFyKC0tdykgKyAxMHB4KTsgcGFkZGluZzogMCAzcHg7IGJhY2tncm91bmQ6IHZhcigtLWJnKTsgfQ0KLnJvdzpob3ZlciAuY2VsbC5jIC52YWwuaW4sIC5yb3cuaG90IC5jZWxsLmMgLnZhbC5pbiB7IGJhY2tncm91bmQ6IHZhcigtLWhvdmVyKTsgfQ0KDQouYXhpcyB7IG1hcmdpbi10b3A6IDhweDsgfQ0KLmF4aXMgLnNpZGUgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogMTZweDsgfQ0KLnRrIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGZvbnQ6IDExcHggdmFyKC0tbW9ubyk7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgfQ0KLnNpZGUubCAudGsgeyByaWdodDogdmFyKC0tcCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1MCUpOyB9DQouc2lkZS5yIC50aywgLnNpZGUuYyAudGsgeyBsZWZ0OiB2YXIoLS1wKTsgfQ0KLnNpZGUubCAudGsuZWRnZSB7IHJpZ2h0OiBhdXRvOyBsZWZ0OiAwOyB0cmFuc2Zvcm06IG5vbmU7IH0NCi5zaWRlLnIgLnRrLmVkZ2UgeyB0cmFuc2Zvcm06IG5vbmU7IH0NCi5zaWRlLmMgLnRrLmVkZ2UgeyBsZWZ0OiBhdXRvOyByaWdodDogMDsgdHJhbnNmb3JtOiBub25lOyB9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAucmV2ZWFsIC50cmFjaywgLnJldmVhbCAuc3RlbSB7IHRyYW5zZm9ybTogc2NhbGVYKDApOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC4yLCAwLjcsIDAuMiwgMSk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSkgKiA0NW1zICsgMTUwbXMpOyB9DQogIC5yZXZlYWwuaW4gLnRyYWNrLCAucmV2ZWFsLmluIC5zdGVtIHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLmRvdCB7IHRyYW5zZm9ybTogc2NhbGUoMCk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBjdWJpYy1iZXppZXIoMC4yLCAwLjgsIDAuMiwgMS4zKTsgdHJhbnNpdGlvbi1kZWxheTogY2FsYyh2YXIoLS1pKSAqIDQ1bXMgKyA2NTBtcyk7IH0NCiAgLnJldmVhbC5pbiAuZG90IHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLnZhbCB7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWkpICogNDVtcyArIDYwMG1zKTsgfQ0KICAucmV2ZWFsLmluIC52YWwgeyBvcGFjaXR5OiAxOyB9DQogIC5yZXZlYWwuc2V0dGxlZCAudHJhY2ssIC5yZXZlYWwuc2V0dGxlZCAuc3RlbSwgLnJldmVhbC5zZXR0bGVkIC5kb3QsIC5yZXZlYWwuc2V0dGxlZCAudmFsIHsgdHJhbnNpdGlvbi1kZWxheTogMHM7IH0NCiAgLnJvdy5mbGlwIHsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNTVzIGN1YmljLWJlemllcigwLjIsIDAuNywgMC4yLCAxKSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOyB9DQp9DQpAbWVkaWEgKG1heC13aWR0aDogMTAwMHB4KSB7IC5iZiB7IC0tbmFtZS13OiAxNzBweDsgLS1jYWwtdzogMTIwcHg7IH0gLm5hbWUgeyBmb250LXNpemU6IDEzLjVweDsgfSB9DQpAbWVkaWEgKG1heC13aWR0aDogNzYwcHgpIHsgLmJmIHsgLS1uYW1lLXc6IDE0MHB4OyAtLWNhbC13OiA5NnB4OyAtLWdhcDogMTJweDsgfSAudmFsIHsgZm9udC1zaXplOiAxMnB4OyB9IC52YWwgLnByZSB7IGRpc3BsYXk6IG5vbmU7IH0gLm5vbmUgeyBmb250LXNpemU6IDEwLjVweDsgfSAudGsubSB7IGRpc3BsYXk6IG5vbmU7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7DQogIC5jb2xzIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMCwgMWZyKTsgZ2FwOiAwIDE0cHg7IH0NCiAgLmhkciAuYywgLmhkciAuY2MsIC5heGlzIC5zaWRlLmMsIC5saW5lcyA+IGRpdjpudGgtY2hpbGQoMiksIC5iYXNlcyA+IGRpdjpudGgtY2hpbGQoMiksIC5heGlzID4gZGl2Om50aC1jaGlsZCgyKSB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgLmhkciAubCwgLmhkciAuciB7IGZvbnQtc2l6ZTogMTBweDsgfQ0KICAucm93IHsgcGFkZGluZzogMTBweCAwOyB9DQogIC5uYW1lIHsgZ3JpZC1jb2x1bW46IDEgLyAtMTsgb3JkZXI6IC0xOyB0ZXh0LWFsaWduOiBsZWZ0OyBtYXJnaW4tYm90dG9tOiA2cHg7IH0NCiAgLm5hbWUgc21hbGwgeyBkaXNwbGF5OiBpbmxpbmU7IG1hcmdpbi1sZWZ0OiA4cHg7IH0NCiAgLmNlbGwgeyBoZWlnaHQ6IDE4cHg7IH0NCiAgLmNlbGwuYyB7IGdyaWQtY29sdW1uOiAxIC8gLTE7IG1hcmdpbi10b3A6IDhweDsgaGVpZ2h0OiAxNnB4OyAtLWluczogOTZweDsgfQ0KICAuY2VsbC5jOjpiZWZvcmUgeyBjb250ZW50OiAiY2FsaWJyYXRpb24iOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGZvbnQ6IDEwcHggdmFyKC0tbW9ubyk7IGxldHRlci1zcGFjaW5nOiAwLjA2ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCiAgLmNlbGwuYyAuc3RlbSB7IGxlZnQ6IHZhcigtLWlucyk7IHdpZHRoOiBjYWxjKCgxMDAlIC0gdmFyKC0taW5zKSkgKiB2YXIoLS1mKSk7IH0NCiAgLmNlbGwuYyAuZG90IHsgbGVmdDogY2FsYyh2YXIoLS1pbnMpICsgKDEwMCUgLSB2YXIoLS1pbnMpKSAqIHZhcigtLWYpKTsgfQ0KICAuY2VsbC5jIC52YWwsIC5jZWxsLmMgLnZhbC5pbiB7IHJpZ2h0OiBhdXRvOyBsZWZ0OiBjYWxjKHZhcigtLWlucykgKyAoMTAwJSAtIHZhcigtLWlucykpICogdmFyKC0tZikgKyAxMnB4KTsgfQ0KICAuY2VsbC5jIC5ub25lIHsgbGVmdDogdmFyKC0taW5zKTsgfQ0KICAubGluZXMsIC5iYXNlcyAuc2lkZS5jIHsgZGlzcGxheTogbm9uZTsgfQ0KICAudmFsIHsgZm9udC1zaXplOiAxMS41cHg7IH0NCiAgLm5vbmUgeyBmb250LXNpemU6IDEwcHg7IH0NCn0NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgY2xhc3M9IndyYXAiIGlkPSJyb290Ij4NCiAgPGhlYWRlciBjbGFzcz0iaGVhZCI+DQogICAgDQogICAgPGgxPkFjY3VyYWN5LCBsYXRlbmN5IGFuZCBjYWxpYnJhdGlvbiwgc2lkZSBieSBzaWRlPC9oMT4NCiAgICANCiAgPC9oZWFkZXI+DQoNCiAgPGRpdiBjbGFzcz0iY29udHJvbHMiPg0KICAgIDxkaXYgY2xhc3M9ImxlZ2VuZCIgcm9sZT0ibGlzdCIgYXJpYS1sYWJlbD0iS2V5Ij4NCiAgICAgIDxzcGFuIGNsYXNzPSJidG4iIHJvbGU9Imxpc3RpdGVtIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCAwO21hcmdpbi1yaWdodDoxMHB4O2ZvbnQtc2l6ZToxM3B4Ij48c3BhbiBjbGFzcz0ic3cgcHJpIj48L3NwYW4+TWljcm9zb2Z0LURlY2lzaW9uLTE8L3NwYW4+DQogICAgICA8c3BhbiBjbGFzcz0iYnRuIiByb2xlPSJsaXN0aXRlbSIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzo1cHggMDttYXJnaW4tcmlnaHQ6MTBweDtmb250LXNpemU6MTNweCI+PHNwYW4gY2xhc3M9InN3IHJlZiI+PC9zcGFuPkdQVC02IFNvbCAocmVmZXJlbmNlKTwvc3Bhbj4NCiAgICAgIDxzcGFuIGNsYXNzPSJidG4iIHJvbGU9Imxpc3RpdGVtIiBzdHlsZT0iZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtwYWRkaW5nOjVweCAwO2ZvbnQtc2l6ZToxM3B4Ij48c3BhbiBjbGFzcz0ic3cgb3RoIj48L3NwYW4+T3RoZXIgbW9kZWxzPC9zcGFuPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9InRvZ2dsZSIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9IlNvcnQgcm93cyIgaWQ9InNvcnQiPg0KICAgICAgPHNwYW4gY2xhc3M9ImsiPlNvcnQgYnk8L3NwYW4+DQogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1zPSJhY2MiIGFyaWEtcHJlc3NlZD0idHJ1ZSI+QWNjdXJhY3k8L2J1dHRvbj4NCiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXM9ImxhdCIgYXJpYS1wcmVzc2VkPSJmYWxzZSI+TGF0ZW5jeTwvYnV0dG9uPg0KICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtcz0iY2FsIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj5DYWxpYnJhdGlvbjwvYnV0dG9uPg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0iYmYgcmV2ZWFsIiBpZD0iY2hhcnQiPg0KICAgIDxkaXYgY2xhc3M9ImNvbHMgaGRyIj4NCiAgICAgIDxkaXYgY2xhc3M9ImsgbCI+QXZlcmFnZSBhY2N1cmFjeTxzcGFuIGNsYXNzPSJkaXIiPkhpZ2hlciBpcyBiZXR0ZXIgJm1pZGRvdDsgMzYgYmVuY2htYXJrczwvc3Bhbj48L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImsgYyI+TW9kZWw8L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImsgciI+TWVkaWFuIGxhdGVuY3k8c3BhbiBjbGFzcz0iZGlyIj5Mb3dlciBpcyBiZXR0ZXIgJm1pZGRvdDsgcGVyIHJlcXVlc3Q8L3NwYW4+PC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJrIGNjIj5DYWxpYnJhdGlvbjxzcGFuIGNsYXNzPSJkaXIiPjEwMCA9IHBlcmZlY3Q8L3NwYW4+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmUiPg0KICAgICAgPGRpdiBjbGFzcz0iY29scyBsaW5lcyIgaWQ9ImxpbmVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGRpdiBjbGFzcz0ic2lkZSBsIj48L2Rpdj48ZGl2PjwvZGl2PjxkaXYgY2xhc3M9InNpZGUgciI+PC9kaXY+PGRpdiBjbGFzcz0ic2lkZSBjIj48L2Rpdj48L2Rpdj4NCiAgICAgIDxkaXYgY2xhc3M9ImNvbHMgYmFzZXMiIGlkPSJiYXNlcyIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgY2xhc3M9InNpZGUgbCI+PC9kaXY+PGRpdj48L2Rpdj48ZGl2IGNsYXNzPSJzaWRlIHIiPjwvZGl2PjxkaXYgY2xhc3M9InNpZGUgYyI+PC9kaXY+PC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIiBpZD0icm93cyI+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iY29scyBheGlzIiBpZD0iYXhpcyIgYXJpYS1oaWRkZW49InRydWUiPjxkaXYgY2xhc3M9InNpZGUgbCI+PC9kaXY+PGRpdj48L2Rpdj48ZGl2IGNsYXNzPSJzaWRlIHIiPjwvZGl2PjxkaXYgY2xhc3M9InNpZGUgYyI+PC9kaXY+PC9kaXY+DQogIDwvZGl2Pg0KICA8cCBjbGFzcz0ibm90ZSI+TWljcm9zb2Z0LURlY2lzaW9uLTEgaXMgZmlyc3Qgb24gYWNjdXJhY3kgYW5kIHRoZSBmYXN0ZXN0IG1lYXN1cmVkOiA8c3BhbiBjbGFzcz0ibnVtIj4yLjUmdGltZXM7PC9zcGFuPiBxdWlja2VyIHRoYW4gSDJPLUxpZ2h0bmluZy00QiB2MS4xLCB0aGUgcnVubmVyLXVwLCBhbmQgPHNwYW4gY2xhc3M9Im51bSI+MzUmdGltZXM7PC9zcGFuPiBxdWlja2VyIHRoYW4gR1BULTYgU29sLiBUaGlyZCBvbiBjYWxpYnJhdGlvbiwgPHNwYW4gY2xhc3M9Im51bSI+MS41PC9zcGFuPiBiZWhpbmQgSmV2LiBIb3ZlciBvciB0YXAgYSByb3cgZm9yIHRoZSBkZXRhaWwuPC9wPg0KICA8ZGl2IGNsYXNzPSJzb3VyY2UiPg0KICAgIDxwPjxzdHJvbmc+QWNjdXJhY3k6PC9zdHJvbmc+IG1lYW4gc2NvcmUgYWNyb3NzIDM2IGJlbmNobWFya3MgKDE0NywxMzcgcXVlc3Rpb25zKTsgI24gaXMgdGhlIEpldkJlbmNoIGxlYWRlcmJvYXJkIHBvc2l0aW9uIG9uIDggT2N0b2JlciAyMDI2LiAqKiBTdHJhbmRzLURlY2lkZXIgMkI6IGF2ZXJhZ2Ugb2YgdGhlIDIzIG9mIDM2IGJlbmNobWFya3MgaXQgY291bGQgYW5zd2VyLjwvcD4NCiAgICA8cD48c3Ryb25nPkxhdGVuY3k6PC9zdHJvbmc+IEpldkJlbmNoIHYxLjYuMSBhZGp1c3RlZCBtZWRpYW4gKHA1MCksIGNoZWNrZWQgT2N0IDcsIDIwMjYuICogTWljcm9zb2Z0LURlY2lzaW9uLTEgbWVhc3VyZWQgdGhyb3VnaCBGb3VuZHJ5IGluIHRoZSBzYW1lIHJlZ2lvbi48L3A+DQogICAgPHA+PHN0cm9uZz5DYWxpYnJhdGlvbjo8L3N0cm9uZz4gMTAwIG1lYW5zIGEgbW9kZWwncyBjb25maWRlbmNlIGV4YWN0bHkgbWF0Y2hlcyBob3cgb2Z0ZW4gaXQgaXMgcmlnaHQuICZsZHF1bztOb3QgcmFua2VkJnJkcXVvOywgJmxkcXVvO25vdCBtZWFzdXJlZCZyZHF1bzsgYW5kICZsZHF1bztub3Qgc2NvcmVkJnJkcXVvOyBtYXJrIG1vZGVscyBhYnNlbnQgZnJvbSBhIGRhdGFzZXQuPC9wPg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJ0aXAiIGlkPSJ0aXAiIHJvbGU9InRvb2x0aXAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdD4NCihmdW5jdGlvbiAoKSB7DQogIHZhciBtb3Rpb24gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpJykubWF0Y2hlczsNCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpOw0KICB2YXIgdGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpcCcpOw0KDQogIGZ1bmN0aW9uIGVsKHRhZywgY2xzLCB0ZXh0KSB7DQogICAgdmFyIG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7DQogICAgaWYgKGNscykgbi5jbGFzc05hbWUgPSBjbHM7DQogICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0ICE9PSBudWxsKSBuLnRleHRDb250ZW50ID0gdGV4dDsNCiAgICByZXR1cm4gbjsNCiAgfQ0KICBmdW5jdGlvbiBzZXRWYXIobiwgaywgdikgeyBuLnN0eWxlLnNldFByb3BlcnR5KGssIHYpOyB9DQogIGZ1bmN0aW9uIGZtdE4obiwgZCkgeyByZXR1cm4gbi50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkIH0pOyB9DQoNCiAgLy8gLS0tLSBUb29sdGlwIChob3Zlciwga2V5Ym9hcmQgZm9jdXMgYW5kIHRhcCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIHZhciBob3QgPSBudWxsOw0KICBmdW5jdGlvbiByZW5kZXJUaXAoc3BlYykgew0KICAgIHRpcC5pbm5lckhUTUwgPSAnJzsNCiAgICBpZiAoc3BlYy50aXRsZSkgdGlwLmFwcGVuZENoaWxkKGVsKCdkaXYnLCAndCcsIHNwZWMudGl0bGUpKTsNCiAgICAoc3BlYy5yb3dzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7DQogICAgICB2YXIgcm93ID0gZWwoJ2RpdicsICdyJyArIChyWzJdID8gJyAnICsgclsyXSA6ICcnKSk7DQogICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCBudWxsLCByWzBdKSk7DQogICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnbnVtJywgclsxXSkpOw0KICAgICAgdGlwLmFwcGVuZENoaWxkKHJvdyk7DQogICAgfSk7DQogICAgaWYgKHNwZWMubm90ZSkgdGlwLmFwcGVuZENoaWxkKGVsKCdkaXYnLCAncycsIHNwZWMubm90ZSkpOw0KICB9DQogIGZ1bmN0aW9uIHBsYWNlVGlwKG5vZGUsIHByZWZlcikgew0KICAgIHZhciByciA9IHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgdmFyIG5yID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICB2YXIgdHcgPSB0aXAub2Zmc2V0V2lkdGgsIHRoID0gdGlwLm9mZnNldEhlaWdodDsNCiAgICB2YXIgbGVmdCA9IG5yLmxlZnQgLSByci5sZWZ0ICsgKHByZWZlciA9PT0gJ2Fib3ZlJyA/IG5yLndpZHRoIC8gMiAtIHR3IC8gMiA6IDApOw0KICAgIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihsZWZ0LCByci53aWR0aCAtIHR3KSk7DQogICAgdmFyIGJlbG93ID0gbnIuYm90dG9tIC0gcnIudG9wICsgNjsNCiAgICB2YXIgYWJvdmUgPSBuci50b3AgLSByci50b3AgLSB0aCAtIChwcmVmZXIgPT09ICdhYm92ZScgPyAyNiA6IDYpOw0KICAgIHZhciB0b3A7DQogICAgaWYgKHByZWZlciA9PT0gJ2Fib3ZlJykgdG9wID0gYWJvdmUgPj0gMCA/IGFib3ZlIDogTWF0aC5taW4oYmVsb3csIHJyLmhlaWdodCAtIHRoKTsNCiAgICBlbHNlIHRvcCA9IChiZWxvdyArIHRoIDw9IHJyLmhlaWdodCkgPyBiZWxvdyA6IE1hdGgubWF4KDAsIGFib3ZlKTsNCiAgICAvLyBTdGF5IGluc2lkZSB0aGUgd2lkZ2V0IHNvIHRoZSBhdXRvLXNpemVkIGZyYW1lIG5ldmVyIGNsaXBzIHRoZSB0aXAuDQogICAgdGlwLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JzsNCiAgICB0aXAuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgdG9wKSArICdweCc7DQogIH0NCiAgZnVuY3Rpb24gc2hvd1RpcChub2RlLCBidWlsZCwgcHJlZmVyKSB7DQogICAgaWYgKGhvdCA9PT0gbm9kZSkgcmV0dXJuOw0KICAgIGhpZGVUaXAoKTsNCiAgICBob3QgPSBub2RlOw0KICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnaG90Jyk7DQogICAgcmVuZGVyVGlwKGJ1aWxkKG5vZGUpKTsNCiAgICB0aXAuY2xhc3NMaXN0LmFkZCgnc2hvdycpOw0KICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7DQogICAgcGxhY2VUaXAobm9kZSwgcHJlZmVyKTsNCiAgfQ0KICBmdW5jdGlvbiBoaWRlVGlwKCkgew0KICAgIGlmIChob3QpIGhvdC5jbGFzc0xpc3QucmVtb3ZlKCdob3QnKTsNCiAgICBob3QgPSBudWxsOw0KICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7DQogICAgdGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOw0KICB9DQogIGZ1bmN0aW9uIGJpbmRUaXBzKHNlbGVjdG9yLCBidWlsZCwgcHJlZmVyKSB7DQogICAgZnVuY3Rpb24gZmluZCh0KSB7DQogICAgICB2YXIgbiA9IHQ7DQogICAgICB3aGlsZSAobiAmJiBuICE9PSByb290KSB7DQogICAgICAgIGlmIChuLm1hdGNoZXMgJiYgbi5tYXRjaGVzKHNlbGVjdG9yKSkgcmV0dXJuIG47DQogICAgICAgIG4gPSBuLnBhcmVudE5vZGU7DQogICAgICB9DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobikgc2hvd1RpcChuLCBidWlsZCwgcHJlZmVyKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuICYmICFuLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpIGhpZGVUaXAoKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4pIHNob3dUaXAobiwgYnVpbGQsIHByZWZlcik7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobiAmJiAhbi5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSBoaWRlVGlwKCk7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGhpZGVUaXAoKTsgfSk7DQogIH0NCg0KICAvLyAtLS0tIENvdW50LXVwICh2aXNpYmlsaXR5LXRyaWdnZXJlZCB2aWEgcmV2ZWFsKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIHZhciBFQVNFID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgMyk7IH07DQogIGZ1bmN0aW9uIGNvdW50VXAobm9kZSwgdG8sIGZtdCwgbXMsIGRlbGF5KSB7DQogICAgaWYgKCFtb3Rpb24pIHsgbm9kZS50ZXh0Q29udGVudCA9IGZtdCh0byk7IHJldHVybjsgfQ0KICAgIHZhciBzdGFydCA9IG51bGw7DQogICAgbm9kZS50ZXh0Q29udGVudCA9IGZtdCgwKTsNCiAgICBmdW5jdGlvbiBmcmFtZShub3cpIHsNCiAgICAgIGlmIChzdGFydCA9PT0gbnVsbCkgc3RhcnQgPSBub3cgKyAoZGVsYXkgfHwgMCk7DQogICAgICB2YXIgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIChub3cgLSBzdGFydCkgLyBtcykpOw0KICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGZtdCh0byAqIEVBU0UodCkpOw0KICAgICAgaWYgKHQgPCAxKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOw0KICAgIH0NCiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOw0KICB9DQoNCiAgLy8gLS0tLSBSZXZlYWwgKEludGVyc2VjdGlvbk9ic2VydmVyIG9ubHk7IG5vIHRpbWVycyBzdGFydCBhbnl0aGluZykgLS0tLS0tDQogIC8vIGBzZXR0bGVkYCByZW1vdmVzIHN0YWdnZXIgZGVsYXlzIG9uY2UgdGhlIGVudHJhbmNlIGhhcyBwbGF5ZWQgc28gaG92ZXIsDQogIC8vIHRvZ2dsZXMgYW5kIGZpbHRlcnMgcmVzcG9uZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLg0KICBmdW5jdGlvbiByZXZlYWwoZ3JvdXAsIGNvdW50LCBjYikgew0KICAgIGdyb3VwLmNsYXNzTGlzdC5hZGQoJ2luJyk7DQogICAgaWYgKGNiKSBjYigpOw0KICAgIGlmICghbW90aW9uKSB7IGdyb3VwLmNsYXNzTGlzdC5hZGQoJ3NldHRsZWQnKTsgcmV0dXJuOyB9DQogICAgdmFyIHdhaXQgPSBNYXRoLm1pbihjb3VudCwgMzApICogNDUgKyA3MDA7DQogICAgdmFyIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7DQogICAgKGZ1bmN0aW9uIHRpY2sobm93KSB7IGlmIChub3cgLSB0MCA+PSB3YWl0KSBncm91cC5jbGFzc0xpc3QuYWRkKCdzZXR0bGVkJyk7IGVsc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOyB9KSh0MCk7DQogIH0NCiAgZnVuY3Rpb24gb2JzZXJ2ZShpdGVtcykgeyAvLyBpdGVtczogW1tub2RlLCBmbl1dDQogICAgaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSB7DQogICAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsNCiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgaWYgKCFlLmlzSW50ZXJzZWN0aW5nKSByZXR1cm47DQogICAgICAgICAgaW8udW5vYnNlcnZlKGUudGFyZ2V0KTsNCiAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpZiAoaXRbMF0gPT09IGUudGFyZ2V0KSBpdFsxXSgpOyB9KTsNCiAgICAgICAgfSk7DQogICAgICB9LCB7IHRocmVzaG9sZDogMC4wNSB9KTsNCiAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGlvLm9ic2VydmUoaXRbMF0pOyB9KTsNCiAgICB9IGVsc2Ugew0KICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaXRbMV0oKTsgfSk7DQogICAgfQ0KICB9DQogIHZhciBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhlYWQnKTsNCg0KICB2YXIgREFUQSA9IHsNCiAgICAvLyBuYW1lLCBraW5kLCBhY2N1cmFjeSAlIChudWxsID0gbm90IHJhbmtlZCksIGFjY3VyYWN5IHN1YmxhYmVsLCBsYXRlbmN5IHA1MCBtcyAobnVsbCA9IG5vdCBtZWFzdXJlZCksIHA5NSBtcywgY2FsaWJyYXRpb24gKG51bGwgPSBub3Qgc2NvcmVkKQ0KICAgIHJvd3M6IFsNCiAgICAgIFsnTWljcm9zb2Z0LURlY2lzaW9uLTEnLCAncHJpJywgODMuNSwgJycsIDg1LCAxMjUsIDkyLjJdLA0KICAgICAgWydKZXYgMS4xMy4wJywgJ290aCcsIDgyLjMsICcnLCAyNDAsIG51bGwsIDkzLjddLA0KICAgICAgWydRdXlldC0xLjAtTGFyZ2UnLCAnb3RoJywgODEuOSwgJyMxIG9uIEpldkJlbmNoJywgMzgwLCBudWxsLCA5My4xXSwNCiAgICAgIFsnU3Vyb2dhdGUgUnVuZSAyNkItQTRCJywgJ290aCcsIDc5LjcsICcjOCBvbiBKZXZCZW5jaCcsIDM4MCwgbnVsbCwgOTEuOF0sDQogICAgICBbJ0dQVC02IEx1bmEgRGVjaXNpb25zJywgJ290aCcsIDc5LjQsICcjNyBvbiBKZXZCZW5jaCcsIDMwMCwgbnVsbCwgODkuOV0sDQogICAgICBbJ2RlY2stMzFCJywgJ290aCcsIDc3LjgsICcjMyBvbiBKZXZCZW5jaCcsIDQwMCwgbnVsbCwgODMuNV0sDQogICAgICBbJ0gyTy1MaWdodG5pbmctNEIgdjEuMScsICdvdGgnLCA3Ny4yLCAnIzUgb24gSmV2QmVuY2gnLCAyMTAsIG51bGwsIDkxLjhdLA0KICAgICAgWydTdHJhbmRzLURlY2lkZXIgMkInLCAnb3RoJywgNTQuOCwgJ0FXUyDCtyAyMyBvZiAzNiBiZW5jaG1hcmtzKionLCBudWxsLCBudWxsLCBudWxsXSwNCiAgICAgIFsnR1BULTYgU29sJywgJ3JlZicsIG51bGwsICcnLCAzMDEwLCBudWxsLCBudWxsXQ0KICAgIF0sDQogICAgYWNjOiB7IG1heDogMTAwLCB0aWNrczogW1swLCAnMCUnLCAxXSwgWzI1LCAnMjUlJywgMV0sIFs1MCwgJzUwJSddLCBbNzUsICc3NSUnLCAxXSwgWzEwMCwgJzEwMCUnXV0gfSwNCiAgICBsYXQ6IHsgbWF4OiAzMTAwLCB0aWNrczogW1swLCAnMCddLCBbMTAwMCwgJzEgcyddLCBbMjAwMCwgJzIgcyddLCBbMzAwMCwgJzMgcyddXSB9LA0KICAgIGNhbDogeyBtaW46IDgwLCBtYXg6IDEwMCwgdGlja3M6IFtbODAsICc4MCddLCBbOTAsICc5MCcsIDFdLCBbMTAwLCAnMTAwJ11dIH0NCiAgfTsNCiAgZnVuY3Rpb24gYXAodikgeyByZXR1cm4gdiAvIERBVEEuYWNjLm1heCAqIDEwMDsgfQ0KICBmdW5jdGlvbiBscCh2KSB7IHJldHVybiB2IC8gREFUQS5sYXQubWF4ICogMTAwOyB9DQogIGZ1bmN0aW9uIGNwKHYpIHsgcmV0dXJuICh2IC0gREFUQS5jYWwubWluKSAvIChEQVRBLmNhbC5tYXggLSBEQVRBLmNhbC5taW4pICogMTAwOyB9DQogIGZ1bmN0aW9uIG1zKHYpIHsgcmV0dXJuIHYgPj0gMTAwMCA/IGZtdE4odiAvIDEwMDAsIDIpICsgJyBzJyA6IGZtdE4odiwgMCkgKyAnIG1zJzsgfQ0KICBmdW5jdGlvbiBwYyh2KSB7IHJldHVybiBmbXROKHYsIDEpICsgJyUnOyB9DQogIGZ1bmN0aW9uIGYxKHYpIHsgcmV0dXJuIGZtdE4odiwgMSk7IH0NCg0KICB2YXIgcHJpID0gREFUQS5yb3dzWzBdOw0KICB2YXIgcm93c0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd3MnKTsNCiAgdmFyIGNvdW50ZXJzID0gW107DQogIHZhciByb3dOb2RlcyA9IFtdOw0KDQogIGZ1bmN0aW9uIHNpZGUoaWQsIHdoaWNoKSB7IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIGlkICsgJyAuc2lkZS4nICsgd2hpY2gpOyB9DQogIGZ1bmN0aW9uIGF4aXNTaWRlKHdoaWNoLCB0aWNrcywgZm4sIGVkZ2VJcykgew0KICAgIHRpY2tzLmZvckVhY2goZnVuY3Rpb24gKHQpIHsNCiAgICAgIHZhciBpc0Jhc2UgPSAod2hpY2ggPT09ICdsJyAmJiB0WzBdID09PSAwKSB8fCAod2hpY2ggPT09ICdyJyAmJiB0WzBdID09PSAwKSB8fCAod2hpY2ggPT09ICdjJyAmJiB0WzBdID09PSBEQVRBLmNhbC5taW4pOw0KICAgICAgdmFyIGcgPSBlbCgnc3BhbicsICdnbCcgKyAoaXNCYXNlID8gJyBiYXNlJyA6ICcnKSk7IHNldFZhcihnLCAnLS1wJywgZm4odFswXSkgKyAnJScpOw0KICAgICAgKGlzQmFzZSA/IHNpZGUoJ2Jhc2VzJywgd2hpY2gpIDogc2lkZSgnbGluZXMnLCB3aGljaCkpLmFwcGVuZENoaWxkKGcpOw0KICAgICAgdmFyIGsgPSBlbCgnc3BhbicsICd0aycgKyAodFsyXSA/ICcgbScgOiAnJykgKyAoZWRnZUlzKHRbMF0pID8gJyBlZGdlJyA6ICcnKSwgdFsxXSk7IHNldFZhcihrLCAnLS1wJywgZm4odFswXSkgKyAnJScpOw0KICAgICAgc2lkZSgnYXhpcycsIHdoaWNoKS5hcHBlbmRDaGlsZChrKTsNCiAgICB9KTsNCiAgfQ0KICBheGlzU2lkZSgnbCcsIERBVEEuYWNjLnRpY2tzLCBhcCwgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHYgPT09IERBVEEuYWNjLm1heDsgfSk7DQogIGF4aXNTaWRlKCdyJywgREFUQS5sYXQudGlja3MsIGxwLCBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gMDsgfSk7DQogIGF4aXNTaWRlKCdjJywgREFUQS5jYWwudGlja3MsIGNwLCBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gREFUQS5jYWwubWF4OyB9KTsNCg0KICBEQVRBLnJvd3MuZm9yRWFjaChmdW5jdGlvbiAociwgaSkgew0KICAgIHZhciByb3cgPSBlbCgnZGl2JywgJ2NvbHMgcm93ICcgKyByWzFdKTsgcm93LnRhYkluZGV4ID0gMDsgcm93LmRhdGFzZXQuaSA9IFN0cmluZyhpKTsNCiAgICByb3cuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2dyb3VwJyk7DQogICAgdmFyIGFjYyA9IHJbMl0gPT09IG51bGwgPyAnbm90IGluIHRoZSBhY2N1cmFjeSByYW5raW5nJyA6IHBjKHJbMl0pICsgJyBhdmVyYWdlIGFjY3VyYWN5JzsNCiAgICB2YXIgbGF0ID0gcls0XSA9PT0gbnVsbCA/ICdsYXRlbmN5IG5vdCBtZWFzdXJlZCcgOiBtcyhyWzRdKSArICcgbWVkaWFuIGxhdGVuY3knOw0KICAgIHZhciBjYWwgPSByWzZdID09PSBudWxsID8gJ2NhbGlicmF0aW9uIG5vdCBzY29yZWQnIDogJ2NhbGlicmF0aW9uIHNjb3JlICcgKyBmMShyWzZdKTsNCiAgICByb3cuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgclswXSArICc6ICcgKyBhY2MgKyAnLCAnICsgbGF0ICsgJywgJyArIGNhbCk7DQoNCiAgICB2YXIgY2wgPSBlbCgnZGl2JywgJ2NlbGwgbCcpOw0KICAgIGlmIChyWzJdID09PSBudWxsKSBjbC5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdub25lJywgJ25vdCByYW5rZWQnKSk7DQogICAgZWxzZSB7DQogICAgICBzZXRWYXIoY2wsICctLXcnLCBhcChyWzJdKSArICclJyk7DQogICAgICB2YXIgdCA9IGVsKCdzcGFuJywgJ3RyYWNrJyk7IHNldFZhcih0LCAnLS1pJywgU3RyaW5nKGkpKTsgY2wuYXBwZW5kQ2hpbGQodCk7DQogICAgICB2YXIgdiA9IGVsKCdzcGFuJywgJ3ZhbCcsIHBjKHJbMl0pKTsgc2V0VmFyKHYsICctLWknLCBTdHJpbmcoaSkpOyBjb3VudGVycy5wdXNoKFt2LCByWzJdLCBwY10pOyBjbC5hcHBlbmRDaGlsZCh2KTsNCiAgICB9DQogICAgdmFyIG5tID0gZWwoJ2RpdicsICduYW1lJywgclswXSk7DQogICAgaWYgKHJbM10pIG5tLmFwcGVuZENoaWxkKGVsKCdzbWFsbCcsIG51bGwsIHJbM10pKTsNCiAgICB2YXIgY3IgPSBlbCgnZGl2JywgJ2NlbGwgcicpOw0KICAgIGlmIChyWzRdID09PSBudWxsKSBjci5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdub25lJywgJ25vdCBtZWFzdXJlZCcpKTsNCiAgICBlbHNlIHsNCiAgICAgIHNldFZhcihjciwgJy0tdycsIGxwKHJbNF0pICsgJyUnKTsNCiAgICAgIHZhciB0MiA9IGVsKCdzcGFuJywgJ3RyYWNrJyk7IHNldFZhcih0MiwgJy0taScsIFN0cmluZyhpKSk7IGNyLmFwcGVuZENoaWxkKHQyKTsNCiAgICAgIGlmIChyWzVdKSB7IHZhciBwOTUgPSBlbCgnc3BhbicsICd0cmFjayBwOTUnKTsgc2V0VmFyKHA5NSwgJy0taScsIFN0cmluZyhpKSk7IHNldFZhcihjciwgJy0tdzAnLCBscChyWzRdKSArICclJyk7IHNldFZhcihjciwgJy0tdycsIGxwKHJbNV0pICsgJyUnKTsgdDIuc3R5bGUud2lkdGggPSBscChyWzRdKSArICclJzsgY3IuYXBwZW5kQ2hpbGQocDk1KTsgfQ0KICAgICAgdmFyIHYyID0gZWwoJ3NwYW4nLCAndmFsJyk7IHNldFZhcih2MiwgJy0taScsIFN0cmluZyhpKSk7DQogICAgICBpZiAocls1XSkgeyB2Mi5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdwcmUnLCAncDUwICcpKTsgdmFyIG4gPSBlbCgnc3BhbicsIG51bGwsIG1zKHJbNF0pKTsgY291bnRlcnMucHVzaChbbiwgcls0XSwgbXNdKTsgdjIuYXBwZW5kQ2hpbGQobik7IHYyLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ3ByZScsICcgwrcgcDk1ICcgKyBtcyhyWzVdKSkpOyB2Mi5hcHBlbmRDaGlsZChlbCgnc3BhbicsIG51bGwsICcqJykpOyB9DQogICAgICBlbHNlIHsgdjIudGV4dENvbnRlbnQgPSBtcyhyWzRdKTsgY291bnRlcnMucHVzaChbdjIsIHJbNF0sIG1zXSk7IH0NCiAgICAgIGNyLmFwcGVuZENoaWxkKHYyKTsNCiAgICB9DQogICAgdmFyIGNjID0gZWwoJ2RpdicsICdjZWxsIGMnKTsNCiAgICBpZiAocls2XSA9PT0gbnVsbCkgY2MuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnbm9uZScsICdub3Qgc2NvcmVkJykpOw0KICAgIGVsc2Ugew0KICAgICAgc2V0VmFyKGNjLCAnLS13JywgY3Aocls2XSkgKyAnJScpOyBzZXRWYXIoY2MsICctLWYnLCBTdHJpbmcoY3Aocls2XSkgLyAxMDApKTsNCiAgICAgIHZhciBzdCA9IGVsKCdzcGFuJywgJ3N0ZW0nKTsgc2V0VmFyKHN0LCAnLS1pJywgU3RyaW5nKGkpKTsgY2MuYXBwZW5kQ2hpbGQoc3QpOw0KICAgICAgdmFyIGR0ID0gZWwoJ3NwYW4nLCAnZG90Jyk7IHNldFZhcihkdCwgJy0taScsIFN0cmluZyhpKSk7IGNjLmFwcGVuZENoaWxkKGR0KTsNCiAgICAgIHZhciB2MyA9IGVsKCdzcGFuJywgJ3ZhbCcsIGYxKHJbNl0pKTsgc2V0VmFyKHYzLCAnLS1pJywgU3RyaW5nKGkpKTsgY291bnRlcnMucHVzaChbdjMsIHJbNl0sIGYxXSk7IGNjLmFwcGVuZENoaWxkKHYzKTsNCiAgICB9DQogICAgcm93LmFwcGVuZENoaWxkKGNsKTsgcm93LmFwcGVuZENoaWxkKG5tKTsgcm93LmFwcGVuZENoaWxkKGNyKTsgcm93LmFwcGVuZENoaWxkKGNjKTsNCiAgICByb3dzRWwuYXBwZW5kQ2hpbGQocm93KTsgcm93Tm9kZXMucHVzaChyb3cpOw0KICB9KTsNCg0KICAvLyBzb3J0aW5nOiB0aGUgY2hvc2VuIG1ldHJpYyBmaXJzdCAobW9kZWxzIHdpdGhvdXQgaXQgbGFzdCwgYnkgYWNjdXJhY3kpDQogIGZ1bmN0aW9uIHNvcnRSb3dzKG1vZGUsIGFuaW1hdGUpIHsNCiAgICB2YXIgYmVmb3JlID0gYW5pbWF0ZSAmJiBtb3Rpb24gPyByb3dOb2Rlcy5tYXAoZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOyB9KSA6IG51bGw7DQogICAgdmFyIGtleSA9IG1vZGUgPT09ICdhY2MnID8gMiA6IG1vZGUgPT09ICdsYXQnID8gNCA6IDY7DQogICAgdmFyIGRpciA9IG1vZGUgPT09ICdsYXQnID8gMSA6IC0xOw0KICAgIHZhciBpZHggPSBEQVRBLnJvd3MubWFwKGZ1bmN0aW9uIChyLCBpKSB7IHJldHVybiBpOyB9KTsNCiAgICBpZHguc29ydChmdW5jdGlvbiAoYSwgYikgew0KICAgICAgdmFyIEEgPSBEQVRBLnJvd3NbYV0sIEJiID0gREFUQS5yb3dzW2JdOw0KICAgICAgaWYgKEFba2V5XSAhPT0gbnVsbCAmJiBCYltrZXldICE9PSBudWxsKSByZXR1cm4gKEFba2V5XSAtIEJiW2tleV0pICogZGlyOw0KICAgICAgaWYgKEFba2V5XSAhPT0gbnVsbCkgcmV0dXJuIC0xOyBpZiAoQmJba2V5XSAhPT0gbnVsbCkgcmV0dXJuIDE7DQogICAgICBpZiAoQVsyXSAhPT0gbnVsbCAmJiBCYlsyXSAhPT0gbnVsbCkgcmV0dXJuIEJiWzJdIC0gQVsyXTsNCiAgICAgIGlmIChBWzJdICE9PSBudWxsKSByZXR1cm4gLTE7IGlmIChCYlsyXSAhPT0gbnVsbCkgcmV0dXJuIDE7DQogICAgICByZXR1cm4gKEFbNF0gfHwgMCkgLSAoQmJbNF0gfHwgMCk7DQogICAgfSk7DQogICAgaWR4LmZvckVhY2goZnVuY3Rpb24gKGksIHBvcykgeyByb3dOb2Rlc1tpXS5zdHlsZS5vcmRlciA9IFN0cmluZyhwb3MpOyB9KTsNCiAgICBpZiAoIWJlZm9yZSkgcmV0dXJuOw0KICAgIC8vIEZMSVA6IHN0YXJ0IGVhY2ggcm93IHdoZXJlIGl0IHdhcywgdGhlbiBsZXQgaXQgc2xpZGUgdG8gaXRzIG5ldyBzbG90DQogICAgcm93Tm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobiwgaSkgew0KICAgICAgdmFyIGQgPSBiZWZvcmVbaV0gLSBuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsNCiAgICAgIG4uY2xhc3NMaXN0LnJlbW92ZSgnZmxpcCcpOyBuLnN0eWxlLnRyYW5zZm9ybSA9IGQgPyAndHJhbnNsYXRlWSgnICsgZCArICdweCknIDogJyc7DQogICAgfSk7DQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsNCiAgICAgIHJvd05vZGVzLmZvckVhY2goZnVuY3Rpb24gKG4pIHsgbi5jbGFzc0xpc3QuYWRkKCdmbGlwJyk7IG4uc3R5bGUudHJhbnNmb3JtID0gJyc7IH0pOw0KICAgIH0pOyB9KTsNCiAgfQ0KICBzb3J0Um93cygnYWNjJyk7DQogIHZhciBzb3J0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc29ydCcpOw0KICBzb3J0RWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgIHZhciBiID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uJyk7IGlmICghYikgcmV0dXJuOw0KICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc29ydEVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLCBmdW5jdGlvbiAoeCkgeyB4LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgeCA9PT0gYiA/ICd0cnVlJyA6ICdmYWxzZScpOyB9KTsNCiAgICBzb3J0Um93cyhiLmRhdGFzZXQucywgdHJ1ZSk7DQogIH0pOw0KDQogIGJpbmRUaXBzKCcucm93JywgZnVuY3Rpb24gKHJvdykgew0KICAgIHZhciByID0gREFUQS5yb3dzWytyb3cuZGF0YXNldC5pXTsNCiAgICB2YXIgcm93cyA9IFtdOw0KICAgIHJvd3MucHVzaChbJ0F2ZXJhZ2UgYWNjdXJhY3knLCByWzJdID09PSBudWxsID8gJ25vdCByYW5rZWQnIDogcGMoclsyXSksIHIgPT09IHByaSA/ICdoaScgOiAnJ10pOw0KICAgIGlmIChyWzVdKSByb3dzLnB1c2goWydMYXRlbmN5IHA1MCAvIHA5NScsIG1zKHJbNF0pICsgJyAvICcgKyBtcyhyWzVdKSwgJ2hpJ10pOw0KICAgIGVsc2Ugcm93cy5wdXNoKFsnTWVkaWFuIGxhdGVuY3knLCByWzRdID09PSBudWxsID8gJ25vdCBtZWFzdXJlZCcgOiBtcyhyWzRdKV0pOw0KICAgIHJvd3MucHVzaChbJ0NhbGlicmF0aW9uIHNjb3JlJywgcls2XSA9PT0gbnVsbCA/ICdub3Qgc2NvcmVkJyA6IGYxKHJbNl0pLCByID09PSBwcmkgPyAnaGknIDogJyddKTsNCiAgICB2YXIgbm90ZTsNCiAgICBpZiAociA9PT0gcHJpKSBub3RlID0gJ0ZpcnN0IG9uIGFjY3VyYWN5LCBmYXN0ZXN0IG1lYXN1cmVkLCB0aGlyZCBvbiBjYWxpYnJhdGlvbiAoMS41IGJlaGluZCBKZXYgMS4xMy4wLCAwLjkgYmVoaW5kIFF1eWV0LTEuMC1MYXJnZSkuJzsNCiAgICBlbHNlIHsNCiAgICAgIHZhciBwYXJ0cyA9IFtdOw0KICAgICAgaWYgKHJbMl0gIT09IG51bGwpIHBhcnRzLnB1c2goKHJbMl0gLSBwcmlbMl0gPj0gMCA/ICcrJyA6ICfiiJInKSArIGYxKE1hdGguYWJzKHJbMl0gLSBwcmlbMl0pKSArICcgcHRzIGFjY3VyYWN5Jyk7DQogICAgICBpZiAocls0XSAhPT0gbnVsbCkgcGFydHMucHVzaChmMShyWzRdIC8gcHJpWzRdKS5yZXBsYWNlKC9cLjAkLywgJycpICsgJ8OXIHNsb3dlcicpOw0KICAgICAgaWYgKHJbNl0gIT09IG51bGwpIHBhcnRzLnB1c2goKHJbNl0gLSBwcmlbNl0gPj0gMCA/ICcrJyA6ICfiiJInKSArIGYxKE1hdGguYWJzKHJbNl0gLSBwcmlbNl0pKSArICcgY2FsaWJyYXRpb24nKTsNCiAgICAgIG5vdGUgPSAndnMgTWljcm9zb2Z0LURlY2lzaW9uLTE6ICcgKyBwYXJ0cy5qb2luKCcgwrcgJykgKyAnLic7DQogICAgICBpZiAoclsyXSA9PT0gbnVsbCkgbm90ZSArPSAnIE5vdCBwYXJ0IG9mIHRoZSAzNi1iZW5jaG1hcmsgYWNjdXJhY3kgcmFua2luZy4nOw0KICAgICAgaWYgKHJbNF0gPT09IG51bGwpIG5vdGUgKz0gJyBObyBsYXRlbmN5IG1lYXN1cmVtZW50IGluIEpldkJlbmNoIHYxLjYuMS4nOw0KICAgIH0NCiAgICByZXR1cm4geyB0aXRsZTogclswXSArIChyWzNdID8gJyDCtyAnICsgclszXSA6ICcnKSwgcm93czogcm93cywgbm90ZTogbm90ZSB9Ow0KICB9LCAnYmVsb3cnKTsNCg0KICAvLyBLZWVwIHZhbHVlIGxhYmVscyBpbnNpZGUgdGhlIHdpZGdldDogZmxpcCBhbnkgbGFiZWwgdGhhdCB3b3VsZCBzcGlsbA0KICAvLyBwYXN0IGl0cyBzaWRlJ3Mgb3V0ZXIgZWRnZSB0byBzaXQgaW5zaWRlIHRoZSBiYXIgaW5zdGVhZC4NCiAgZnVuY3Rpb24gZml0TGFiZWxzKCkgew0KICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmNlbGwnKSwgZnVuY3Rpb24gKGMpIHsNCiAgICAgIHZhciB2ID0gYy5xdWVyeVNlbGVjdG9yKCcudmFsJyk7IGlmICghdikgcmV0dXJuOw0KICAgICAgdi5jbGFzc0xpc3QucmVtb3ZlKCdpbicpOw0KICAgICAgdmFyIGNyID0gYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgdnIgPSB2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgICAgaWYgKGMuY2xhc3NMaXN0LmNvbnRhaW5zKCdsJykgPyB2ci5sZWZ0IDwgY3IubGVmdCAtIDAuNSA6IHZyLnJpZ2h0ID4gY3IucmlnaHQgKyAwLjUpIHYuY2xhc3NMaXN0LmFkZCgnaW4nKTsNCiAgICB9KTsNCiAgfQ0KICBmaXRMYWJlbHMoKTsNCiAgaWYgKCdSZXNpemVPYnNlcnZlcicgaW4gd2luZG93KSBuZXcgUmVzaXplT2JzZXJ2ZXIoZml0TGFiZWxzKS5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFydCcpKTsNCg0KICB2YXIgY2hhcnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hhcnQnKTsNCiAgb2JzZXJ2ZShbDQogICAgW2hlYWQsIGZ1bmN0aW9uICgpIHsgaGVhZC5jbGFzc0xpc3QuYWRkKCdpbicpOyB9XSwNCiAgICBbY2hhcnQsIGZ1bmN0aW9uICgpIHsNCiAgICAgIHJldmVhbChjaGFydCwgREFUQS5yb3dzLmxlbmd0aCwgZnVuY3Rpb24gKCkgew0KICAgICAgICBjb3VudGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7IGNvdW50VXAoY1swXSwgY1sxXSwgY1syXSwgOTAwLCAyMDAgKyBpICogMzApOyB9KTsNCiAgICAgIH0pOw0KICAgIH1dDQogIF0pOw0KDQp9KSgpOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
How Microsoft-Decision-1 works
To build Microsoft-Decision-1, we post trained Qwen3.5-9B for fast, single-pass decision scoring and will soon rebase it on other models, including Microsoft AI (MAI) and OpenAI. When given a fixed set of answer options, Microsoft-Decision-1 provides a calibrated probability score for each option. The model supports yes/no, multiple-choice, and rating options, as well as rubric-based grading of AI responses and agent actions, all through a simple structured API call.
To build a reliable decision model, we had to address several challenges:
1. Speed
Each decision adds delay, especially when one step depends on another. For example, adding just 100 milliseconds to each of 20 sequential decisions adds two seconds to the overall workflow.
Microsoft-Decision-1 P50 latency is ~35x faster than GPT-6 Sol.
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5MYXRlbmN5PC90aXRsZT4NCjxzdHlsZT4NCkBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1Cb29rLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLU1lZGl1bS5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1Cb2xkLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUl0YWxpYy5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkNhc2NhZGlhIENvZGUiO2ZvbnQtd2VpZ2h0OjIwMCA3MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvQ2FzY2FkaWFDb2RlLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJDYXNjYWRpYSBDb2RlIjtmb250LXdlaWdodDoyMDAgNzAwO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL0Nhc2NhZGlhQ29kZUl0YWxpYy53b2ZmMiIpIGZvcm1hdCgid29mZjIiKTt9DQo6cm9vdCB7DQogIC0tYmc6ICNmZmY7DQogIC0taW5rOiAjMDAwOw0KICAtLW11dGVkOiAjNTU1Ow0KICAtLWZhaW50OiAjYzljOWM5OyAgICAgICAgLyogc2Vjb25kYXJ5IHNlcmllcyAqLw0KICAtLWdvb2Q6ICNFM0Y2NzE7ICAgICAgICAgLyogcHJpbWFyeSBtb2RlbCAoc2l0ZSBhY2NlbnQgbGltZSkgKi8NCiAgLS1iYWQ6ICNGRkEwMzc7ICAgICAgICAgIC8qIHByaW1hcnkgbW9kZWwgYmVoaW5kIChzaXRlIGFjY2VudCBvcmFuZ2UpICovDQogIC0tcnVsZTogIzAwMDsNCiAgLS1ydWxlLXNvZnQ6ICNlNmU2ZTY7DQogIC0taG92ZXI6ICNmM2YzZjM7DQogIC0tYmFkZ2UtYmc6ICMwMDA7DQogIC0tYmFkZ2UtZmc6ICNmZmY7DQogIC0tdGlwLWJnOiAjMDAwOw0KICAtLXRpcC1mZzogI2ZmZjsNCiAgLS1zYW5zOiAiUFAgTmV1ZSBNb250cmVhbCIsIHNhbnMtc2VyaWY7DQogIC0tbW9ubzogIkNhc2NhZGlhIENvZGUiLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsIG1vbm9zcGFjZTsNCn0NCmh0bWxbZGF0YS10aGVtZT0iZGFyayJdIHsNCiAgLS1iZzogIzExMTsNCiAgLS1pbms6ICNmZmY7DQogIC0tbXV0ZWQ6ICM5OTk7DQogIC0tZmFpbnQ6ICM0NDQ7DQogIC0tcnVsZTogI2ZmZjsNCiAgLS1ydWxlLXNvZnQ6ICMyYTJhMmE7DQogIC0taG92ZXI6ICMxZjFmMWY7DQogIC0tYmFkZ2UtYmc6ICNmZmY7DQogIC0tYmFkZ2UtZmc6ICMxMTE7DQogIC0tdGlwLWJnOiAjZmZmOw0KICAtLXRpcC1mZzogIzExMTsNCn0NCg0KKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0NCmJvZHkgew0KICBtYXJnaW46IDA7DQogIGJhY2tncm91bmQ6IHZhcigtLWJnKTsNCiAgY29sb3I6IHZhcigtLWluayk7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1zYW5zKTsNCiAgZm9udC1zaXplOiAxNXB4Ow0KICBsaW5lLWhlaWdodDogMS40NTsNCiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7DQp9DQoud3JhcCB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZzogMnB4IDAgNnB4OyB9DQoubnVtIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyB9DQouayB7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KfQ0KYnV0dG9uIHsgZm9udDogaW5oZXJpdDsgY29sb3I6IGluaGVyaXQ7IGJhY2tncm91bmQ6IG5vbmU7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgY3Vyc29yOiBwb2ludGVyOyB9DQpidXR0b246Zm9jdXMtdmlzaWJsZSwgW3RhYmluZGV4XTpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWluayk7IG91dGxpbmUtb2Zmc2V0OiAycHg7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gSGVhZGVyID09PT09PT09PT09PT09PT09ICovDQouaGVhZCB7IG1hcmdpbi1ib3R0b206IDI4cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KLmJhZGdlIHsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBwYWRkaW5nOiA0cHggOHB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1iZyk7DQogIGNvbG9yOiB2YXIoLS1iYWRnZS1mZyk7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC1zaXplOiAxMHB4Ow0KICBsaW5lLWhlaWdodDogMTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsNCiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCn0NCmgxIHsNCiAgbWFyZ2luOiAxOHB4IDAgOHB4Ow0KICBmb250LXNpemU6IGNsYW1wKDI0cHgsIDQuMnZ3LCAzMnB4KTsNCiAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNWVtOw0KICBsaW5lLWhlaWdodDogMS4xMjsNCn0NCi5zdWIgeyBtYXJnaW46IDAgYXV0bzsgZm9udC1zaXplOiAxNnB4OyBsaW5lLWhlaWdodDogMS41OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXgtd2lkdGg6IDYyY2g7IH0NCi5zdWIgLmRpciB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNTAwOyB9DQoNCi8qID09PT09PT09PT09PT09PT09IExlZ2VuZCAvIHRvZ2dsZXMgPT09PT09PT09PT09PT09PT0gKi8NCi5jb250cm9scyB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGZsZXgtd3JhcDogd3JhcDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBnYXA6IDEwcHggMjRweDsNCiAgbWFyZ2luLWJvdHRvbTogMThweDsNCn0NCi5sZWdlbmQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogNHB4IDZweDsgfQ0KLmxlZ2VuZCBidXR0b24sIC50b2dnbGUgYnV0dG9uIHsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGdhcDogOHB4Ow0KICBwYWRkaW5nOiA1cHggMTFweDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOw0KICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsNCn0NCi5sZWdlbmQgYnV0dG9uOmhvdmVyLCAudG9nZ2xlIGJ1dHRvbjpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgfQ0KLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl0geyBib3JkZXItY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0NCi5sZWdlbmQgLnN3IHsgd2lkdGg6IDEwcHg7IGhlaWdodDogMTBweDsgZmxleDogMCAwIDEwcHg7IH0NCi5sZWdlbmQgLnN3LnByaSB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQoubGVnZW5kIC5zdy5yZWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1pbmspOyB9DQoubGVnZW5kIC5zdy5vdGggeyBiYWNrZ3JvdW5kOiB2YXIoLS1mYWludCk7IH0NCi5sZWdlbmQuaXNvIGJ1dHRvbjpub3QoW2FyaWEtcHJlc3NlZD0idHJ1ZSJdKSB7IG9wYWNpdHk6IDAuNDU7IH0NCi5sZWdlbmQgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdOjphZnRlciB7IGNvbnRlbnQ6ICLCtyBjbGljayB0byBjbGVhciI7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCi50b2dnbGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDRweDsgfQ0KLnRvZ2dsZSAuayB7IG1hcmdpbi1yaWdodDogOHB4OyB9DQoudG9nZ2xlIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXSB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IGNvbG9yOiB2YXIoLS1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBOb3RlcyAvIHNvdXJjZSA9PT09PT09PT09PT09PT09PSAqLw0KLm5vdGUgeyBtYXJnaW46IDE2cHggMCAwOyBmb250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCi5ub3RlIC5udW0geyBjb2xvcjogdmFyKC0taW5rKTsgfQ0KLnNvdXJjZSB7IG1hcmdpbi10b3A6IDMycHg7IHBhZGRpbmctdG9wOiAxNHB4OyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnVsZS1zb2Z0KTsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS41NTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLnNvdXJjZSBwIHsgbWFyZ2luOiAwIDAgNHB4OyB9DQoNCi8qID09PT09PT09PT09PT09PT09IFRvb2x0aXAgPT09PT09PT09PT09PT09PT0gKi8NCi50aXAgew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHotaW5kZXg6IDI7DQogIG1heC13aWR0aDogMzAwcHg7DQogIHBhZGRpbmc6IDEwcHggMTJweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tdGlwLWJnKTsNCiAgY29sb3I6IHZhcigtLXRpcC1mZyk7DQogIGZvbnQtc2l6ZTogMTNweDsNCiAgbGluZS1oZWlnaHQ6IDEuNDsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogIG9wYWNpdHk6IDA7DQogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xMnMgZWFzZTsNCn0NCi50aXAuc2hvdyB7IG9wYWNpdHk6IDE7IH0NCi50aXAgLnQgeyBmb250LXdlaWdodDogNTAwOyBtYXJnaW4tYm90dG9tOiA2cHg7IH0NCi50aXAgLnIgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGdhcDogMTZweDsgfQ0KLnRpcCAuciArIC5yIHsgbWFyZ2luLXRvcDogMnB4OyB9DQoudGlwIC5yLmhpIHsgZm9udC13ZWlnaHQ6IDcwMDsgfQ0KLnRpcCAuci5oaSA+IHNwYW46Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7IGNvbnRlbnQ6ICIiOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiA4cHg7IGhlaWdodDogOHB4OyBtYXJnaW4tcmlnaHQ6IDhweDsgdmVydGljYWwtYWxpZ246IDFweDsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi50aXAgLnIuaGkuYiA+IHNwYW46Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7IGJhY2tncm91bmQ6IHZhcigtLWJhZCk7IH0NCi50aXAgLnMgeyBtYXJnaW4tdG9wOiA4cHg7IHBhZGRpbmctdG9wOiA2cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tdGlwLWZnKSAyNSUsIHRyYW5zcGFyZW50KTsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAwLjg1OyB9DQoNCi8qID09PT09PT09PT09PT09PT09IE1vdGlvbiAoc2hhcmVkKSA9PT09PT09PT09PT09PT09PSAqLw0KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7DQogIC5oZWFkIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7IHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLCB0cmFuc2Zvcm0gMC41cyBlYXNlOyB9DQogIC5oZWFkLmluIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9DQp9DQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgew0KICAqIHsgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9DQp9DQpAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHsNCiAgLmhlYWQgeyBtYXJnaW4tYm90dG9tOiAyMnB4OyB9DQogIC5zdWIgeyBmb250LXNpemU6IDE1cHg7IH0NCiAgLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl06OmFmdGVyIHsgY29udGVudDogIsK3IHRhcCB0byBjbGVhciI7IH0NCn0NCg0KLyogPT09PT09PT09PT09PT09PT0gSG9yaXpvbnRhbCBiYXJzID09PT09PT09PT09PT09PT09ICovDQouaGJhciB7IC0tbmFtZS13OiAyMjBweDsgLS1ndXR0ZXI6IDcycHg7IC0tZ2FwOiAxNnB4OyB9DQoucm93cyB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KLmdyaWRsaW5lcywgLmF4aXMgew0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW5hbWUtdykgbWlubWF4KDAsIDFmcik7DQogIGdhcDogMCB2YXIoLS1nYXApOw0KfQ0KLmdyaWRsaW5lcyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9DQouZ2NlbGwsIC50aWNrcyB7IGdyaWQtY29sdW1uOiAyOyBwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogdmFyKC0tZ3V0dGVyKTsgfQ0KLmdsIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGJvdHRvbTogMDsgbGVmdDogdmFyKC0tcCk7IHdpZHRoOiAxcHg7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUtc29mdCk7IH0NCi5nbDpmaXJzdC1jaGlsZCB7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUpOyB6LWluZGV4OiAxOyB9IC8qIGJhc2VsaW5lIHNpdHMgYWJvdmUgdGhlIGZpbGxzIHNvIGl0IHJlYWRzIGFzIG9uZSBsaW5lICovDQoucm93IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW5hbWUtdykgbWlubWF4KDAsIDFmcik7DQogIGdhcDogMCB2YXIoLS1nYXApOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiA2cHggMDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7DQp9DQoucm93OmhvdmVyLCAucm93OmZvY3VzLXdpdGhpbiwgLnJvdy5ob3QgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ob3Zlcik7IH0NCi5yb3c6aG92ZXIgLm5hbWUsIC5yb3cuaG90IC5uYW1lIHsgY29sb3I6IHZhcigtLWluayk7IH0NCi5uYW1lIHsgdGV4dC1hbGlnbjogcmlnaHQ7IGZvbnQtc2l6ZTogMTQuNXB4OyBsaW5lLWhlaWdodDogMS4zOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsgfQ0KLnJvdy5wcmkgLm5hbWUsIC5yb3cucmVmIC5uYW1lIHsgY29sb3I6IHZhcigtLWluayk7IH0NCi5yb3cucHJpIC5uYW1lIHsgZm9udC13ZWlnaHQ6IDcwMDsgfQ0KLnJvdy5yZWYgLm5hbWUgeyBmb250LXdlaWdodDogNTAwOyB9DQoubmFtZSAuc3VibCB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAycHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMXB4OyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQouYXJlYSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy1yaWdodDogdmFyKC0tZ3V0dGVyKTsgfQ0KLnRyYWNrIHsgcG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDIycHg7IH0NCi5maWxsIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgd2lkdGg6IHZhcigtLXcpOyBiYWNrZ3JvdW5kOiB2YXIoLS1mYWludCk7IHRyYW5zaXRpb246IHdpZHRoIDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IH0NCi5yb3cucHJpIC5maWxsIHsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi5yb3cucmVmIC5maWxsIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgfQ0KLnJvdy5wcmkgLmZpbGwucDk1IHsNCiAgbGVmdDogdmFyKC0tdzApOw0KICB3aWR0aDogY2FsYyh2YXIoLS13KSAtIHZhcigtLXcwKSk7DQogIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb29kKSAwIDNweCwgdHJhbnNwYXJlbnQgM3B4IDZweCk7DQp9DQoudmFsIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBsZWZ0OiBjYWxjKHZhcigtLXcpICsgOHB4KTsNCiAgdG9wOiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KICB0cmFuc2l0aW9uOiBsZWZ0IDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7DQp9DQoucm93LnByaSAudmFsLCAucm93LnJlZiAudmFsIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA3MDA7IH0NCi52YWwgLnNlcCB7IG1hcmdpbjogMCA2cHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OiA0MDA7IH0NCi50aWNrcyB7IGhlaWdodDogMjBweDsgbWFyZ2luLXRvcDogNnB4OyB9DQoudGlja3Mgc3BhbiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogdmFyKC0tcCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0NCi50aWNrcyBzcGFuOmZpcnN0LWNoaWxkIHsgdHJhbnNmb3JtOiBub25lOyB9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAucmV2ZWFsIC5maWxsIHsgdHJhbnNmb3JtOiBzY2FsZVgoMCk7IHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41NXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksIHdpZHRoIDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zKTsgfQ0KICAucmV2ZWFsLmluIC5maWxsIHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLnZhbCB7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLCBsZWZ0IDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zICsgMjUwbXMpOyB9DQogIC5yZXZlYWwuaW4gLnZhbCB7IG9wYWNpdHk6IDE7IH0NCiAgLnJldmVhbCAucm93IHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC02cHgpOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMzVzIGVhc2UsIHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zKTsgfQ0KICAucmV2ZWFsLmluIC5yb3cgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0NCiAgLnJldmVhbC5pbi5zZXR0bGVkIC5maWxsLCAucmV2ZWFsLmluLnNldHRsZWQgLnZhbCwgLnJldmVhbC5pbi5zZXR0bGVkIC5yb3cgeyB0cmFuc2l0aW9uLWRlbGF5OiAwczsgfQ0KICAucmV2ZWFsLmluLnNldHRsZWQgLnJvdyB7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnMgZWFzZTsgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsgLmhiYXIgeyAtLW5hbWUtdzogMTcwcHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7IC5oYmFyIHsgLS1uYW1lLXc6IDE0MHB4OyAtLWdhcDogMTJweDsgfSAubmFtZSB7IGZvbnQtc2l6ZTogMTMuNXB4OyB9IC52YWwgeyBmb250LXNpemU6IDEycHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7DQogIC5oYmFyIHsgLS1uYW1lLXc6IDEwNHB4OyAtLWd1dHRlcjogNTZweDsgLS1nYXA6IDEwcHg7IH0NCiAgLnZhbCAucHJlIHsgZGlzcGxheTogbm9uZTsgfQ0KICAubmFtZSB7IGZvbnQtc2l6ZTogMTIuNXB4OyB9DQogIC5uYW1lIC5zdWJsIHsgZm9udC1zaXplOiAxMHB4OyB9DQogIC52YWwgeyBmb250LXNpemU6IDExcHg7IH0NCiAgLnZhbCAuc2VwIHsgbWFyZ2luOiAwIDRweDsgfQ0KICAudHJhY2sgeyBoZWlnaHQ6IDE4cHg7IH0NCiAgLnRpY2tzIHNwYW4geyBmb250LXNpemU6IDEwcHg7IH0NCiAgLnRpY2tzIHNwYW4uaGlkZS1zbSB7IGRpc3BsYXk6IG5vbmU7IH0NCn0NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgY2xhc3M9IndyYXAiIGlkPSJyb290Ij4NCiAgPGhlYWRlciBjbGFzcz0iaGVhZCI+DQogICAgPHNwYW4gY2xhc3M9ImJhZGdlIj5MYXRlbmN5PC9zcGFuPg0KICAgIDxoMT5MYXRlbmN5PC9oMT4NCiAgICA8cCBjbGFzcz0ic3ViIj48c3BhbiBjbGFzcz0iZGlyIj5Mb3dlciBpcyBiZXR0ZXIuPC9zcGFuPiBUaW1lIHRvIGEgZGVjaXNpb24gcGVyIHJlcXVlc3QsIG1lZGlhbiBhY3Jvc3MgdGhlIEpldkJlbmNoIHN1aXRlLjwvcD4NCiAgPC9oZWFkZXI+DQoNCiAgPGRpdiBjbGFzcz0iY29udHJvbHMiPg0KICAgIDxkaXYgY2xhc3M9ImsiPkFkanVzdGVkIG1lZGlhbiBsYXRlbmN5IHBlciByZXF1ZXN0PC9kaXY+DQogICAgPGRpdiBjbGFzcz0idG9nZ2xlIiBpZD0ic2NhbGUiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJBeGlzIHNjYWxlIj4NCiAgICAgIDxzcGFuIGNsYXNzPSJrIj5TY2FsZTwvc3Bhbj4NCiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLXNjYWxlPSJsaW5lYXIiIGFyaWEtcHJlc3NlZD0idHJ1ZSI+TGluZWFyPC9idXR0b24+DQogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgZGF0YS1zY2FsZT0ibG9nIiBhcmlhLXByZXNzZWQ9ImZhbHNlIj5Mb2c8L2J1dHRvbj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9ImhiYXIgcmV2ZWFsIiBpZD0iY2hhcnQiPg0KICAgIDxkaXYgY2xhc3M9InJvd3MiIGlkPSJyb3dzIj4NCiAgICAgIDxkaXYgY2xhc3M9ImdyaWRsaW5lcyIgYXJpYS1oaWRkZW49InRydWUiPjxkaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ2NlbGwiIGlkPSJnY2VsbCI+PC9kaXY+PC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iYXhpcyIgYXJpYS1oaWRkZW49InRydWUiPjxkaXY+PC9kaXY+PGRpdiBjbGFzcz0idGlja3MiIGlkPSJ0aWNrcyI+PC9kaXY+PC9kaXY+DQogIDwvZGl2Pg0KICA8cCBjbGFzcz0ibm90ZSI+U3RyaXBlZCBzZWdtZW50OiBNaWNyb3NvZnQtRGVjaXNpb24tMSBwOTUgYXQgPHNwYW4gY2xhc3M9Im51bSI+MTI1IG1zPC9zcGFuPi4gU3dpdGNoIHRvIHRoZSBsb2cgc2NhbGUgdG8gY29tcGFyZSB0aGUgc3ViLXNlY29uZCBtb2RlbHMuPC9wPg0KICA8ZGl2IGNsYXNzPSJzb3VyY2UiPg0KICAgIDxwPlNvdXJjZTogSmV2QmVuY2ggdjEuNi4xIGFkanVzdGVkIG1lZGlhbiAocDUwKSBsYXRlbmN5LCBjaGVja2VkIE9jdCA3LCAyMDI2LjwvcD4NCiAgICA8cD4qIE1pY3Jvc29mdC1EZWNpc2lvbi0xIG1lYXN1cmVkIHRocm91Z2ggRm91bmRyeSBpbiB0aGUgc2FtZSByZWdpb24uPC9wPg0KICA8L2Rpdj4NCg0KICA8ZGl2IGNsYXNzPSJ0aXAiIGlkPSJ0aXAiIHJvbGU9InRvb2x0aXAiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdD4NCihmdW5jdGlvbiAoKSB7DQogIHZhciBtb3Rpb24gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpJykubWF0Y2hlczsNCiAgdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpOw0KICB2YXIgdGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpcCcpOw0KDQogIGZ1bmN0aW9uIGVsKHRhZywgY2xzLCB0ZXh0KSB7DQogICAgdmFyIG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7DQogICAgaWYgKGNscykgbi5jbGFzc05hbWUgPSBjbHM7DQogICAgaWYgKHRleHQgIT09IHVuZGVmaW5lZCAmJiB0ZXh0ICE9PSBudWxsKSBuLnRleHRDb250ZW50ID0gdGV4dDsNCiAgICByZXR1cm4gbjsNCiAgfQ0KICBmdW5jdGlvbiBzZXRWYXIobiwgaywgdikgeyBuLnN0eWxlLnNldFByb3BlcnR5KGssIHYpOyB9DQogIGZ1bmN0aW9uIGZtdE4obiwgZCkgeyByZXR1cm4gbi50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZCwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBkIH0pOyB9DQoNCiAgLy8gLS0tLSBUb29sdGlwIChob3Zlciwga2V5Ym9hcmQgZm9jdXMgYW5kIHRhcCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIHZhciBob3QgPSBudWxsOw0KICBmdW5jdGlvbiByZW5kZXJUaXAoc3BlYykgew0KICAgIHRpcC5pbm5lckhUTUwgPSAnJzsNCiAgICBpZiAoc3BlYy50aXRsZSkgdGlwLmFwcGVuZENoaWxkKGVsKCdkaXYnLCAndCcsIHNwZWMudGl0bGUpKTsNCiAgICAoc3BlYy5yb3dzIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7DQogICAgICB2YXIgcm93ID0gZWwoJ2RpdicsICdyJyArIChyWzJdID8gJyAnICsgclsyXSA6ICcnKSk7DQogICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCBudWxsLCByWzBdKSk7DQogICAgICByb3cuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnbnVtJywgclsxXSkpOw0KICAgICAgdGlwLmFwcGVuZENoaWxkKHJvdyk7DQogICAgfSk7DQogICAgaWYgKHNwZWMubm90ZSkgdGlwLmFwcGVuZENoaWxkKGVsKCdkaXYnLCAncycsIHNwZWMubm90ZSkpOw0KICB9DQogIGZ1bmN0aW9uIHBsYWNlVGlwKG5vZGUsIHByZWZlcikgew0KICAgIHZhciByciA9IHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgdmFyIG5yID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICB2YXIgdHcgPSB0aXAub2Zmc2V0V2lkdGgsIHRoID0gdGlwLm9mZnNldEhlaWdodDsNCiAgICB2YXIgbGVmdCA9IG5yLmxlZnQgLSByci5sZWZ0ICsgKHByZWZlciA9PT0gJ2Fib3ZlJyA/IG5yLndpZHRoIC8gMiAtIHR3IC8gMiA6IDApOw0KICAgIGxlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihsZWZ0LCByci53aWR0aCAtIHR3KSk7DQogICAgdmFyIGJlbG93ID0gbnIuYm90dG9tIC0gcnIudG9wICsgNjsNCiAgICB2YXIgYWJvdmUgPSBuci50b3AgLSByci50b3AgLSB0aCAtIChwcmVmZXIgPT09ICdhYm92ZScgPyAyNiA6IDYpOw0KICAgIHZhciB0b3A7DQogICAgaWYgKHByZWZlciA9PT0gJ2Fib3ZlJykgdG9wID0gYWJvdmUgPj0gMCA/IGFib3ZlIDogTWF0aC5taW4oYmVsb3csIHJyLmhlaWdodCAtIHRoKTsNCiAgICBlbHNlIHRvcCA9IChiZWxvdyArIHRoIDw9IHJyLmhlaWdodCkgPyBiZWxvdyA6IE1hdGgubWF4KDAsIGFib3ZlKTsNCiAgICAvLyBTdGF5IGluc2lkZSB0aGUgd2lkZ2V0IHNvIHRoZSBhdXRvLXNpemVkIGZyYW1lIG5ldmVyIGNsaXBzIHRoZSB0aXAuDQogICAgdGlwLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JzsNCiAgICB0aXAuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgdG9wKSArICdweCc7DQogIH0NCiAgZnVuY3Rpb24gc2hvd1RpcChub2RlLCBidWlsZCwgcHJlZmVyKSB7DQogICAgaWYgKGhvdCA9PT0gbm9kZSkgcmV0dXJuOw0KICAgIGhpZGVUaXAoKTsNCiAgICBob3QgPSBub2RlOw0KICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnaG90Jyk7DQogICAgcmVuZGVyVGlwKGJ1aWxkKG5vZGUpKTsNCiAgICB0aXAuY2xhc3NMaXN0LmFkZCgnc2hvdycpOw0KICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7DQogICAgcGxhY2VUaXAobm9kZSwgcHJlZmVyKTsNCiAgfQ0KICBmdW5jdGlvbiBoaWRlVGlwKCkgew0KICAgIGlmIChob3QpIGhvdC5jbGFzc0xpc3QucmVtb3ZlKCdob3QnKTsNCiAgICBob3QgPSBudWxsOw0KICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7DQogICAgdGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpOw0KICB9DQogIGZ1bmN0aW9uIGJpbmRUaXBzKHNlbGVjdG9yLCBidWlsZCwgcHJlZmVyKSB7DQogICAgZnVuY3Rpb24gZmluZCh0KSB7DQogICAgICB2YXIgbiA9IHQ7DQogICAgICB3aGlsZSAobiAmJiBuICE9PSByb290KSB7DQogICAgICAgIGlmIChuLm1hdGNoZXMgJiYgbi5tYXRjaGVzKHNlbGVjdG9yKSkgcmV0dXJuIG47DQogICAgICAgIG4gPSBuLnBhcmVudE5vZGU7DQogICAgICB9DQogICAgICByZXR1cm4gbnVsbDsNCiAgICB9DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobikgc2hvd1RpcChuLCBidWlsZCwgcHJlZmVyKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuICYmICFuLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpIGhpZGVUaXAoKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4pIHNob3dUaXAobiwgYnVpbGQsIHByZWZlcik7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobiAmJiAhbi5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSBoaWRlVGlwKCk7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7IGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGhpZGVUaXAoKTsgfSk7DQogIH0NCg0KICAvLyAtLS0tIENvdW50LXVwICh2aXNpYmlsaXR5LXRyaWdnZXJlZCB2aWEgcmV2ZWFsKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIHZhciBFQVNFID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgMyk7IH07DQogIGZ1bmN0aW9uIGNvdW50VXAobm9kZSwgdG8sIGZtdCwgbXMsIGRlbGF5KSB7DQogICAgaWYgKCFtb3Rpb24pIHsgbm9kZS50ZXh0Q29udGVudCA9IGZtdCh0byk7IHJldHVybjsgfQ0KICAgIHZhciBzdGFydCA9IG51bGw7DQogICAgbm9kZS50ZXh0Q29udGVudCA9IGZtdCgwKTsNCiAgICBmdW5jdGlvbiBmcmFtZShub3cpIHsNCiAgICAgIGlmIChzdGFydCA9PT0gbnVsbCkgc3RhcnQgPSBub3cgKyAoZGVsYXkgfHwgMCk7DQogICAgICB2YXIgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIChub3cgLSBzdGFydCkgLyBtcykpOw0KICAgICAgbm9kZS50ZXh0Q29udGVudCA9IGZtdCh0byAqIEVBU0UodCkpOw0KICAgICAgaWYgKHQgPCAxKSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOw0KICAgIH0NCiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnJhbWUpOw0KICB9DQoNCiAgLy8gLS0tLSBSZXZlYWwgKEludGVyc2VjdGlvbk9ic2VydmVyIG9ubHk7IG5vIHRpbWVycyBzdGFydCBhbnl0aGluZykgLS0tLS0tDQogIC8vIGBzZXR0bGVkYCByZW1vdmVzIHN0YWdnZXIgZGVsYXlzIG9uY2UgdGhlIGVudHJhbmNlIGhhcyBwbGF5ZWQgc28gaG92ZXIsDQogIC8vIHRvZ2dsZXMgYW5kIGZpbHRlcnMgcmVzcG9uZCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLg0KICBmdW5jdGlvbiByZXZlYWwoZ3JvdXAsIGNvdW50LCBjYikgew0KICAgIGdyb3VwLmNsYXNzTGlzdC5hZGQoJ2luJyk7DQogICAgaWYgKGNiKSBjYigpOw0KICAgIGlmICghbW90aW9uKSB7IGdyb3VwLmNsYXNzTGlzdC5hZGQoJ3NldHRsZWQnKTsgcmV0dXJuOyB9DQogICAgdmFyIHdhaXQgPSBNYXRoLm1pbihjb3VudCwgMzApICogNDUgKyA3MDA7DQogICAgdmFyIHQwID0gcGVyZm9ybWFuY2Uubm93KCk7DQogICAgKGZ1bmN0aW9uIHRpY2sobm93KSB7IGlmIChub3cgLSB0MCA+PSB3YWl0KSBncm91cC5jbGFzc0xpc3QuYWRkKCdzZXR0bGVkJyk7IGVsc2UgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spOyB9KSh0MCk7DQogIH0NCiAgZnVuY3Rpb24gb2JzZXJ2ZShpdGVtcykgeyAvLyBpdGVtczogW1tub2RlLCBmbl1dDQogICAgaWYgKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSB7DQogICAgICB2YXIgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKGVudHJpZXMpIHsNCiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7DQogICAgICAgICAgaWYgKCFlLmlzSW50ZXJzZWN0aW5nKSByZXR1cm47DQogICAgICAgICAgaW8udW5vYnNlcnZlKGUudGFyZ2V0KTsNCiAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpZiAoaXRbMF0gPT09IGUudGFyZ2V0KSBpdFsxXSgpOyB9KTsNCiAgICAgICAgfSk7DQogICAgICB9LCB7IHRocmVzaG9sZDogMC4wNSB9KTsNCiAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGlvLm9ic2VydmUoaXRbMF0pOyB9KTsNCiAgICB9IGVsc2Ugew0KICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaXRbMV0oKTsgfSk7DQogICAgfQ0KICB9DQogIHZhciBoZWFkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhlYWQnKTsNCg0KICB2YXIgREFUQSA9IHsNCiAgICBwcmltYXJ5OiAnTWljcm9zb2Z0LURlY2lzaW9uLTEnLA0KICAgIHJvd3M6IFsNCiAgICAgIC8vIG5hbWUsIHA1MCBtcywga2luZCwgcDk1IG1zDQogICAgICBbJ01pY3Jvc29mdC1EZWNpc2lvbi0xJywgODUsICdwcmknLCAxMjVdLA0KICAgICAgWydIMk8tTGlnaHRuaW5nLTRCIHYxLjEnLCAyMTBdLA0KICAgICAgWydKZXYgMS4xMy4wJywgMjQwXSwNCiAgICAgIFsnR1BULTYgTHVuYSBEZWNpc2lvbnMnLCAzMDBdLA0KICAgICAgWydRdXlldC0xLjAtTGFyZ2UnLCAzODBdLA0KICAgICAgWydTdXJvZ2F0ZSBSdW5lIDI2Qi1BNEInLCAzODBdLA0KICAgICAgWydkZWNrLTMxQicsIDQwMF0sDQogICAgICBbJ0dQVC02IFNvbCcsIDMwMTAsICdyZWYnXQ0KICAgIF0sDQogICAgc2NhbGVzOiB7DQogICAgICBsaW5lYXI6IHsgbWF4OiAzMTAwLCB0aWNrczogW1swLCAnMCddLCBbMTAwMCwgJzEgcyddLCBbMjAwMCwgJzIgcyddLCBbMzAwMCwgJzMgcyddXSB9LA0KICAgICAgbG9nOiB7IG1pbjogMjAsIG1heDogNDAwMCwgdGlja3M6IFtbMjAsICcyMCBtcyddLCBbNTAsICc1MCBtcyddLCBbMTAwLCAnMTAwIG1zJ10sIFsyMDAsICcyMDAgbXMnLCAxXSwgWzUwMCwgJzUwMCBtcycsIDFdLCBbMTAwMCwgJzEgcyddLCBbMjAwMCwgJzIgcycsIDFdLCBbMzAwMCwgJzMgcyddXSB9DQogICAgfQ0KICB9Ow0KDQogIGZ1bmN0aW9uIG1zKHYpIHsgcmV0dXJuIHYgPj0gMTAwMCA/IGZtdE4odiAvIDEwMDAsIDIpICsgJyBzJyA6IE1hdGgucm91bmQodikgKyAnIG1zJzsgfQ0KICB2YXIgc2NhbGUgPSAnbGluZWFyJzsNCiAgZnVuY3Rpb24gcGN0KHYpIHsNCiAgICB2YXIgcyA9IERBVEEuc2NhbGVzW3NjYWxlXTsNCiAgICBpZiAoc2NhbGUgPT09ICdsaW5lYXInKSByZXR1cm4gKHYgLyBzLm1heCkgKiAxMDA7DQogICAgcmV0dXJuIChNYXRoLmxvZyhNYXRoLm1heCh2LCBzLm1pbikgLyBzLm1pbikgLyBNYXRoLmxvZyhzLm1heCAvIHMubWluKSkgKiAxMDA7DQogIH0NCg0KICB2YXIgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dzJyk7DQogIHZhciBnY2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnY2VsbCcpOw0KICB2YXIgdGlja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGlja3MnKTsNCiAgdmFyIGNvdW50ZXJzID0gW107DQoNCiAgREFUQS5yb3dzLmZvckVhY2goZnVuY3Rpb24gKHIsIGkpIHsNCiAgICB2YXIgcm93ID0gZWwoJ2RpdicsICdyb3cnICsgKHJbMl0gPyAnICcgKyByWzJdIDogJycpKTsNCiAgICByb3cudGFiSW5kZXggPSAwOw0KICAgIHNldFZhcihyb3csICctLWknLCBTdHJpbmcoaSkpOw0KICAgIHJvdy5kYXRhc2V0LmkgPSBTdHJpbmcoaSk7DQogICAgdmFyIG5hbWUgPSBlbCgnZGl2JywgJ25hbWUnLCByWzBdKTsNCiAgICB2YXIgYXJlYSA9IGVsKCdkaXYnLCAnYXJlYScpOw0KICAgIHZhciB0cmFjayA9IGVsKCdkaXYnLCAndHJhY2snKTsNCiAgICB2YXIgZmlsbCA9IGVsKCdzcGFuJywgJ2ZpbGwnKTsNCiAgICB0cmFjay5hcHBlbmRDaGlsZChmaWxsKTsNCiAgICB2YXIgdmFsID0gZWwoJ3NwYW4nLCAndmFsIG51bScpOw0KICAgIGlmIChyWzNdKSB7DQogICAgICB2YXIgcDk1ID0gZWwoJ3NwYW4nLCAnZmlsbCBwOTUnKTsNCiAgICAgIHRyYWNrLmFwcGVuZENoaWxkKHA5NSk7DQogICAgICB2YXIgYSA9IGVsKCdzcGFuJyksIGFuID0gZWwoJ3NwYW4nLCBudWxsLCBtcyhyWzFdKSk7DQogICAgICB2YXIgYiA9IGVsKCdzcGFuJyksIGJuID0gZWwoJ3NwYW4nLCBudWxsLCBtcyhyWzNdKSk7DQogICAgICBhLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ3ByZScsICdwNTAgJykpOyBhLmFwcGVuZENoaWxkKGFuKTsNCiAgICAgIGIuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAncHJlJywgJ3A5NSAnKSk7IGIuYXBwZW5kQ2hpbGQoYm4pOyBiLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgbnVsbCwgJyonKSk7DQogICAgICB2YWwuYXBwZW5kQ2hpbGQoYSk7IHZhbC5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdzZXAnLCAnwrcnKSk7IHZhbC5hcHBlbmRDaGlsZChiKTsNCiAgICAgIGNvdW50ZXJzLnB1c2goW2FuLCByWzFdXSwgW2JuLCByWzNdXSk7DQogICAgfSBlbHNlIHsNCiAgICAgIGNvdW50ZXJzLnB1c2goW3ZhbCwgclsxXV0pOw0KICAgIH0NCiAgICB0cmFjay5hcHBlbmRDaGlsZCh2YWwpOw0KICAgIGFyZWEuYXBwZW5kQ2hpbGQodHJhY2spOw0KICAgIHJvdy5hcHBlbmRDaGlsZChuYW1lKTsNCiAgICByb3cuYXBwZW5kQ2hpbGQoYXJlYSk7DQogICAgcm93LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHJbMF0gKyAnOiBwNTAgJyArIG1zKHJbMV0pICsgKHJbM10gPyAnLCBwOTUgJyArIG1zKHJbM10pIDogJycpKTsNCiAgICByb3dzLmFwcGVuZENoaWxkKHJvdyk7DQogIH0pOw0KDQogIGZ1bmN0aW9uIGxheW91dCgpIHsNCiAgICB2YXIgcyA9IERBVEEuc2NhbGVzW3NjYWxlXTsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHJvd3MucXVlcnlTZWxlY3RvckFsbCgnLnJvdycpLCBmdW5jdGlvbiAocm93KSB7DQogICAgICB2YXIgciA9IERBVEEucm93c1srcm93LmRhdGFzZXQuaV07DQogICAgICB2YXIgdyA9IHBjdChyWzFdKSArICclJzsNCiAgICAgIHNldFZhcihyb3cucXVlcnlTZWxlY3RvcignLmZpbGwnKSwgJy0tdycsIHcpOw0KICAgICAgc2V0VmFyKHJvdy5xdWVyeVNlbGVjdG9yKCcudmFsJyksICctLXcnLCByWzNdID8gcGN0KHJbM10pICsgJyUnIDogdyk7DQogICAgICB2YXIgcDk1ID0gcm93LnF1ZXJ5U2VsZWN0b3IoJy5wOTUnKTsNCiAgICAgIGlmIChwOTUpIHsgc2V0VmFyKHA5NSwgJy0tdzAnLCB3KTsgc2V0VmFyKHA5NSwgJy0tdycsIHBjdChyWzNdKSArICclJyk7IH0NCiAgICB9KTsNCiAgICBnY2VsbC5pbm5lckhUTUwgPSAnJzsgdGlja3MuaW5uZXJIVE1MID0gJyc7DQogICAgcy50aWNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7DQogICAgICB2YXIgcCA9IHBjdCh0WzBdKSArICclJzsNCiAgICAgIHZhciBnID0gZWwoJ3NwYW4nLCAnZ2wnKTsgc2V0VmFyKGcsICctLXAnLCBwKTsgZ2NlbGwuYXBwZW5kQ2hpbGQoZyk7DQogICAgICB2YXIgbCA9IGVsKCdzcGFuJywgdFsyXSA/ICdoaWRlLXNtJyA6IG51bGwsIHRbMV0pOyBzZXRWYXIobCwgJy0tcCcsIHApOyB0aWNrcy5hcHBlbmRDaGlsZChsKTsNCiAgICB9KTsNCiAgfQ0KICBsYXlvdXQoKTsNCg0KICAvLyBTY2FsZSB0b2dnbGUNCiAgdmFyIHRvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2FsZScpOw0KICB0b2dnbGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgIHZhciBiID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uJyk7DQogICAgaWYgKCFiIHx8IGIuZGF0YXNldC5zY2FsZSA9PT0gc2NhbGUpIHJldHVybjsNCiAgICBzY2FsZSA9IGIuZGF0YXNldC5zY2FsZTsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRvZ2dsZS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKSwgZnVuY3Rpb24gKHgpIHsgeC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHggPT09IGIgPyAndHJ1ZScgOiAnZmFsc2UnKTsgfSk7DQogICAgbGF5b3V0KCk7DQogICAgaGlkZVRpcCgpOw0KICB9KTsNCg0KICAvLyBUb29sdGlwDQogIGJpbmRUaXBzKCcucm93JywgZnVuY3Rpb24gKHJvdykgew0KICAgIHZhciByID0gREFUQS5yb3dzWytyb3cuZGF0YXNldC5pXTsNCiAgICB2YXIgYmFzZSA9IERBVEEucm93c1swXVsxXTsNCiAgICB2YXIgc3BlYyA9IHsgdGl0bGU6IHJbMF0sIHJvd3M6IFtbJ3A1MCBsYXRlbmN5JywgbXMoclsxXSksIHJbMl0gPT09ICdwcmknID8gJ2hpJyA6ICcnXV0gfTsNCiAgICBpZiAoclszXSkgew0KICAgICAgc3BlYy5yb3dzLnB1c2goWydwOTUgbGF0ZW5jeScsIG1zKHJbM10pXSk7DQogICAgICBzcGVjLm5vdGUgPSAnSGFsZiBvZiByZXF1ZXN0cyByZXR1cm4gd2l0aGluICcgKyBtcyhyWzFdKSArICcgYW5kIDk1JSB3aXRoaW4gJyArIG1zKHJbM10pICsgJy4nOw0KICAgIH0gZWxzZSB7DQogICAgICBzcGVjLnJvd3MucHVzaChbJ3ZzICcgKyBEQVRBLnByaW1hcnksIGZtdE4oclsxXSAvIGJhc2UsIHJbMV0gLyBiYXNlID49IDEwID8gMCA6IDEpICsgJ8OXIHNsb3dlciddKTsNCiAgICAgIHNwZWMubm90ZSA9IHJbMl0gPT09ICdyZWYnID8gJ0Zyb250aWVyIHJlZmVyZW5jZSBtb2RlbC4nIDogJ0FkanVzdGVkIG1lZGlhbiBsYXRlbmN5IG9uIEpldkJlbmNoLic7DQogICAgfQ0KICAgIHJldHVybiBzcGVjOw0KICB9KTsNCg0KICAvLyBNb3Rpb24NCiAgdmFyIGNoYXJ0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0Jyk7DQogIG9ic2VydmUoWw0KICAgIFtoZWFkLCBmdW5jdGlvbiAoKSB7IGhlYWQuY2xhc3NMaXN0LmFkZCgnaW4nKTsgfV0sDQogICAgW2NoYXJ0LCBmdW5jdGlvbiAoKSB7DQogICAgICByZXZlYWwoY2hhcnQsIERBVEEucm93cy5sZW5ndGgsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgY291bnRlcnMuZm9yRWFjaChmdW5jdGlvbiAoYywgaSkgeyBjb3VudFVwKGNbMF0sIGNbMV0sIG1zLCA4MDAsIDApOyB9KTsNCiAgICAgIH0pOw0KICAgIH1dDQogIF0pOw0KDQp9KSgpOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
2. Quality that generalizes
It’s easy to overfit a model for one benchmark or one type of decision task. We need to know whether that quality carries over to various tasks the model wasn’t trained on. That’s why we evaluated Microsoft-Decision-1 across dozens of benchmarks kept blinded from training, spanning routing, ranking, long context, multilingual and out-of-distribution tasks, reasoning, and safety. We also took several of the top public models on the popular open leaderboard JevBench and tested them across 36 additional public and private benchmarks. Microsoft-Decision-1 performed the best across these broader sets of benchmarks, demonstrating strong generalization.
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5BdmVyYWdlIGFjY3VyYWN5PC90aXRsZT4NCjxzdHlsZT4NCkBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1Cb29rLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLU1lZGl1bS5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1Cb2xkLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUl0YWxpYy5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkNhc2NhZGlhIENvZGUiO2ZvbnQtd2VpZ2h0OjIwMCA3MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvQ2FzY2FkaWFDb2RlLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJDYXNjYWRpYSBDb2RlIjtmb250LXdlaWdodDoyMDAgNzAwO2ZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL0Nhc2NhZGlhQ29kZUl0YWxpYy53b2ZmMiIpIGZvcm1hdCgid29mZjIiKTt9DQo6cm9vdCB7DQogIC0tYmc6ICNmZmY7DQogIC0taW5rOiAjMDAwOw0KICAtLW11dGVkOiAjNTU1Ow0KICAtLWZhaW50OiAjYzljOWM5OyAgICAgICAgLyogc2Vjb25kYXJ5IHNlcmllcyAqLw0KICAtLWdvb2Q6ICNFM0Y2NzE7ICAgICAgICAgLyogcHJpbWFyeSBtb2RlbCAoc2l0ZSBhY2NlbnQgbGltZSkgKi8NCiAgLS1iYWQ6ICNGRkEwMzc7ICAgICAgICAgIC8qIHByaW1hcnkgbW9kZWwgYmVoaW5kIChzaXRlIGFjY2VudCBvcmFuZ2UpICovDQogIC0tcnVsZTogIzAwMDsNCiAgLS1ydWxlLXNvZnQ6ICNlNmU2ZTY7DQogIC0taG92ZXI6ICNmM2YzZjM7DQogIC0tYmFkZ2UtYmc6ICMwMDA7DQogIC0tYmFkZ2UtZmc6ICNmZmY7DQogIC0tdGlwLWJnOiAjMDAwOw0KICAtLXRpcC1mZzogI2ZmZjsNCiAgLS1zYW5zOiAiUFAgTmV1ZSBNb250cmVhbCIsIHNhbnMtc2VyaWY7DQogIC0tbW9ubzogIkNhc2NhZGlhIENvZGUiLCB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgIkxpYmVyYXRpb24gTW9ubyIsIG1vbm9zcGFjZTsNCn0NCmh0bWxbZGF0YS10aGVtZT0iZGFyayJdIHsNCiAgLS1iZzogIzExMTsNCiAgLS1pbms6ICNmZmY7DQogIC0tbXV0ZWQ6ICM5OTk7DQogIC0tZmFpbnQ6ICM0NDQ7DQogIC0tcnVsZTogI2ZmZjsNCiAgLS1ydWxlLXNvZnQ6ICMyYTJhMmE7DQogIC0taG92ZXI6ICMxZjFmMWY7DQogIC0tYmFkZ2UtYmc6ICNmZmY7DQogIC0tYmFkZ2UtZmc6ICMxMTE7DQogIC0tdGlwLWJnOiAjZmZmOw0KICAtLXRpcC1mZzogIzExMTsNCn0NCg0KKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IH0NCmJvZHkgew0KICBtYXJnaW46IDA7DQogIGJhY2tncm91bmQ6IHZhcigtLWJnKTsNCiAgY29sb3I6IHZhcigtLWluayk7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1zYW5zKTsNCiAgZm9udC1zaXplOiAxNXB4Ow0KICBsaW5lLWhlaWdodDogMS40NTsNCiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7DQp9DQoud3JhcCB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZzogMnB4IDAgNnB4OyB9DQoubnVtIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOyB9DQouayB7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC1zaXplOiAxMXB4Ow0KICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KfQ0KYnV0dG9uIHsgZm9udDogaW5oZXJpdDsgY29sb3I6IGluaGVyaXQ7IGJhY2tncm91bmQ6IG5vbmU7IGJvcmRlcjogMDsgcGFkZGluZzogMDsgY3Vyc29yOiBwb2ludGVyOyB9DQpidXR0b246Zm9jdXMtdmlzaWJsZSwgW3RhYmluZGV4XTpmb2N1cy12aXNpYmxlIHsgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWluayk7IG91dGxpbmUtb2Zmc2V0OiAycHg7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gSGVhZGVyID09PT09PT09PT09PT09PT09ICovDQouaGVhZCB7IG1hcmdpbi1ib3R0b206IDI4cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgfQ0KLmJhZGdlIHsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBwYWRkaW5nOiA0cHggOHB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1iZyk7DQogIGNvbG9yOiB2YXIoLS1iYWRnZS1mZyk7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC1zaXplOiAxMHB4Ow0KICBsaW5lLWhlaWdodDogMTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsNCiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCn0NCmgxIHsNCiAgbWFyZ2luOiAxOHB4IDAgOHB4Ow0KICBmb250LXNpemU6IGNsYW1wKDI0cHgsIDQuMnZ3LCAzMnB4KTsNCiAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxNWVtOw0KICBsaW5lLWhlaWdodDogMS4xMjsNCn0NCi5zdWIgeyBtYXJnaW46IDAgYXV0bzsgZm9udC1zaXplOiAxNnB4OyBsaW5lLWhlaWdodDogMS41OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBtYXgtd2lkdGg6IDYyY2g7IH0NCi5zdWIgLmRpciB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNTAwOyB9DQoNCi8qID09PT09PT09PT09PT09PT09IExlZ2VuZCAvIHRvZ2dsZXMgPT09PT09PT09PT09PT09PT0gKi8NCi5jb250cm9scyB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGZsZXgtd3JhcDogd3JhcDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICBnYXA6IDEwcHggMjRweDsNCiAgbWFyZ2luLWJvdHRvbTogMThweDsNCn0NCi5sZWdlbmQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogNHB4IDZweDsgfQ0KLmxlZ2VuZCBidXR0b24sIC50b2dnbGUgYnV0dG9uIHsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGdhcDogOHB4Ow0KICBwYWRkaW5nOiA1cHggMTFweDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOw0KICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsNCn0NCi5sZWdlbmQgYnV0dG9uOmhvdmVyLCAudG9nZ2xlIGJ1dHRvbjpob3ZlciB7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgfQ0KLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl0geyBib3JkZXItY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0NCi5sZWdlbmQgLnN3IHsgd2lkdGg6IDEwcHg7IGhlaWdodDogMTBweDsgZmxleDogMCAwIDEwcHg7IH0NCi5sZWdlbmQgLnN3LnByaSB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQoubGVnZW5kIC5zdy5yZWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1pbmspOyB9DQoubGVnZW5kIC5zdy5vdGggeyBiYWNrZ3JvdW5kOiB2YXIoLS1mYWludCk7IH0NCi5sZWdlbmQuaXNvIGJ1dHRvbjpub3QoW2FyaWEtcHJlc3NlZD0idHJ1ZSJdKSB7IG9wYWNpdHk6IDAuNDU7IH0NCi5sZWdlbmQgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdOjphZnRlciB7IGNvbnRlbnQ6ICLCtyBjbGljayB0byBjbGVhciI7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCi50b2dnbGUgeyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDRweDsgfQ0KLnRvZ2dsZSAuayB7IG1hcmdpbi1yaWdodDogOHB4OyB9DQoudG9nZ2xlIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXSB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IGNvbG9yOiB2YXIoLS1iZyk7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBOb3RlcyAvIHNvdXJjZSA9PT09PT09PT09PT09PT09PSAqLw0KLm5vdGUgeyBtYXJnaW46IDE2cHggMCAwOyBmb250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCi5ub3RlIC5udW0geyBjb2xvcjogdmFyKC0taW5rKTsgfQ0KLnNvdXJjZSB7IG1hcmdpbi10b3A6IDMycHg7IHBhZGRpbmctdG9wOiAxNHB4OyBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnVsZS1zb2Z0KTsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS41NTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLnNvdXJjZSBwIHsgbWFyZ2luOiAwIDAgNHB4OyB9DQoNCi8qID09PT09PT09PT09PT09PT09IFRvb2x0aXAgPT09PT09PT09PT09PT09PT0gKi8NCi50aXAgew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHotaW5kZXg6IDI7DQogIG1heC13aWR0aDogMzAwcHg7DQogIHBhZGRpbmc6IDEwcHggMTJweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tdGlwLWJnKTsNCiAgY29sb3I6IHZhcigtLXRpcC1mZyk7DQogIGZvbnQtc2l6ZTogMTNweDsNCiAgbGluZS1oZWlnaHQ6IDEuNDsNCiAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogIG9wYWNpdHk6IDA7DQogIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xMnMgZWFzZTsNCn0NCi50aXAuc2hvdyB7IG9wYWNpdHk6IDE7IH0NCi50aXAgLnQgeyBmb250LXdlaWdodDogNTAwOyBtYXJnaW4tYm90dG9tOiA2cHg7IH0NCi50aXAgLnIgeyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGdhcDogMTZweDsgfQ0KLnRpcCAuciArIC5yIHsgbWFyZ2luLXRvcDogMnB4OyB9DQoudGlwIC5yLmhpIHsgZm9udC13ZWlnaHQ6IDcwMDsgfQ0KLnRpcCAuci5oaSA+IHNwYW46Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7IGNvbnRlbnQ6ICIiOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiA4cHg7IGhlaWdodDogOHB4OyBtYXJnaW4tcmlnaHQ6IDhweDsgdmVydGljYWwtYWxpZ246IDFweDsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi50aXAgLnIuaGkuYiA+IHNwYW46Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7IGJhY2tncm91bmQ6IHZhcigtLWJhZCk7IH0NCi50aXAgLnMgeyBtYXJnaW4tdG9wOiA4cHg7IHBhZGRpbmctdG9wOiA2cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tdGlwLWZnKSAyNSUsIHRyYW5zcGFyZW50KTsgZm9udC1zaXplOiAxMnB4OyBvcGFjaXR5OiAwLjg1OyB9DQoNCi8qID09PT09PT09PT09PT09PT09IE1vdGlvbiAoc2hhcmVkKSA9PT09PT09PT09PT09PT09PSAqLw0KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7DQogIC5oZWFkIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDhweCk7IHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLCB0cmFuc2Zvcm0gMC41cyBlYXNlOyB9DQogIC5oZWFkLmluIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9DQp9DQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgew0KICAqIHsgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OyB9DQp9DQpAbWVkaWEgKG1heC13aWR0aDogNTYwcHgpIHsNCiAgLmhlYWQgeyBtYXJnaW4tYm90dG9tOiAyMnB4OyB9DQogIC5zdWIgeyBmb250LXNpemU6IDE1cHg7IH0NCiAgLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl06OmFmdGVyIHsgY29udGVudDogIsK3IHRhcCB0byBjbGVhciI7IH0NCn0NCg0KLyogPT09PT09PT09PT09PT09PT0gSG9yaXpvbnRhbCBiYXJzID09PT09PT09PT09PT09PT09ICovDQouaGJhciB7IC0tbmFtZS13OiAyMjBweDsgLS1ndXR0ZXI6IDcycHg7IC0tZ2FwOiAxNnB4OyB9DQoucm93cyB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgfQ0KLmdyaWRsaW5lcywgLmF4aXMgew0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW5hbWUtdykgbWlubWF4KDAsIDFmcik7DQogIGdhcDogMCB2YXIoLS1nYXApOw0KfQ0KLmdyaWRsaW5lcyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgaW5zZXQ6IDA7IHBvaW50ZXItZXZlbnRzOiBub25lOyB9DQouZ2NlbGwsIC50aWNrcyB7IGdyaWQtY29sdW1uOiAyOyBwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1yaWdodDogdmFyKC0tZ3V0dGVyKTsgfQ0KLmdsIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGJvdHRvbTogMDsgbGVmdDogdmFyKC0tcCk7IHdpZHRoOiAxcHg7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUtc29mdCk7IH0NCi5nbDpmaXJzdC1jaGlsZCB7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUpOyB6LWluZGV4OiAxOyB9IC8qIGJhc2VsaW5lIHNpdHMgYWJvdmUgdGhlIGZpbGxzIHNvIGl0IHJlYWRzIGFzIG9uZSBsaW5lICovDQoucm93IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBkaXNwbGF5OiBncmlkOw0KICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLW5hbWUtdykgbWlubWF4KDAsIDFmcik7DQogIGdhcDogMCB2YXIoLS1nYXApOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBwYWRkaW5nOiA2cHggMDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7DQp9DQoucm93OmhvdmVyLCAucm93OmZvY3VzLXdpdGhpbiwgLnJvdy5ob3QgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ob3Zlcik7IH0NCi5yb3c6aG92ZXIgLm5hbWUsIC5yb3cuaG90IC5uYW1lIHsgY29sb3I6IHZhcigtLWluayk7IH0NCi5uYW1lIHsgdGV4dC1hbGlnbjogcmlnaHQ7IGZvbnQtc2l6ZTogMTQuNXB4OyBsaW5lLWhlaWdodDogMS4zOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsgfQ0KLnJvdy5wcmkgLm5hbWUsIC5yb3cucmVmIC5uYW1lIHsgY29sb3I6IHZhcigtLWluayk7IH0NCi5yb3cucHJpIC5uYW1lIHsgZm9udC13ZWlnaHQ6IDcwMDsgfQ0KLnJvdy5yZWYgLm5hbWUgeyBmb250LXdlaWdodDogNTAwOyB9DQoubmFtZSAuc3VibCB7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOiAycHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMXB4OyBsZXR0ZXItc3BhY2luZzogMC4wMmVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQouYXJlYSB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy1yaWdodDogdmFyKC0tZ3V0dGVyKTsgfQ0KLnRyYWNrIHsgcG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDIycHg7IH0NCi5maWxsIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgd2lkdGg6IHZhcigtLXcpOyBiYWNrZ3JvdW5kOiB2YXIoLS1mYWludCk7IHRyYW5zaXRpb246IHdpZHRoIDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IH0NCi5yb3cucHJpIC5maWxsIHsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi5yb3cucmVmIC5maWxsIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgfQ0KLnJvdy5wcmkgLmZpbGwucDk1IHsNCiAgbGVmdDogdmFyKC0tdzApOw0KICB3aWR0aDogY2FsYyh2YXIoLS13KSAtIHZhcigtLXcwKSk7DQogIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1nb29kKSAwIDNweCwgdHJhbnNwYXJlbnQgM3B4IDZweCk7DQp9DQoudmFsIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBsZWZ0OiBjYWxjKHZhcigtLXcpICsgOHB4KTsNCiAgdG9wOiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsNCiAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KICB0cmFuc2l0aW9uOiBsZWZ0IDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7DQp9DQoucm93LnByaSAudmFsLCAucm93LnJlZiAudmFsIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA3MDA7IH0NCi52YWwgLnNlcCB7IG1hcmdpbjogMCA2cHg7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IGZvbnQtd2VpZ2h0OiA0MDA7IH0NCi50aWNrcyB7IGhlaWdodDogMjBweDsgbWFyZ2luLXRvcDogNnB4OyB9DQoudGlja3Mgc3BhbiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogdmFyKC0tcCk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0NCi50aWNrcyBzcGFuOmZpcnN0LWNoaWxkIHsgdHJhbnNmb3JtOiBub25lOyB9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAucmV2ZWFsIC5maWxsIHsgdHJhbnNmb3JtOiBzY2FsZVgoMCk7IHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgY2VudGVyOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC41NXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksIHdpZHRoIDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zKTsgfQ0KICAucmV2ZWFsLmluIC5maWxsIHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLnZhbCB7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlLCBsZWZ0IDAuNXMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zICsgMjUwbXMpOyB9DQogIC5yZXZlYWwuaW4gLnZhbCB7IG9wYWNpdHk6IDE7IH0NCiAgLnJldmVhbCAucm93IHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC02cHgpOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMzVzIGVhc2UsIHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zKTsgfQ0KICAucmV2ZWFsLmluIC5yb3cgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0NCiAgLnJldmVhbC5pbi5zZXR0bGVkIC5maWxsLCAucmV2ZWFsLmluLnNldHRsZWQgLnZhbCwgLnJldmVhbC5pbi5zZXR0bGVkIC5yb3cgeyB0cmFuc2l0aW9uLWRlbGF5OiAwczsgfQ0KICAucmV2ZWFsLmluLnNldHRsZWQgLnJvdyB7IHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnMgZWFzZTsgfQ0KfQ0KDQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsgLmhiYXIgeyAtLW5hbWUtdzogMTcwcHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7IC5oYmFyIHsgLS1uYW1lLXc6IDE0MHB4OyAtLWdhcDogMTJweDsgfSAubmFtZSB7IGZvbnQtc2l6ZTogMTMuNXB4OyB9IC52YWwgeyBmb250LXNpemU6IDEycHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7DQogIC5oYmFyIHsgLS1uYW1lLXc6IDEwNHB4OyAtLWd1dHRlcjogNTZweDsgLS1nYXA6IDEwcHg7IH0NCiAgLnZhbCAucHJlIHsgZGlzcGxheTogbm9uZTsgfQ0KICAubmFtZSB7IGZvbnQtc2l6ZTogMTIuNXB4OyB9DQogIC5uYW1lIC5zdWJsIHsgZm9udC1zaXplOiAxMHB4OyB9DQogIC52YWwgeyBmb250LXNpemU6IDExcHg7IH0NCiAgLnZhbCAuc2VwIHsgbWFyZ2luOiAwIDRweDsgfQ0KICAudHJhY2sgeyBoZWlnaHQ6IDE4cHg7IH0NCiAgLnRpY2tzIHNwYW4geyBmb250LXNpemU6IDEwcHg7IH0NCiAgLnRpY2tzIHNwYW4uaGlkZS1zbSB7IGRpc3BsYXk6IG5vbmU7IH0NCn0NCi5oYmFyIHsgLS1ndXR0ZXI6IDY0cHg7IH0gQG1lZGlhIChtYXgtd2lkdGg6IDQ4MHB4KSB7IC5oYmFyIHsgLS1ndXR0ZXI6IDQ4cHg7IH0gfTwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgY2xhc3M9IndyYXAiIGlkPSJyb290Ij4NCiAgPGhlYWRlciBjbGFzcz0iaGVhZCI+DQogICAgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY2N1cmFjeTwvc3Bhbj4NCiAgICA8aDE+QXZlcmFnZSBhY2N1cmFjeSBvdmVyIDM2IGJlbmNobWFya3M8L2gxPg0KICAgIDxwIGNsYXNzPSJzdWIiPjxzcGFuIGNsYXNzPSJkaXIiPkhpZ2hlciBpcyBiZXR0ZXIuPC9zcGFuPiBNZWFuIHNjb3JlIGFjcm9zcyA8c3BhbiBjbGFzcz0ibnVtIj4xNDcsMTM3PC9zcGFuPiBxdWVzdGlvbnMuPC9wPg0KICA8L2hlYWRlcj4NCg0KICA8ZGl2IGNsYXNzPSJoYmFyIHJldmVhbCIgaWQ9ImNoYXJ0Ij4NCiAgICA8ZGl2IGNsYXNzPSJyb3dzIiBpZD0icm93cyI+DQogICAgICA8ZGl2IGNsYXNzPSJncmlkbGluZXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdjZWxsIiBpZD0iZ2NlbGwiPjwvZGl2PjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImF4aXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRpY2tzIiBpZD0idGlja3MiPjwvZGl2PjwvZGl2Pg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0ic291cmNlIj4NCiAgICA8cD4jbiA9IHBvc2l0aW9uIG9uIHRoZSBKZXZCZW5jaCBsZWFkZXJib2FyZCwgOCBPY3RvYmVyIDIwMjYuPC9wPg0KICAgIDxwPiogU3RyYW5kcy1EZWNpZGVyIDJCJ3Mgc2NvcmUgaXMgaXRzIGF2ZXJhZ2Ugb3ZlciBvbmx5IHRoZSAyMyBvZiAzNiBiZW5jaG1hcmtzIGl0IGNvdWxkIGFuc3dlci48L3A+DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9InRpcCIgaWQ9InRpcCIgcm9sZT0idG9vbHRpcCIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KKGZ1bmN0aW9uICgpIHsNCiAgdmFyIG1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknKS5tYXRjaGVzOw0KICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290Jyk7DQogIHZhciB0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGlwJyk7DQoNCiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIHRleHQpIHsNCiAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsNCiAgICBpZiAoY2xzKSBuLmNsYXNzTmFtZSA9IGNsczsNCiAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkICYmIHRleHQgIT09IG51bGwpIG4udGV4dENvbnRlbnQgPSB0ZXh0Ow0KICAgIHJldHVybiBuOw0KICB9DQogIGZ1bmN0aW9uIHNldFZhcihuLCBrLCB2KSB7IG4uc3R5bGUuc2V0UHJvcGVydHkoaywgdik7IH0NCiAgZnVuY3Rpb24gZm10TihuLCBkKSB7IHJldHVybiBuLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQgfSk7IH0NCg0KICAvLyAtLS0tIFRvb2x0aXAgKGhvdmVyLCBrZXlib2FyZCBmb2N1cyBhbmQgdGFwKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIGhvdCA9IG51bGw7DQogIGZ1bmN0aW9uIHJlbmRlclRpcChzcGVjKSB7DQogICAgdGlwLmlubmVySFRNTCA9ICcnOw0KICAgIGlmIChzcGVjLnRpdGxlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICd0Jywgc3BlYy50aXRsZSkpOw0KICAgIChzcGVjLnJvd3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHIpIHsNCiAgICAgIHZhciByb3cgPSBlbCgnZGl2JywgJ3InICsgKHJbMl0gPyAnICcgKyByWzJdIDogJycpKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsIG51bGwsIHJbMF0pKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdudW0nLCByWzFdKSk7DQogICAgICB0aXAuYXBwZW5kQ2hpbGQocm93KTsNCiAgICB9KTsNCiAgICBpZiAoc3BlYy5ub3RlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICdzJywgc3BlYy5ub3RlKSk7DQogIH0NCiAgZnVuY3Rpb24gcGxhY2VUaXAobm9kZSwgcHJlZmVyKSB7DQogICAgdmFyIHJyID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICB2YXIgbnIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgIHZhciB0dyA9IHRpcC5vZmZzZXRXaWR0aCwgdGggPSB0aXAub2Zmc2V0SGVpZ2h0Ow0KICAgIHZhciBsZWZ0ID0gbnIubGVmdCAtIHJyLmxlZnQgKyAocHJlZmVyID09PSAnYWJvdmUnID8gbnIud2lkdGggLyAyIC0gdHcgLyAyIDogMCk7DQogICAgbGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlZnQsIHJyLndpZHRoIC0gdHcpKTsNCiAgICB2YXIgYmVsb3cgPSBuci5ib3R0b20gLSByci50b3AgKyA2Ow0KICAgIHZhciBhYm92ZSA9IG5yLnRvcCAtIHJyLnRvcCAtIHRoIC0gKHByZWZlciA9PT0gJ2Fib3ZlJyA/IDI2IDogNik7DQogICAgdmFyIHRvcDsNCiAgICBpZiAocHJlZmVyID09PSAnYWJvdmUnKSB0b3AgPSBhYm92ZSA+PSAwID8gYWJvdmUgOiBNYXRoLm1pbihiZWxvdywgcnIuaGVpZ2h0IC0gdGgpOw0KICAgIGVsc2UgdG9wID0gKGJlbG93ICsgdGggPD0gcnIuaGVpZ2h0KSA/IGJlbG93IDogTWF0aC5tYXgoMCwgYWJvdmUpOw0KICAgIC8vIFN0YXkgaW5zaWRlIHRoZSB3aWRnZXQgc28gdGhlIGF1dG8tc2l6ZWQgZnJhbWUgbmV2ZXIgY2xpcHMgdGhlIHRpcC4NCiAgICB0aXAuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOw0KICAgIHRpcC5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCB0b3ApICsgJ3B4JzsNCiAgfQ0KICBmdW5jdGlvbiBzaG93VGlwKG5vZGUsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBpZiAoaG90ID09PSBub2RlKSByZXR1cm47DQogICAgaGlkZVRpcCgpOw0KICAgIGhvdCA9IG5vZGU7DQogICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdob3QnKTsNCiAgICByZW5kZXJUaXAoYnVpbGQobm9kZSkpOw0KICAgIHRpcC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7DQogICAgdGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsNCiAgICBwbGFjZVRpcChub2RlLCBwcmVmZXIpOw0KICB9DQogIGZ1bmN0aW9uIGhpZGVUaXAoKSB7DQogICAgaWYgKGhvdCkgaG90LmNsYXNzTGlzdC5yZW1vdmUoJ2hvdCcpOw0KICAgIGhvdCA9IG51bGw7DQogICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsNCiAgICB0aXAuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7DQogIH0NCiAgZnVuY3Rpb24gYmluZFRpcHMoc2VsZWN0b3IsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBmdW5jdGlvbiBmaW5kKHQpIHsNCiAgICAgIHZhciBuID0gdDsNCiAgICAgIHdoaWxlIChuICYmIG4gIT09IHJvb3QpIHsNCiAgICAgICAgaWYgKG4ubWF0Y2hlcyAmJiBuLm1hdGNoZXMoc2VsZWN0b3IpKSByZXR1cm4gbjsNCiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuKSBzaG93VGlwKG4sIGJ1aWxkLCBwcmVmZXIpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4gJiYgIW4uY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgaGlkZVRpcCgpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobikgc2hvd1RpcChuLCBidWlsZCwgcHJlZmVyKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuICYmICFuLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpIGhpZGVUaXAoKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgaGlkZVRpcCgpOyB9KTsNCiAgfQ0KDQogIC8vIC0tLS0gQ291bnQtdXAgKHZpc2liaWxpdHktdHJpZ2dlcmVkIHZpYSByZXZlYWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIEVBU0UgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCAzKTsgfTsNCiAgZnVuY3Rpb24gY291bnRVcChub2RlLCB0bywgZm10LCBtcywgZGVsYXkpIHsNCiAgICBpZiAoIW1vdGlvbikgeyBub2RlLnRleHRDb250ZW50ID0gZm10KHRvKTsgcmV0dXJuOyB9DQogICAgdmFyIHN0YXJ0ID0gbnVsbDsNCiAgICBub2RlLnRleHRDb250ZW50ID0gZm10KDApOw0KICAgIGZ1bmN0aW9uIGZyYW1lKG5vdykgew0KICAgICAgaWYgKHN0YXJ0ID09PSBudWxsKSBzdGFydCA9IG5vdyArIChkZWxheSB8fCAwKTsNCiAgICAgIHZhciB0ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKG5vdyAtIHN0YXJ0KSAvIG1zKSk7DQogICAgICBub2RlLnRleHRDb250ZW50ID0gZm10KHRvICogRUFTRSh0KSk7DQogICAgICBpZiAodCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogICAgfQ0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogIH0NCg0KICAvLyAtLS0tIFJldmVhbCAoSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgb25seTsgbm8gdGltZXJzIHN0YXJ0IGFueXRoaW5nKSAtLS0tLS0NCiAgLy8gYHNldHRsZWRgIHJlbW92ZXMgc3RhZ2dlciBkZWxheXMgb25jZSB0aGUgZW50cmFuY2UgaGFzIHBsYXllZCBzbyBob3ZlciwNCiAgLy8gdG9nZ2xlcyBhbmQgZmlsdGVycyByZXNwb25kIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuDQogIGZ1bmN0aW9uIHJldmVhbChncm91cCwgY291bnQsIGNiKSB7DQogICAgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnaW4nKTsNCiAgICBpZiAoY2IpIGNiKCk7DQogICAgaWYgKCFtb3Rpb24pIHsgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnc2V0dGxlZCcpOyByZXR1cm47IH0NCiAgICB2YXIgd2FpdCA9IE1hdGgubWluKGNvdW50LCAzMCkgKiA0NSArIDcwMDsNCiAgICB2YXIgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTsNCiAgICAoZnVuY3Rpb24gdGljayhub3cpIHsgaWYgKG5vdyAtIHQwID49IHdhaXQpIGdyb3VwLmNsYXNzTGlzdC5hZGQoJ3NldHRsZWQnKTsgZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7IH0pKHQwKTsNCiAgfQ0KICBmdW5jdGlvbiBvYnNlcnZlKGl0ZW1zKSB7IC8vIGl0ZW1zOiBbW25vZGUsIGZuXV0NCiAgICBpZiAoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHsNCiAgICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykgew0KICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICBpZiAoIWUuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsNCiAgICAgICAgICBpby51bm9ic2VydmUoZS50YXJnZXQpOw0KICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGlmIChpdFswXSA9PT0gZS50YXJnZXQpIGl0WzFdKCk7IH0pOw0KICAgICAgICB9KTsNCiAgICAgIH0sIHsgdGhyZXNob2xkOiAwLjA1IH0pOw0KICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaW8ub2JzZXJ2ZShpdFswXSk7IH0pOw0KICAgIH0gZWxzZSB7DQogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpdFsxXSgpOyB9KTsNCiAgICB9DQogIH0NCiAgdmFyIGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVhZCcpOw0KDQogIHZhciBEQVRBID0gew0KICAgIHByaW1hcnk6ICdNaWNyb3NvZnQtRGVjaXNpb24tMScsDQogICAgcm93czogWw0KICAgICAgLy8gbmFtZSwgc2NvcmUsIGtpbmQsIHN1YmxhYmVsLCBmb290bm90ZQ0KICAgICAgWydNaWNyb3NvZnQtRGVjaXNpb24tMScsIDgzLjUsICdwcmknLCAnJ10sDQogICAgICBbJ0pldiAxLjEzLjAnLCA4Mi4zLCAnJywgJyddLA0KICAgICAgWydRdXlldC0xLjAtTGFyZ2UnLCA4MS45LCAnJywgJyMxIG9uIEpldkJlbmNoJ10sDQogICAgICBbJ1N1cm9nYXRlIFJ1bmUgMjZCLUE0QicsIDc5LjcsICcnLCAnIzggb24gSmV2QmVuY2gnXSwNCiAgICAgIFsnR1BULTYgTHVuYSBEZWNpc2lvbnMnLCA3OS40LCAnJywgJyM3IG9uIEpldkJlbmNoJ10sDQogICAgICBbJ2RlY2stMzFCJywgNzcuOCwgJycsICcjMyBvbiBKZXZCZW5jaCddLA0KICAgICAgWydIMk8tTGlnaHRuaW5nLTRCJywgNzcuMiwgJycsICcjNSBvbiBKZXZCZW5jaCddLA0KICAgICAgWydTdHJhbmRzLURlY2lkZXIgMkInLCA1NC44LCAnJywgJ0FXUyDCtyAyMyBvZiAzNiBiZW5jaG1hcmtzKicsIHRydWVdDQogICAgXSwNCiAgICB0aWNrczogW1swLCAnMCUnXSwgWzI1LCAnMjUlJ10sIFs1MCwgJzUwJSddLCBbNzUsICc3NSUnXSwgWzEwMCwgJzEwMCUnXV0NCiAgfTsNCg0KICB2YXIgcm93cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dzJyk7DQogIHZhciBnY2VsbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnY2VsbCcpOw0KICB2YXIgdGlja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGlja3MnKTsNCiAgdmFyIGNvdW50ZXJzID0gW107DQogIGZ1bmN0aW9uIGYxKHYpIHsgcmV0dXJuIGZtdE4odiwgMSk7IH0NCg0KICBEQVRBLnJvd3MuZm9yRWFjaChmdW5jdGlvbiAociwgaSkgew0KICAgIHZhciByb3cgPSBlbCgnZGl2JywgJ3JvdycgKyAoclsyXSA/ICcgJyArIHJbMl0gOiAnJykpOw0KICAgIHJvdy50YWJJbmRleCA9IDA7DQogICAgc2V0VmFyKHJvdywgJy0taScsIFN0cmluZyhpKSk7DQogICAgcm93LmRhdGFzZXQuaSA9IFN0cmluZyhpKTsNCiAgICB2YXIgbmFtZSA9IGVsKCdkaXYnLCAnbmFtZScsIHJbMF0pOw0KICAgIGlmIChyWzNdKSBuYW1lLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ3N1YmwnLCByWzNdKSk7DQogICAgdmFyIGFyZWEgPSBlbCgnZGl2JywgJ2FyZWEnKTsNCiAgICB2YXIgdHJhY2sgPSBlbCgnZGl2JywgJ3RyYWNrJyk7DQogICAgdmFyIGZpbGwgPSBlbCgnc3BhbicsICdmaWxsJyk7DQogICAgc2V0VmFyKGZpbGwsICctLXcnLCByWzFdICsgJyUnKTsNCiAgICB0cmFjay5hcHBlbmRDaGlsZChmaWxsKTsNCiAgICB2YXIgdmFsID0gZWwoJ3NwYW4nLCAndmFsIG51bScpOw0KICAgIHNldFZhcih2YWwsICctLXcnLCByWzFdICsgJyUnKTsNCiAgICB2YXIgbiA9IGVsKCdzcGFuJywgbnVsbCwgZjEoclsxXSkpOw0KICAgIHZhbC5hcHBlbmRDaGlsZChuKTsNCiAgICBpZiAocls0XSkgdmFsLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgbnVsbCwgJyonKSk7DQogICAgY291bnRlcnMucHVzaChbbiwgclsxXV0pOw0KICAgIHRyYWNrLmFwcGVuZENoaWxkKHZhbCk7DQogICAgYXJlYS5hcHBlbmRDaGlsZCh0cmFjayk7DQogICAgcm93LmFwcGVuZENoaWxkKG5hbWUpOw0KICAgIHJvdy5hcHBlbmRDaGlsZChhcmVhKTsNCiAgICByb3cuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgclswXSArICc6ICcgKyBmMShyWzFdKSArICclIGF2ZXJhZ2UgYWNjdXJhY3knICsgKHJbM10gPyAnICgnICsgclszXSArICcpJyA6ICcnKSk7DQogICAgcm93cy5hcHBlbmRDaGlsZChyb3cpOw0KICB9KTsNCiAgREFUQS50aWNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7DQogICAgdmFyIGcgPSBlbCgnc3BhbicsICdnbCcpOyBzZXRWYXIoZywgJy0tcCcsIHRbMF0gKyAnJScpOyBnY2VsbC5hcHBlbmRDaGlsZChnKTsNCiAgICB2YXIgbCA9IGVsKCdzcGFuJywgbnVsbCwgdFsxXSk7IHNldFZhcihsLCAnLS1wJywgdFswXSArICclJyk7IHRpY2tzLmFwcGVuZENoaWxkKGwpOw0KICB9KTsNCg0KICBiaW5kVGlwcygnLnJvdycsIGZ1bmN0aW9uIChyb3cpIHsNCiAgICB2YXIgciA9IERBVEEucm93c1srcm93LmRhdGFzZXQuaV07DQogICAgdmFyIGJhc2UgPSBEQVRBLnJvd3NbMF1bMV07DQogICAgdmFyIGQgPSByWzFdIC0gYmFzZTsNCiAgICB2YXIgc3BlYyA9IHsgdGl0bGU6IHJbMF0sIHJvd3M6IFtbJ0F2ZXJhZ2UgYWNjdXJhY3knLCBmMShyWzFdKSArICclJywgclsyXSA9PT0gJ3ByaScgPyAnaGknIDogJyddXSB9Ow0KICAgIGlmIChyWzJdICE9PSAncHJpJykgc3BlYy5yb3dzLnB1c2goWyd2cyAnICsgREFUQS5wcmltYXJ5LCAoZCA+IDAgPyAnKycgOiAn4oiSJykgKyBmMShNYXRoLmFicyhkKSkgKyAnIHB0cyddKTsNCiAgICBpZiAoclszXSkgc3BlYy5yb3dzLnB1c2goW3JbNF0gPyAnQ292ZXJhZ2UnIDogJ0pldkJlbmNoIGxlYWRlcmJvYXJkJywgclszXS5yZXBsYWNlKCcqJywgJycpLnJlcGxhY2UoJyBvbiBKZXZCZW5jaCcsICcnKV0pOw0KICAgIHNwZWMubm90ZSA9IHJbNF0gPyAnQXZlcmFnZWQgb3ZlciBvbmx5IHRoZSAyMyBvZiAzNiBiZW5jaG1hcmtzIHRoaXMgbW9kZWwgY291bGQgYW5zd2VyLicNCiAgICAgIDogclsyXSA9PT0gJ3ByaScgPyAnTWVhbiBhY2N1cmFjeSBhY3Jvc3MgMzYgYmVuY2htYXJrcyBhbmQgMTQ3LDEzNyBxdWVzdGlvbnMuJw0KICAgICAgOiByWzNdID8gJ1NhbWUgMzYgYmVuY2htYXJrcywgMTQ3LDEzNyBxdWVzdGlvbnMuIExlYWRlcmJvYXJkIHBvc2l0aW9uIGFzIG9mIDggT2N0b2JlciAyMDI2LicNCiAgICAgIDogJ1NhbWUgMzYgYmVuY2htYXJrcywgMTQ3LDEzNyBxdWVzdGlvbnMuJzsNCiAgICByZXR1cm4gc3BlYzsNCiAgfSk7DQoNCiAgdmFyIGNoYXJ0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0Jyk7DQogIG9ic2VydmUoWw0KICAgIFtoZWFkLCBmdW5jdGlvbiAoKSB7IGhlYWQuY2xhc3NMaXN0LmFkZCgnaW4nKTsgfV0sDQogICAgW2NoYXJ0LCBmdW5jdGlvbiAoKSB7DQogICAgICByZXZlYWwoY2hhcnQsIERBVEEucm93cy5sZW5ndGgsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgY291bnRlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeyBjb3VudFVwKGNbMF0sIGNbMV0sIGYxLCA4MDAsIDApOyB9KTsNCiAgICAgIH0pOw0KICAgIH1dDQogIF0pOw0KDQp9KSgpOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQo=
3. Robustness
Equivalent inputs should produce equivalent decisions. In production, states and instructions get paraphrased, option descriptions change, choices are reordered, keys change, and harmless formatting noise appears. None of those changes should materially alter the decision.
We perturb the same request in eight ways and measure how often the decision flips. Microsoft-Decision-1 changes its decision on 1.3% of perturbations on average with zero flips when option descriptions are paraphrased or when options are reversed or shuffled.
4. Probability and confidence calibration
The probability itself is part of the API, not just a ranking score. Applications use confidence to decide when to act, defer, or ask for review, so a 90% prediction should be right about nine times out of 10 on representative cases.
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5DYWxpYnJhdGlvbiBzY29yZTwvdGl0bGU+DQo8c3R5bGU+DQpAZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtQm9vay5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1NZWRpdW0ub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo3MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtQm9sZC5vdGYiKSBmb3JtYXQoIm9wZW50eXBlIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IlBQIE5ldWUgTW9udHJlYWwiO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOml0YWxpYztmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9QUE5ldWVNb250cmVhbC1JdGFsaWMub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJDYXNjYWRpYSBDb2RlIjtmb250LXdlaWdodDoyMDAgNzAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL0Nhc2NhZGlhQ29kZS53b2ZmMiIpIGZvcm1hdCgid29mZjIiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiQ2FzY2FkaWEgQ29kZSI7Zm9udC13ZWlnaHQ6MjAwIDcwMDtmb250LXN0eWxlOml0YWxpYztmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9DYXNjYWRpYUNvZGVJdGFsaWMud29mZjIiKSBmb3JtYXQoIndvZmYyIik7fQ0KOnJvb3Qgew0KICAtLWJnOiAjZmZmOw0KICAtLWluazogIzAwMDsNCiAgLS1tdXRlZDogIzU1NTsNCiAgLS1mYWludDogI2M5YzljOTsgICAgICAgIC8qIHNlY29uZGFyeSBzZXJpZXMgKi8NCiAgLS1nb29kOiAjRTNGNjcxOyAgICAgICAgIC8qIHByaW1hcnkgbW9kZWwgKHNpdGUgYWNjZW50IGxpbWUpICovDQogIC0tYmFkOiAjRkZBMDM3OyAgICAgICAgICAvKiBwcmltYXJ5IG1vZGVsIGJlaGluZCAoc2l0ZSBhY2NlbnQgb3JhbmdlKSAqLw0KICAtLXJ1bGU6ICMwMDA7DQogIC0tcnVsZS1zb2Z0OiAjZTZlNmU2Ow0KICAtLWhvdmVyOiAjZjNmM2YzOw0KICAtLWJhZGdlLWJnOiAjMDAwOw0KICAtLWJhZGdlLWZnOiAjZmZmOw0KICAtLXRpcC1iZzogIzAwMDsNCiAgLS10aXAtZmc6ICNmZmY7DQogIC0tc2FuczogIlBQIE5ldWUgTW9udHJlYWwiLCBzYW5zLXNlcmlmOw0KICAtLW1vbm86ICJDYXNjYWRpYSBDb2RlIiwgdWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsICJMaWJlcmF0aW9uIE1vbm8iLCBtb25vc3BhY2U7DQp9DQpodG1sW2RhdGEtdGhlbWU9ImRhcmsiXSB7DQogIC0tYmc6ICMxMTE7DQogIC0taW5rOiAjZmZmOw0KICAtLW11dGVkOiAjOTk5Ow0KICAtLWZhaW50OiAjNDQ0Ow0KICAtLXJ1bGU6ICNmZmY7DQogIC0tcnVsZS1zb2Z0OiAjMmEyYTJhOw0KICAtLWhvdmVyOiAjMWYxZjFmOw0KICAtLWJhZGdlLWJnOiAjZmZmOw0KICAtLWJhZGdlLWZnOiAjMTExOw0KICAtLXRpcC1iZzogI2ZmZjsNCiAgLS10aXAtZmc6ICMxMTE7DQp9DQoNCiogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9DQpib2R5IHsNCiAgbWFyZ2luOiAwOw0KICBiYWNrZ3JvdW5kOiB2YXIoLS1iZyk7DQogIGNvbG9yOiB2YXIoLS1pbmspOw0KICBmb250LWZhbWlseTogdmFyKC0tc2Fucyk7DQogIGZvbnQtc2l6ZTogMTVweDsNCiAgbGluZS1oZWlnaHQ6IDEuNDU7DQogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KfQ0KLndyYXAgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmc6IDJweCAwIDZweDsgfQ0KLm51bSB7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsgfQ0KLmsgew0KICBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7DQogIGZvbnQtc2l6ZTogMTFweDsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsNCiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgY29sb3I6IHZhcigtLW11dGVkKTsNCn0NCmJ1dHRvbiB7IGZvbnQ6IGluaGVyaXQ7IGNvbG9yOiBpbmhlcml0OyBiYWNrZ3JvdW5kOiBub25lOyBib3JkZXI6IDA7IHBhZGRpbmc6IDA7IGN1cnNvcjogcG9pbnRlcjsgfQ0KYnV0dG9uOmZvY3VzLXZpc2libGUsIFt0YWJpbmRleF06Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1pbmspOyBvdXRsaW5lLW9mZnNldDogMnB4OyB9DQoNCi8qID09PT09PT09PT09PT09PT09IEhlYWRlciA9PT09PT09PT09PT09PT09PSAqLw0KLmhlYWQgeyBtYXJnaW4tYm90dG9tOiAyOHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0NCi5iYWRnZSB7DQogIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgcGFkZGluZzogNHB4IDhweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtYmcpOw0KICBjb2xvcjogdmFyKC0tYmFkZ2UtZmcpOw0KICBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7DQogIGZvbnQtc2l6ZTogMTBweDsNCiAgbGluZS1oZWlnaHQ6IDE7DQogIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQp9DQpoMSB7DQogIG1hcmdpbjogMThweCAwIDhweDsNCiAgZm9udC1zaXplOiBjbGFtcCgyNHB4LCA0LjJ2dywgMzJweCk7DQogIGZvbnQtd2VpZ2h0OiA1MDA7DQogIGxldHRlci1zcGFjaW5nOiAtMC4wMTVlbTsNCiAgbGluZS1oZWlnaHQ6IDEuMTI7DQp9DQouc3ViIHsgbWFyZ2luOiAwIGF1dG87IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuNTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWF4LXdpZHRoOiA2MmNoOyB9DQouc3ViIC5kaXIgeyBjb2xvcjogdmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBMZWdlbmQgLyB0b2dnbGVzID09PT09PT09PT09PT09PT09ICovDQouY29udHJvbHMgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LXdyYXA6IHdyYXA7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgZ2FwOiAxMHB4IDI0cHg7DQogIG1hcmdpbi1ib3R0b206IDE4cHg7DQp9DQoubGVnZW5kIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDRweCA2cHg7IH0NCi5sZWdlbmQgYnV0dG9uLCAudG9nZ2xlIGJ1dHRvbiB7DQogIGRpc3BsYXk6IGlubGluZS1mbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBnYXA6IDhweDsNCiAgcGFkZGluZzogNXB4IDExcHg7DQogIGZvbnQtc2l6ZTogMTNweDsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnVsZS1zb2Z0KTsNCiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2U7DQp9DQoubGVnZW5kIGJ1dHRvbjpob3ZlciwgLnRvZ2dsZSBidXR0b246aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWluayk7IH0NCi5sZWdlbmQgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNTAwOyB9DQoubGVnZW5kIC5zdyB7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGZsZXg6IDAgMCAxMHB4OyB9DQoubGVnZW5kIC5zdy5wcmkgeyBiYWNrZ3JvdW5kOiB2YXIoLS1nb29kKTsgfQ0KLmxlZ2VuZCAuc3cucmVmIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgfQ0KLmxlZ2VuZCAuc3cub3RoIHsgYmFja2dyb3VuZDogdmFyKC0tZmFpbnQpOyB9DQoubGVnZW5kLmlzbyBidXR0b246bm90KFthcmlhLXByZXNzZWQ9InRydWUiXSkgeyBvcGFjaXR5OiAwLjQ1OyB9DQoubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXTo6YWZ0ZXIgeyBjb250ZW50OiAiwrcgY2xpY2sgdG8gY2xlYXIiOyBmb250LXdlaWdodDogNDAwOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQoudG9nZ2xlIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7IH0NCi50b2dnbGUgLmsgeyBtYXJnaW4tcmlnaHQ6IDhweDsgfQ0KLnRvZ2dsZSBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl0geyBiYWNrZ3JvdW5kOiB2YXIoLS1pbmspOyBjb2xvcjogdmFyKC0tYmcpOyBib3JkZXItY29sb3I6IHZhcigtLWluayk7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTm90ZXMgLyBzb3VyY2UgPT09PT09PT09PT09PT09PT0gKi8NCi5ub3RlIHsgbWFyZ2luOiAxNnB4IDAgMDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS41OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQoubm90ZSAubnVtIHsgY29sb3I6IHZhcigtLWluayk7IH0NCi5zb3VyY2UgeyBtYXJnaW4tdG9wOiAzMnB4OyBwYWRkaW5nLXRvcDogMTRweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJ1bGUtc29mdCk7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuNTU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IH0NCi5zb3VyY2UgcCB7IG1hcmdpbjogMCAwIDRweDsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBUb29sdGlwID09PT09PT09PT09PT09PT09ICovDQoudGlwIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB6LWluZGV4OiAyOw0KICBtYXgtd2lkdGg6IDMwMHB4Ow0KICBwYWRkaW5nOiAxMHB4IDEycHg7DQogIGJhY2tncm91bmQ6IHZhcigtLXRpcC1iZyk7DQogIGNvbG9yOiB2YXIoLS10aXAtZmcpOw0KICBmb250LXNpemU6IDEzcHg7DQogIGxpbmUtaGVpZ2h0OiAxLjQ7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KICBvcGFjaXR5OiAwOw0KICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTJzIGVhc2U7DQp9DQoudGlwLnNob3cgeyBvcGFjaXR5OiAxOyB9DQoudGlwIC50IHsgZm9udC13ZWlnaHQ6IDUwMDsgbWFyZ2luLWJvdHRvbTogNnB4OyB9DQoudGlwIC5yIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBnYXA6IDE2cHg7IH0NCi50aXAgLnIgKyAuciB7IG1hcmdpbi10b3A6IDJweDsgfQ0KLnRpcCAuci5oaSB7IGZvbnQtd2VpZ2h0OiA3MDA7IH0NCi50aXAgLnIuaGkgPiBzcGFuOmZpcnN0LWNoaWxkOjpiZWZvcmUgeyBjb250ZW50OiAiIjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB3aWR0aDogOHB4OyBoZWlnaHQ6IDhweDsgbWFyZ2luLXJpZ2h0OiA4cHg7IHZlcnRpY2FsLWFsaWduOiAxcHg7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQoudGlwIC5yLmhpLmIgPiBzcGFuOmZpcnN0LWNoaWxkOjpiZWZvcmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1iYWQpOyB9DQoudGlwIC5zIHsgbWFyZ2luLXRvcDogOHB4OyBwYWRkaW5nLXRvcDogNnB4OyBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXRpcC1mZykgMjUlLCB0cmFuc3BhcmVudCk7IGZvbnQtc2l6ZTogMTJweDsgb3BhY2l0eTogMC44NTsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBNb3Rpb24gKHNoYXJlZCkgPT09PT09PT09PT09PT09PT0gKi8NCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAuaGVhZCB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZSwgdHJhbnNmb3JtIDAuNXMgZWFzZTsgfQ0KICAuaGVhZC5pbiB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogbm9uZTsgfQ0KfQ0KQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsNCiAgKiB7IHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsgfQ0KfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7DQogIC5oZWFkIHsgbWFyZ2luLWJvdHRvbTogMjJweDsgfQ0KICAuc3ViIHsgZm9udC1zaXplOiAxNXB4OyB9DQogIC5sZWdlbmQgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdOjphZnRlciB7IGNvbnRlbnQ6ICLCtyB0YXAgdG8gY2xlYXIiOyB9DQp9DQoNCi8qID09PT09PT09PT09PT09PT09IEhvcml6b250YWwgYmFycyA9PT09PT09PT09PT09PT09PSAqLw0KLmhiYXIgeyAtLW5hbWUtdzogMjIwcHg7IC0tZ3V0dGVyOiA3MnB4OyAtLWdhcDogMTZweDsgfQ0KLnJvd3MgeyBwb3NpdGlvbjogcmVsYXRpdmU7IH0NCi5ncmlkbGluZXMsIC5heGlzIHsNCiAgZGlzcGxheTogZ3JpZDsNCiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1uYW1lLXcpIG1pbm1heCgwLCAxZnIpOw0KICBnYXA6IDAgdmFyKC0tZ2FwKTsNCn0NCi5ncmlkbGluZXMgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgfQ0KLmdjZWxsLCAudGlja3MgeyBncmlkLWNvbHVtbjogMjsgcG9zaXRpb246IHJlbGF0aXZlOyBtYXJnaW4tcmlnaHQ6IHZhcigtLWd1dHRlcik7IH0NCi5nbCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBib3R0b206IDA7IGxlZnQ6IHZhcigtLXApOyB3aWR0aDogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlLXNvZnQpOyB9DQouZ2w6Zmlyc3QtY2hpbGQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlKTsgei1pbmRleDogMTsgfSAvKiBiYXNlbGluZSBzaXRzIGFib3ZlIHRoZSBmaWxscyBzbyBpdCByZWFkcyBhcyBvbmUgbGluZSAqLw0KLnJvdyB7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgZGlzcGxheTogZ3JpZDsNCiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS1uYW1lLXcpIG1pbm1heCgwLCAxZnIpOw0KICBnYXA6IDAgdmFyKC0tZ2FwKTsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgcGFkZGluZzogNnB4IDA7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEycyBlYXNlOw0KfQ0KLnJvdzpob3ZlciwgLnJvdzpmb2N1cy13aXRoaW4sIC5yb3cuaG90IHsgYmFja2dyb3VuZDogdmFyKC0taG92ZXIpOyB9DQoucm93OmhvdmVyIC5uYW1lLCAucm93LmhvdCAubmFtZSB7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQoubmFtZSB7IHRleHQtYWxpZ246IHJpZ2h0OyBmb250LXNpemU6IDE0LjVweDsgbGluZS1oZWlnaHQ6IDEuMzsgY29sb3I6IHZhcigtLW11dGVkKTsgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7IH0NCi5yb3cucHJpIC5uYW1lLCAucm93LnJlZiAubmFtZSB7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQoucm93LnByaSAubmFtZSB7IGZvbnQtd2VpZ2h0OiA3MDA7IH0NCi5yb3cucmVmIC5uYW1lIHsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KLm5hbWUgLnN1YmwgeyBkaXNwbGF5OiBibG9jazsgbWFyZ2luLXRvcDogMnB4OyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTFweDsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLmFyZWEgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctcmlnaHQ6IHZhcigtLWd1dHRlcik7IH0NCi50cmFjayB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgaGVpZ2h0OiAyMnB4OyB9DQouZmlsbCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiB2YXIoLS13KTsgYmFja2dyb3VuZDogdmFyKC0tZmFpbnQpOyB0cmFuc2l0aW9uOiB3aWR0aCAwLjVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpOyB9DQoucm93LnByaSAuZmlsbCB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQoucm93LnJlZiAuZmlsbCB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5yb3cucHJpIC5maWxsLnA5NSB7DQogIGxlZnQ6IHZhcigtLXcwKTsNCiAgd2lkdGg6IGNhbGModmFyKC0tdykgLSB2YXIoLS13MCkpOw0KICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tZ29vZCkgMCAzcHgsIHRyYW5zcGFyZW50IDNweCA2cHgpOw0KfQ0KLnZhbCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgbGVmdDogY2FsYyh2YXIoLS13KSArIDhweCk7DQogIHRvcDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIGZvbnQtc2l6ZTogMTNweDsNCiAgY29sb3I6IHZhcigtLW11dGVkKTsNCiAgdHJhbnNpdGlvbjogbGVmdCAwLjVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpOw0KfQ0KLnJvdy5wcmkgLnZhbCwgLnJvdy5yZWYgLnZhbCB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNzAwOyB9DQoudmFsIC5zZXAgeyBtYXJnaW46IDAgNnB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyBmb250LXdlaWdodDogNDAwOyB9DQoudGlja3MgeyBoZWlnaHQ6IDIwcHg7IG1hcmdpbi10b3A6IDZweDsgfQ0KLnRpY2tzIHNwYW4geyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IHZhcigtLXApOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMXB4OyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9DQoudGlja3Mgc3BhbjpmaXJzdC1jaGlsZCB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsNCiAgLnJldmVhbCAuZmlsbCB7IHRyYW5zZm9ybTogc2NhbGVYKDApOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNTVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpLCB3aWR0aCAwLjVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDVtcyk7IH0NCiAgLnJldmVhbC5pbiAuZmlsbCB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KICAucmV2ZWFsIC52YWwgeyBvcGFjaXR5OiAwOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNHMgZWFzZSwgbGVmdCAwLjVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDVtcyArIDI1MG1zKTsgfQ0KICAucmV2ZWFsLmluIC52YWwgeyBvcGFjaXR5OiAxOyB9DQogIC5yZXZlYWwgLnJvdyB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNnB4KTsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjM1cyBlYXNlLCB0cmFuc2Zvcm0gMC4zNXMgZWFzZSwgYmFja2dyb3VuZCAwLjEycyBlYXNlOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDVtcyk7IH0NCiAgLnJldmVhbC5pbiAucm93IHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwuaW4uc2V0dGxlZCAuZmlsbCwgLnJldmVhbC5pbi5zZXR0bGVkIC52YWwsIC5yZXZlYWwuaW4uc2V0dGxlZCAucm93IHsgdHJhbnNpdGlvbi1kZWxheTogMHM7IH0NCiAgLnJldmVhbC5pbi5zZXR0bGVkIC5yb3cgeyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7IH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7IC5oYmFyIHsgLS1uYW1lLXc6IDE3MHB4OyB9IH0NCkBtZWRpYSAobWF4LXdpZHRoOiA3MDBweCkgeyAuaGJhciB7IC0tbmFtZS13OiAxNDBweDsgLS1nYXA6IDEycHg7IH0gLm5hbWUgeyBmb250LXNpemU6IDEzLjVweDsgfSAudmFsIHsgZm9udC1zaXplOiAxMnB4OyB9IH0NCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgew0KICAuaGJhciB7IC0tbmFtZS13OiAxMDRweDsgLS1ndXR0ZXI6IDU2cHg7IC0tZ2FwOiAxMHB4OyB9DQogIC52YWwgLnByZSB7IGRpc3BsYXk6IG5vbmU7IH0NCiAgLm5hbWUgeyBmb250LXNpemU6IDEyLjVweDsgfQ0KICAubmFtZSAuc3VibCB7IGZvbnQtc2l6ZTogMTBweDsgfQ0KICAudmFsIHsgZm9udC1zaXplOiAxMXB4OyB9DQogIC52YWwgLnNlcCB7IG1hcmdpbjogMCA0cHg7IH0NCiAgLnRyYWNrIHsgaGVpZ2h0OiAxOHB4OyB9DQogIC50aWNrcyBzcGFuIHsgZm9udC1zaXplOiAxMHB4OyB9DQogIC50aWNrcyBzcGFuLmhpZGUtc20geyBkaXNwbGF5OiBub25lOyB9DQp9DQoNCi5oYmFyIHsgLS1ndXR0ZXI6IDY0cHg7IH0NCi5uYW1lIC5yayB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWluLXdpZHRoOiAxLjZlbTsgbWFyZ2luLXJpZ2h0OiA4cHg7IGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LWFsaWduOiByaWdodDsgfQ0KLnRyYWNrIHsgaGVpZ2h0OiAyNHB4OyB9DQouc3RlbSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiA1MCU7IHdpZHRoOiB2YXIoLS13KTsgaGVpZ2h0OiAycHg7IG1hcmdpbi10b3A6IC0xcHg7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUtc29mdCk7IH0NCi5kb3QgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IHZhcigtLXcpOyB0b3A6IDUwJTsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgbWFyZ2luOiAtN3B4IDAgMCAtN3B4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsgfQ0KLnJvdy5wcmkgLmRvdCB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0taW5rKTsgfQ0KLnJvdy5wcmkgLnN0ZW0geyBiYWNrZ3JvdW5kOiB2YXIoLS1nb29kKTsgfQ0KLnZhbCB7IGxlZnQ6IGNhbGModmFyKC0tdykgKyAxNHB4KTsgfQ0KLmdsLnBlcmZlY3QgeyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlKTsgfQ0KLnRpY2tzIHNwYW4ucGVyZmVjdCB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNzAwOyB9DQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsNCiAgLnJldmVhbCAuc3RlbSB7IHRyYW5zZm9ybTogc2NhbGVYKDApOyB0cmFuc2Zvcm0tb3JpZ2luOiBsZWZ0IGNlbnRlcjsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNTVzIGN1YmljLWJlemllcigwLjIxNSwgMC42MSwgMC4zNTUsIDEpOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDVtcyk7IH0NCiAgLnJldmVhbC5pbiAuc3RlbSB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KICAucmV2ZWFsIC5kb3QgeyB0cmFuc2Zvcm06IHNjYWxlKDApOyB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zNXMgY3ViaWMtYmV6aWVyKDAuMiwgMC44LCAwLjIsIDEuMyk7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0NW1zICsgMzgwbXMpOyB9DQogIC5yZXZlYWwuaW4gLmRvdCB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KICAucmV2ZWFsLmluLnNldHRsZWQgLnN0ZW0sIC5yZXZlYWwuaW4uc2V0dGxlZCAuZG90IHsgdHJhbnNpdGlvbi1kZWxheTogMHM7IH0NCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgeyAuaGJhciB7IC0tZ3V0dGVyOiA0OHB4OyAtLW5hbWUtdzogMTE4cHg7IH0gLm5hbWUgLnJrIHsgbWluLXdpZHRoOiAxLjJlbTsgbWFyZ2luLXJpZ2h0OiA1cHg7IGZvbnQtc2l6ZTogMTFweDsgfSB9DQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJ3cmFwIiBpZD0icm9vdCI+DQogIDxoZWFkZXIgY2xhc3M9ImhlYWQiPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZSI+Q2FsaWJyYXRpb248L3NwYW4+DQogICAgPGgxPkNhbGlicmF0aW9uIHNjb3JlIG92ZXIgMzYgYmVuY2htYXJrczwvaDE+DQogICAgPHAgY2xhc3M9InN1YiI+PHNwYW4gY2xhc3M9ImRpciI+SGlnaGVyIGlzIGJldHRlci48L3NwYW4+IDEwMCBtZWFucyBhIG1vZGVs4oCZcyBjb25maWRlbmNlIGV4YWN0bHkgbWF0Y2hlcyBob3cgb2Z0ZW4gaXQgaXMgcmlnaHQuPC9wPg0KICA8L2hlYWRlcj4NCg0KICA8ZGl2IGNsYXNzPSJoYmFyIHJldmVhbCIgaWQ9ImNoYXJ0Ij4NCiAgICA8ZGl2IGNsYXNzPSJyb3dzIiBpZD0icm93cyI+DQogICAgICA8ZGl2IGNsYXNzPSJncmlkbGluZXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImdjZWxsIiBpZD0iZ2NlbGwiPjwvZGl2PjwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImF4aXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48ZGl2PjwvZGl2PjxkaXYgY2xhc3M9InRpY2tzIiBpZD0idGlja3MiPjwvZGl2PjwvZGl2Pg0KICA8L2Rpdj4NCiAgPHAgY2xhc3M9Im5vdGUiPk1pY3Jvc29mdC1EZWNpc2lvbi0xIHJhbmtzIHRoaXJkLCA8c3BhbiBjbGFzcz0ibnVtIj4xLjU8L3NwYW4+IGJlaGluZCBKZXYgMS4xMy4wIGFuZCA8c3BhbiBjbGFzcz0ibnVtIj4wLjk8L3NwYW4+IGJlaGluZCBRdXlldC0xLjAtTGFyZ2UsIGFoZWFkIG9mIHRoZSBvdGhlciBmb3VyIG1vZGVscyBzY29yZWQuIFRoZSBheGlzIHN0YXJ0cyBhdCA4MDogZXZlcnkgbW9kZWwgaGVyZSBpcyB3aXRoaW4gMTcgcG9pbnRzIG9mIHBlcmZlY3QuPC9wPg0KICA8ZGl2IGNsYXNzPSJzb3VyY2UiPg0KICAgIDxwPlNhbWUgMzYgYmVuY2htYXJrcyBhcyB0aGUgYWNjdXJhY3kgcmFua2luZy48L3A+DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9InRpcCIgaWQ9InRpcCIgcm9sZT0idG9vbHRpcCIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KKGZ1bmN0aW9uICgpIHsNCiAgdmFyIG1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknKS5tYXRjaGVzOw0KICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290Jyk7DQogIHZhciB0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGlwJyk7DQoNCiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIHRleHQpIHsNCiAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsNCiAgICBpZiAoY2xzKSBuLmNsYXNzTmFtZSA9IGNsczsNCiAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkICYmIHRleHQgIT09IG51bGwpIG4udGV4dENvbnRlbnQgPSB0ZXh0Ow0KICAgIHJldHVybiBuOw0KICB9DQogIGZ1bmN0aW9uIHNldFZhcihuLCBrLCB2KSB7IG4uc3R5bGUuc2V0UHJvcGVydHkoaywgdik7IH0NCiAgZnVuY3Rpb24gZm10TihuLCBkKSB7IHJldHVybiBuLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQgfSk7IH0NCg0KICAvLyAtLS0tIFRvb2x0aXAgKGhvdmVyLCBrZXlib2FyZCBmb2N1cyBhbmQgdGFwKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIGhvdCA9IG51bGw7DQogIGZ1bmN0aW9uIHJlbmRlclRpcChzcGVjKSB7DQogICAgdGlwLmlubmVySFRNTCA9ICcnOw0KICAgIGlmIChzcGVjLnRpdGxlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICd0Jywgc3BlYy50aXRsZSkpOw0KICAgIChzcGVjLnJvd3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHIpIHsNCiAgICAgIHZhciByb3cgPSBlbCgnZGl2JywgJ3InICsgKHJbMl0gPyAnICcgKyByWzJdIDogJycpKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsIG51bGwsIHJbMF0pKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdudW0nLCByWzFdKSk7DQogICAgICB0aXAuYXBwZW5kQ2hpbGQocm93KTsNCiAgICB9KTsNCiAgICBpZiAoc3BlYy5ub3RlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICdzJywgc3BlYy5ub3RlKSk7DQogIH0NCiAgZnVuY3Rpb24gcGxhY2VUaXAobm9kZSwgcHJlZmVyKSB7DQogICAgdmFyIHJyID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICB2YXIgbnIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgIHZhciB0dyA9IHRpcC5vZmZzZXRXaWR0aCwgdGggPSB0aXAub2Zmc2V0SGVpZ2h0Ow0KICAgIHZhciBsZWZ0ID0gbnIubGVmdCAtIHJyLmxlZnQgKyAocHJlZmVyID09PSAnYWJvdmUnID8gbnIud2lkdGggLyAyIC0gdHcgLyAyIDogMCk7DQogICAgbGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlZnQsIHJyLndpZHRoIC0gdHcpKTsNCiAgICB2YXIgYmVsb3cgPSBuci5ib3R0b20gLSByci50b3AgKyA2Ow0KICAgIHZhciBhYm92ZSA9IG5yLnRvcCAtIHJyLnRvcCAtIHRoIC0gKHByZWZlciA9PT0gJ2Fib3ZlJyA/IDI2IDogNik7DQogICAgdmFyIHRvcDsNCiAgICBpZiAocHJlZmVyID09PSAnYWJvdmUnKSB0b3AgPSBhYm92ZSA+PSAwID8gYWJvdmUgOiBNYXRoLm1pbihiZWxvdywgcnIuaGVpZ2h0IC0gdGgpOw0KICAgIGVsc2UgdG9wID0gKGJlbG93ICsgdGggPD0gcnIuaGVpZ2h0KSA/IGJlbG93IDogTWF0aC5tYXgoMCwgYWJvdmUpOw0KICAgIC8vIFN0YXkgaW5zaWRlIHRoZSB3aWRnZXQgc28gdGhlIGF1dG8tc2l6ZWQgZnJhbWUgbmV2ZXIgY2xpcHMgdGhlIHRpcC4NCiAgICB0aXAuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOw0KICAgIHRpcC5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCB0b3ApICsgJ3B4JzsNCiAgfQ0KICBmdW5jdGlvbiBzaG93VGlwKG5vZGUsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBpZiAoaG90ID09PSBub2RlKSByZXR1cm47DQogICAgaGlkZVRpcCgpOw0KICAgIGhvdCA9IG5vZGU7DQogICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdob3QnKTsNCiAgICByZW5kZXJUaXAoYnVpbGQobm9kZSkpOw0KICAgIHRpcC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7DQogICAgdGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsNCiAgICBwbGFjZVRpcChub2RlLCBwcmVmZXIpOw0KICB9DQogIGZ1bmN0aW9uIGhpZGVUaXAoKSB7DQogICAgaWYgKGhvdCkgaG90LmNsYXNzTGlzdC5yZW1vdmUoJ2hvdCcpOw0KICAgIGhvdCA9IG51bGw7DQogICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsNCiAgICB0aXAuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7DQogIH0NCiAgZnVuY3Rpb24gYmluZFRpcHMoc2VsZWN0b3IsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBmdW5jdGlvbiBmaW5kKHQpIHsNCiAgICAgIHZhciBuID0gdDsNCiAgICAgIHdoaWxlIChuICYmIG4gIT09IHJvb3QpIHsNCiAgICAgICAgaWYgKG4ubWF0Y2hlcyAmJiBuLm1hdGNoZXMoc2VsZWN0b3IpKSByZXR1cm4gbjsNCiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuKSBzaG93VGlwKG4sIGJ1aWxkLCBwcmVmZXIpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4gJiYgIW4uY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgaGlkZVRpcCgpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobikgc2hvd1RpcChuLCBidWlsZCwgcHJlZmVyKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuICYmICFuLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpIGhpZGVUaXAoKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgaGlkZVRpcCgpOyB9KTsNCiAgfQ0KDQogIC8vIC0tLS0gQ291bnQtdXAgKHZpc2liaWxpdHktdHJpZ2dlcmVkIHZpYSByZXZlYWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIEVBU0UgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCAzKTsgfTsNCiAgZnVuY3Rpb24gY291bnRVcChub2RlLCB0bywgZm10LCBtcywgZGVsYXkpIHsNCiAgICBpZiAoIW1vdGlvbikgeyBub2RlLnRleHRDb250ZW50ID0gZm10KHRvKTsgcmV0dXJuOyB9DQogICAgdmFyIHN0YXJ0ID0gbnVsbDsNCiAgICBub2RlLnRleHRDb250ZW50ID0gZm10KDApOw0KICAgIGZ1bmN0aW9uIGZyYW1lKG5vdykgew0KICAgICAgaWYgKHN0YXJ0ID09PSBudWxsKSBzdGFydCA9IG5vdyArIChkZWxheSB8fCAwKTsNCiAgICAgIHZhciB0ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKG5vdyAtIHN0YXJ0KSAvIG1zKSk7DQogICAgICBub2RlLnRleHRDb250ZW50ID0gZm10KHRvICogRUFTRSh0KSk7DQogICAgICBpZiAodCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogICAgfQ0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogIH0NCg0KICAvLyAtLS0tIFJldmVhbCAoSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgb25seTsgbm8gdGltZXJzIHN0YXJ0IGFueXRoaW5nKSAtLS0tLS0NCiAgLy8gYHNldHRsZWRgIHJlbW92ZXMgc3RhZ2dlciBkZWxheXMgb25jZSB0aGUgZW50cmFuY2UgaGFzIHBsYXllZCBzbyBob3ZlciwNCiAgLy8gdG9nZ2xlcyBhbmQgZmlsdGVycyByZXNwb25kIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuDQogIGZ1bmN0aW9uIHJldmVhbChncm91cCwgY291bnQsIGNiKSB7DQogICAgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnaW4nKTsNCiAgICBpZiAoY2IpIGNiKCk7DQogICAgaWYgKCFtb3Rpb24pIHsgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnc2V0dGxlZCcpOyByZXR1cm47IH0NCiAgICB2YXIgd2FpdCA9IE1hdGgubWluKGNvdW50LCAzMCkgKiA0NSArIDcwMDsNCiAgICB2YXIgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTsNCiAgICAoZnVuY3Rpb24gdGljayhub3cpIHsgaWYgKG5vdyAtIHQwID49IHdhaXQpIGdyb3VwLmNsYXNzTGlzdC5hZGQoJ3NldHRsZWQnKTsgZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7IH0pKHQwKTsNCiAgfQ0KICBmdW5jdGlvbiBvYnNlcnZlKGl0ZW1zKSB7IC8vIGl0ZW1zOiBbW25vZGUsIGZuXV0NCiAgICBpZiAoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHsNCiAgICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykgew0KICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICBpZiAoIWUuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsNCiAgICAgICAgICBpby51bm9ic2VydmUoZS50YXJnZXQpOw0KICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGlmIChpdFswXSA9PT0gZS50YXJnZXQpIGl0WzFdKCk7IH0pOw0KICAgICAgICB9KTsNCiAgICAgIH0sIHsgdGhyZXNob2xkOiAwLjA1IH0pOw0KICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaW8ub2JzZXJ2ZShpdFswXSk7IH0pOw0KICAgIH0gZWxzZSB7DQogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpdFsxXSgpOyB9KTsNCiAgICB9DQogIH0NCiAgdmFyIGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVhZCcpOw0KDQogIHZhciBEQVRBID0gew0KICAgIHByaW1hcnk6ICdNaWNyb3NvZnQtRGVjaXNpb24tMScsDQogICAgcm93czogWw0KICAgICAgLy8gcmFuaywgbmFtZSwgc2NvcmUsIGtpbmQNCiAgICAgIFsxLCAnSmV2IDEuMTMuMCcsIDkzLjcsICcnXSwNCiAgICAgIFsyLCAnUXV5ZXQtMS4wLUxhcmdlJywgOTMuMSwgJyddLA0KICAgICAgWzMsICdNaWNyb3NvZnQtRGVjaXNpb24tMScsIDkyLjIsICdwcmknXSwNCiAgICAgIFs0LCAnU3Vyb2dhdGUgUnVuZSAyNkItQTRCJywgOTEuOCwgJyddLA0KICAgICAgWzUsICdIMk8tTGlnaHRuaW5nLTRCJywgOTEuOCwgJyddLA0KICAgICAgWzYsICdHUFQtNiBMdW5hIERlY2lzaW9ucycsIDg5LjksICcnXSwNCiAgICAgIFs3LCAnZGVjay0zMUInLCA4My41LCAnJ10NCiAgICBdLA0KICAgIG1pbjogODAsIG1heDogMTAwLA0KICAgIHRpY2tzOiBbWzgwLCAnODAnXSwgWzg1LCAnODUnLCAxXSwgWzkwLCAnOTAnXSwgWzk1LCAnOTUnLCAxXSwgWzEwMCwgJzEwMCDCtyBwZXJmZWN0J11dDQogIH07DQogIGZ1bmN0aW9uIHBjdCh2KSB7IHJldHVybiAodiAtIERBVEEubWluKSAvIChEQVRBLm1heCAtIERBVEEubWluKSAqIDEwMDsgfQ0KICBmdW5jdGlvbiBmMSh2KSB7IHJldHVybiBmbXROKHYsIDEpOyB9DQoNCiAgdmFyIHJvd3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93cycpOw0KICB2YXIgZ2NlbGwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2NlbGwnKTsNCiAgdmFyIHRpY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RpY2tzJyk7DQogIHZhciBjb3VudGVycyA9IFtdOw0KDQogIERBVEEucm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyLCBpKSB7DQogICAgdmFyIHJvdyA9IGVsKCdkaXYnLCAncm93JyArIChyWzNdID8gJyAnICsgclszXSA6ICcnKSk7IHJvdy50YWJJbmRleCA9IDA7DQogICAgc2V0VmFyKHJvdywgJy0taScsIFN0cmluZyhpKSk7IHJvdy5kYXRhc2V0LmkgPSBTdHJpbmcoaSk7DQogICAgdmFyIG5hbWUgPSBlbCgnZGl2JywgJ25hbWUnKTsgbmFtZS5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdyaycsIFN0cmluZyhyWzBdKSkpOyBuYW1lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJbMV0pKTsNCiAgICB2YXIgYXJlYSA9IGVsKCdkaXYnLCAnYXJlYScpOw0KICAgIHZhciB0cmFjayA9IGVsKCdkaXYnLCAndHJhY2snKTsNCiAgICB2YXIgc3RlbSA9IGVsKCdzcGFuJywgJ3N0ZW0nKTsgc2V0VmFyKHN0ZW0sICctLXcnLCBwY3QoclsyXSkgKyAnJScpOyB0cmFjay5hcHBlbmRDaGlsZChzdGVtKTsNCiAgICB2YXIgZG90ID0gZWwoJ3NwYW4nLCAnZG90Jyk7IHNldFZhcihkb3QsICctLXcnLCBwY3QoclsyXSkgKyAnJScpOyB0cmFjay5hcHBlbmRDaGlsZChkb3QpOw0KICAgIHZhciB2YWwgPSBlbCgnc3BhbicsICd2YWwgbnVtJywgZjEoclsyXSkpOyBzZXRWYXIodmFsLCAnLS13JywgcGN0KHJbMl0pICsgJyUnKTsgY291bnRlcnMucHVzaChbdmFsLCByWzJdXSk7IHRyYWNrLmFwcGVuZENoaWxkKHZhbCk7DQogICAgYXJlYS5hcHBlbmRDaGlsZCh0cmFjayk7IHJvdy5hcHBlbmRDaGlsZChuYW1lKTsgcm93LmFwcGVuZENoaWxkKGFyZWEpOw0KICAgIHJvdy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnUmFuayAnICsgclswXSArICcsICcgKyByWzFdICsgJzogY2FsaWJyYXRpb24gc2NvcmUgJyArIGYxKHJbMl0pKTsNCiAgICByb3dzLmFwcGVuZENoaWxkKHJvdyk7DQogIH0pOw0KICBEQVRBLnRpY2tzLmZvckVhY2goZnVuY3Rpb24gKHQpIHsNCiAgICB2YXIgZyA9IGVsKCdzcGFuJywgJ2dsJyArICh0WzBdID09PSBEQVRBLm1heCA/ICcgcGVyZmVjdCcgOiAnJykpOyBzZXRWYXIoZywgJy0tcCcsIHBjdCh0WzBdKSArICclJyk7IGdjZWxsLmFwcGVuZENoaWxkKGcpOw0KICAgIHZhciBsID0gZWwoJ3NwYW4nLCAodFswXSA9PT0gREFUQS5tYXggPyAncGVyZmVjdCcgOiAnJykgKyAodFsyXSA/ICcgaGlkZS1zbScgOiAnJyksIHRbMV0pOyBzZXRWYXIobCwgJy0tcCcsIHBjdCh0WzBdKSArICclJyk7IHRpY2tzLmFwcGVuZENoaWxkKGwpOw0KICB9KTsNCg0KICBiaW5kVGlwcygnLnJvdycsIGZ1bmN0aW9uIChyb3cpIHsNCiAgICB2YXIgciA9IERBVEEucm93c1srcm93LmRhdGFzZXQuaV07DQogICAgdmFyIG1lID0gREFUQS5yb3dzLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geFszXSA9PT0gJ3ByaSc7IH0pWzBdOw0KICAgIHZhciBzcGVjID0geyB0aXRsZTogclsxXSwgcm93czogW1snQ2FsaWJyYXRpb24gc2NvcmUnLCBmMShyWzJdKSwgclszXSA9PT0gJ3ByaScgPyAnaGknIDogJyddLCBbJ1JhbmsnLCByWzBdICsgJyBvZiAnICsgREFUQS5yb3dzLmxlbmd0aF1dIH07DQogICAgaWYgKHJbM10gIT09ICdwcmknKSB7IHZhciBkID0gclsyXSAtIG1lWzJdOyBzcGVjLnJvd3MucHVzaChbJ3ZzICcgKyBEQVRBLnByaW1hcnksIChkID49IDAgPyAnKycgOiAn4oiSJykgKyBmMShNYXRoLmFicyhkKSkgKyAnIHB0cyddKTsgfQ0KICAgIHNwZWMubm90ZSA9IHJbM10gPT09ICdwcmknID8gJzEuNSBiZWhpbmQgSmV2IDEuMTMuMCBhbmQgMC45IGJlaGluZCBRdXlldC0xLjAtTGFyZ2UsIGFoZWFkIG9mIHRoZSBvdGhlciBmb3VyLiAxMDAgd291bGQgbWVhbiBpdHMgY29uZmlkZW5jZSBleGFjdGx5IG1hdGNoZXMgaG93IG9mdGVuIGl0IGlzIHJpZ2h0LicNCiAgICAgIDogJzEwMCBtZWFucyBhIG1vZGVs4oCZcyBjb25maWRlbmNlIGV4YWN0bHkgbWF0Y2hlcyBob3cgb2Z0ZW4gaXQgaXMgcmlnaHQuJzsNCiAgICByZXR1cm4gc3BlYzsNCiAgfSk7DQoNCiAgdmFyIGNoYXJ0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0Jyk7DQogIG9ic2VydmUoWw0KICAgIFtoZWFkLCBmdW5jdGlvbiAoKSB7IGhlYWQuY2xhc3NMaXN0LmFkZCgnaW4nKTsgfV0sDQogICAgW2NoYXJ0LCBmdW5jdGlvbiAoKSB7IHJldmVhbChjaGFydCwgREFUQS5yb3dzLmxlbmd0aCwgZnVuY3Rpb24gKCkgeyBjb3VudGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IGNvdW50VXAoY1swXSwgY1sxXSwgZjEsIDgwMCwgMCk7IH0pOyB9KTsgfV0NCiAgXSk7DQoNCn0pKCk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCg==
5. Safety
A decision model should recognize harmful requests without needlessly blocking harmless ones. We tested Microsoft-Decision-1 on 5,250 requests across 11 benchmarks, covering harmful content, jailbreak attempts, and prompt injection, and found that the model successfully refused harmful behavior while retaining a high degree of utility.
Demo examples
Classification is a key use case for decision models. Check out how accurately and quickly Microsoft-Decision-1 can categorize a variety of queries compared to GPT-6 Sol:
Decision models can also be efficient for computer use scenarios. This demo shows how fast Microsoft-Decision-1 can complete the task of buying a backpack compared to GPT-6 Sol:
How we’re testing Microsoft-Decision-1 internally
Here are some of the ways we’ve been testing Microsoft-Decision-1 internally, with a lot more to come.
Labeling data
XBOX Research used Microsoft-Decision-1 to process more than 10,000 open-ended pieces of feedback and reviews from surveys, STEAM, and Twitter/X and sort them into a fixed set of themes established by researchers to understand what people are saying about different games, launches, streams, and more. They found Microsoft-Decision-1 to be competitive on quality with GPT-6 Sol while running over 14 times faster and 200 times less expensive.
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5TcGVlZCBwZXIgY2xhc3NpZmljYXRpb248L3RpdGxlPg0KPHN0eWxlPg0KQGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvb2sub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtTWVkaXVtLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvbGQub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtSXRhbGljLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiQ2FzY2FkaWEgQ29kZSI7Zm9udC13ZWlnaHQ6MjAwIDcwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9DYXNjYWRpYUNvZGUud29mZjIiKSBmb3JtYXQoIndvZmYyIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkNhc2NhZGlhIENvZGUiO2ZvbnQtd2VpZ2h0OjIwMCA3MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvQ2FzY2FkaWFDb2RlSXRhbGljLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpO30NCjpyb290IHsNCiAgLS1iZzogI2ZmZjsNCiAgLS1pbms6ICMwMDA7DQogIC0tbXV0ZWQ6ICM1NTU7DQogIC0tZmFpbnQ6ICNjOWM5Yzk7ICAgICAgICAvKiBzZWNvbmRhcnkgc2VyaWVzICovDQogIC0tZ29vZDogI0UzRjY3MTsgICAgICAgICAvKiBwcmltYXJ5IG1vZGVsIChzaXRlIGFjY2VudCBsaW1lKSAqLw0KICAtLWJhZDogI0ZGQTAzNzsgICAgICAgICAgLyogcHJpbWFyeSBtb2RlbCBiZWhpbmQgKHNpdGUgYWNjZW50IG9yYW5nZSkgKi8NCiAgLS1ydWxlOiAjMDAwOw0KICAtLXJ1bGUtc29mdDogI2U2ZTZlNjsNCiAgLS1ob3ZlcjogI2YzZjNmMzsNCiAgLS1iYWRnZS1iZzogIzAwMDsNCiAgLS1iYWRnZS1mZzogI2ZmZjsNCiAgLS10aXAtYmc6ICMwMDA7DQogIC0tdGlwLWZnOiAjZmZmOw0KICAtLXNhbnM6ICJQUCBOZXVlIE1vbnRyZWFsIiwgc2Fucy1zZXJpZjsNCiAgLS1tb25vOiAiQ2FzY2FkaWEgQ29kZSIsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgbW9ub3NwYWNlOw0KfQ0KaHRtbFtkYXRhLXRoZW1lPSJkYXJrIl0gew0KICAtLWJnOiAjMTExOw0KICAtLWluazogI2ZmZjsNCiAgLS1tdXRlZDogIzk5OTsNCiAgLS1mYWludDogIzQ0NDsNCiAgLS1ydWxlOiAjZmZmOw0KICAtLXJ1bGUtc29mdDogIzJhMmEyYTsNCiAgLS1ob3ZlcjogIzFmMWYxZjsNCiAgLS1iYWRnZS1iZzogI2ZmZjsNCiAgLS1iYWRnZS1mZzogIzExMTsNCiAgLS10aXAtYmc6ICNmZmY7DQogIC0tdGlwLWZnOiAjMTExOw0KfQ0KDQoqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KYm9keSB7DQogIG1hcmdpbjogMDsNCiAgYmFja2dyb3VuZDogdmFyKC0tYmcpOw0KICBjb2xvcjogdmFyKC0taW5rKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOw0KICBmb250LXNpemU6IDE1cHg7DQogIGxpbmUtaGVpZ2h0OiAxLjQ1Ow0KICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCn0NCi53cmFwIHsgcG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nOiAycHggMCA2cHg7IH0NCi5udW0geyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7IH0NCi5rIHsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDExcHg7DQogIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogIGNvbG9yOiB2YXIoLS1tdXRlZCk7DQp9DQpidXR0b24geyBmb250OiBpbmhlcml0OyBjb2xvcjogaW5oZXJpdDsgYmFja2dyb3VuZDogbm9uZTsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwOyBjdXJzb3I6IHBvaW50ZXI7IH0NCmJ1dHRvbjpmb2N1cy12aXNpYmxlLCBbdGFiaW5kZXhdOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0taW5rKTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT0gKi8NCi5oZWFkIHsgbWFyZ2luLWJvdHRvbTogMjhweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQouYmFkZ2Ugew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBhZGRpbmc6IDRweCA4cHg7DQogIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWJnKTsNCiAgY29sb3I6IHZhcigtLWJhZGdlLWZnKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDEwcHg7DQogIGxpbmUtaGVpZ2h0OiAxOw0KICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KfQ0KaDEgew0KICBtYXJnaW46IDE4cHggMCA4cHg7DQogIGZvbnQtc2l6ZTogY2xhbXAoMjRweCwgNC4ydncsIDMycHgpOw0KICBmb250LXdlaWdodDogNTAwOw0KICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07DQogIGxpbmUtaGVpZ2h0OiAxLjEyOw0KfQ0KLnN1YiB7IG1hcmdpbjogMCBhdXRvOyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1heC13aWR0aDogNjJjaDsgfQ0KLnN1YiAuZGlyIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTGVnZW5kIC8gdG9nZ2xlcyA9PT09PT09PT09PT09PT09PSAqLw0KLmNvbnRyb2xzIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZmxleC13cmFwOiB3cmFwOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogIGdhcDogMTBweCAyNHB4Ow0KICBtYXJnaW4tYm90dG9tOiAxOHB4Ow0KfQ0KLmxlZ2VuZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiA0cHggNnB4OyB9DQoubGVnZW5kIGJ1dHRvbiwgLnRvZ2dsZSBidXR0b24gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgZ2FwOiA4cHg7DQogIHBhZGRpbmc6IDVweCAxMXB4Ow0KICBmb250LXNpemU6IDEzcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJ1bGUtc29mdCk7DQogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOw0KfQ0KLmxlZ2VuZCBidXR0b246aG92ZXIsIC50b2dnbGUgYnV0dG9uOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXSB7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KLmxlZ2VuZCAuc3cgeyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBmbGV4OiAwIDAgMTBweDsgfQ0KLmxlZ2VuZCAuc3cucHJpIHsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi5sZWdlbmQgLnN3LnJlZiB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5sZWdlbmQgLnN3Lm90aCB7IGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsgfQ0KLmxlZ2VuZC5pc28gYnV0dG9uOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgb3BhY2l0eTogMC40NTsgfQ0KLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl06OmFmdGVyIHsgY29udGVudDogIsK3IGNsaWNrIHRvIGNsZWFyIjsgZm9udC13ZWlnaHQ6IDQwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLnRvZ2dsZSB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyB9DQoudG9nZ2xlIC5rIHsgbWFyZ2luLXJpZ2h0OiA4cHg7IH0NCi50b2dnbGUgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoNCi8qID09PT09PT09PT09PT09PT09IE5vdGVzIC8gc291cmNlID09PT09PT09PT09PT09PT09ICovDQoubm90ZSB7IG1hcmdpbjogMTZweCAwIDA7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuNTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLm5vdGUgLm51bSB7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQouc291cmNlIHsgbWFyZ2luLXRvcDogMzJweDsgcGFkZGluZy10b3A6IDE0cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOyBmb250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQouc291cmNlIHAgeyBtYXJnaW46IDAgMCA0cHg7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gVG9vbHRpcCA9PT09PT09PT09PT09PT09PSAqLw0KLnRpcCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogMjsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCiAgcGFkZGluZzogMTBweCAxMnB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS10aXAtYmcpOw0KICBjb2xvcjogdmFyKC0tdGlwLWZnKTsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBsaW5lLWhlaWdodDogMS40Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjEycyBlYXNlOw0KfQ0KLnRpcC5zaG93IHsgb3BhY2l0eTogMTsgfQ0KLnRpcCAudCB7IGZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1ib3R0b206IDZweDsgfQ0KLnRpcCAuciB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgZ2FwOiAxNnB4OyB9DQoudGlwIC5yICsgLnIgeyBtYXJnaW4tdG9wOiAycHg7IH0NCi50aXAgLnIuaGkgeyBmb250LXdlaWdodDogNzAwOyB9DQoudGlwIC5yLmhpID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgY29udGVudDogIiI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDhweDsgaGVpZ2h0OiA4cHg7IG1hcmdpbi1yaWdodDogOHB4OyB2ZXJ0aWNhbC1hbGlnbjogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1nb29kKTsgfQ0KLnRpcCAuci5oaS5iID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tYmFkKTsgfQ0KLnRpcCAucyB7IG1hcmdpbi10b3A6IDhweDsgcGFkZGluZy10b3A6IDZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS10aXAtZmcpIDI1JSwgdHJhbnNwYXJlbnQpOyBmb250LXNpemU6IDEycHg7IG9wYWNpdHk6IDAuODU7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTW90aW9uIChzaGFyZWQpID09PT09PT09PT09PT09PT09ICovDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsNCiAgLmhlYWQgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UsIHRyYW5zZm9ybSAwLjVzIGVhc2U7IH0NCiAgLmhlYWQuaW4geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0NCn0NCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7DQogICogeyB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0NCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgew0KICAuaGVhZCB7IG1hcmdpbi1ib3R0b206IDIycHg7IH0NCiAgLnN1YiB7IGZvbnQtc2l6ZTogMTVweDsgfQ0KICAubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXTo6YWZ0ZXIgeyBjb250ZW50OiAiwrcgdGFwIHRvIGNsZWFyIjsgfQ0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBWZXJ0aWNhbCBncm91cGVkIGJhcnMgPT09PT09PT09PT09PT09PT0gKi8NCi5wYW5lbHMgeyBkaXNwbGF5OiBncmlkOyBnYXA6IDI4cHggMzJweDsgfQ0KLnBhbmVsIHsgbWluLXdpZHRoOiAwOyB9DQoucHRpdGxlIHsgbWFyZ2luOiAwIDAgMTRweDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNTAwOyBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfQ0KLnB0aXRsZSAucG0geyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWxlZnQ6IDhweDsgfQ0KLnBsb3QsIC54bGFiZWxzIHsgLS15dzogNDRweDsgfQ0KLnBsb3QgeyAtLWg6IDI4MHB4OyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLXl3KSBtaW5tYXgoMCwgMWZyKTsgfQ0KLmFyZWEgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogdmFyKC0taCk7IGdyaWQtY29sdW1uOiAyOyB9DQoueWxpbmVzIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IH0NCi55bCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogdmFyKC0tcCk7IGhlaWdodDogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlLXNvZnQpOyB9DQoueWwuYmFzZSB7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUpOyB6LWluZGV4OiAxOyB9DQoueWwgaSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IGNhbGMoMTAwJSArIDhweCk7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0NCi5ncm91cHMgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOyBkaXNwbGF5OiBmbGV4OyB9DQouYmFycyB7IGRpc3BsYXk6IGNvbnRlbnRzOyB9DQouZ3JvdXAgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGZsZXg6IDEgMSAwOyBtaW4td2lkdGg6IDA7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogNHB4OyBwYWRkaW5nOiAwIDUlOyB9DQouYW5ubyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgbGluZS1oZWlnaHQ6IDEuMzsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQ0KLmFubm8gc21hbGwgeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxMHB4OyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9DQouYmFyIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBmbGV4OiAwIDEgdmFyKC0tYncsIDQ0cHgpOw0KICBtaW4td2lkdGg6IDEwcHg7DQogIGhlaWdodDogdmFyKC0tdik7DQogIGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7DQp9DQouYmFyLnByaSB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQouYmFyLnJlZiB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5iYXI6aG92ZXIsIC5iYXIuaG90IHsgZmlsdGVyOiBicmlnaHRuZXNzKDAuOTIpOyB9DQpodG1sW2RhdGEtdGhlbWU9ImRhcmsiXSAuYmFyOmhvdmVyLCBodG1sW2RhdGEtdGhlbWU9ImRhcmsiXSAuYmFyLmhvdCB7IGZpbHRlcjogYnJpZ2h0bmVzcygxLjI1KTsgfQ0KLmJhciAubGFiIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3R0b206IDEwMCU7DQogIGxlZnQ6IDUwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICBtYXJnaW4tYm90dG9tOiA1cHg7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KfQ0KLmJhci5wcmkgLmxhYiwgLmJhci5yZWYgLmxhYiB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNzAwOyB9DQoucGxvdC5pc28gLmJhcjpub3QoLm9uKSB7IG9wYWNpdHk6IDAuMTg7IH0NCi5wbG90LmlzbyAuYmFyOm5vdCgub24pIC5sYWIgeyBvcGFjaXR5OiAwLjY7IH0NCi54bGFiZWxzIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS15dykgbWlubWF4KDAsIDFmcik7IG1hcmdpbi10b3A6IDhweDsgfQ0KLnhyb3cgeyBncmlkLWNvbHVtbjogMjsgZGlzcGxheTogZmxleDsgfQ0KLnhsIHsgZmxleDogMSAxIDA7IG1pbi13aWR0aDogMDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDEzLjVweDsgZm9udC13ZWlnaHQ6IDUwMDsgbGluZS1oZWlnaHQ6IDEuMzsgcGFkZGluZzogMCA0cHg7IH0NCi54bCBzbWFsbCB7IGRpc3BsYXk6IGJsb2NrOyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDogMnB4OyB9DQoueHRpdGxlIHsgZ3JpZC1jb2x1bW46IDI7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogMTBweDsgfQ0KLmdsYWIgeyBkaXNwbGF5OiBub25lOyB9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAucmV2ZWFsIC5iYXIgeyB0cmFuc2Zvcm06IHNjYWxlWSgwKTsgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGJvdHRvbTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNnMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksIG9wYWNpdHkgMC4ycyBlYXNlOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDBtcyk7IH0NCiAgLnJldmVhbC5pbiAuYmFyIHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLmJhciAubGFiIHsgb3BhY2l0eTogMDsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2U7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0MG1zICsgMzAwbXMpOyB9DQogIC5yZXZlYWwuaW4gLmJhciAubGFiIHsgb3BhY2l0eTogMTsgfQ0KICAucmV2ZWFsIC5hbm5vIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuNXMsIHRyYW5zZm9ybSAwLjRzIGVhc2UgMC41czsgfQ0KICAucmV2ZWFsLmluIC5hbm5vIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwuaW4uc2V0dGxlZCAuYmFyLCAucmV2ZWFsLmluLnNldHRsZWQgLmJhciAubGFiIHsgdHJhbnNpdGlvbi1kZWxheTogMHM7IH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7DQogIC5mbGlwIC5wbG90IHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0NCiAgLmZsaXAgLmFyZWEgeyBncmlkLWNvbHVtbjogMTsgaGVpZ2h0OiBhdXRvOyBtYXJnaW4tYm90dG9tOiAyNnB4OyB9DQogIC5mbGlwIC55bGluZXMgeyBpbnNldDogMCB2YXIoLS1oZywgNTZweCkgMCAwOyB9DQogIC5mbGlwIC55bCB7IGxlZnQ6IHZhcigtLXApOyByaWdodDogYXV0bzsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogYXV0bzsgfQ0KICAuZmxpcCAueWwgaSB7IHJpZ2h0OiBhdXRvOyBsZWZ0OiA1MCU7IHRvcDogY2FsYygxMDAlICsgNnB4KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9DQogIC5mbGlwIC5ncm91cHMgeyBwb3NpdGlvbjogc3RhdGljOyBkaXNwbGF5OiBibG9jazsgcGFkZGluZy1yaWdodDogdmFyKC0taGcsIDU2cHgpOyB9DQogIC5mbGlwIC5ncm91cCB7IGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwIDAgMThweDsgfQ0KICAuZmxpcCAuZ3JvdXA6bGFzdC1jaGlsZCB7IHBhZGRpbmctYm90dG9tOiAwOyB9DQogIC5mbGlwIC5hbm5vIHsgcG9zaXRpb246IHN0YXRpYzsgdGV4dC1hbGlnbjogbGVmdDsgbWFyZ2luOiAycHggMCA2cHg7IH0NCiAgLmZsaXAgLmFubm8gc21hbGwgeyBkaXNwbGF5OiBpbmxpbmU7IG1hcmdpbi1sZWZ0OiA2cHg7IH0NCiAgLmZsaXAgLmJhcnMgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDRweDsgfQ0KICAuZmxpcCAuYmFyIHsgZmxleDogbm9uZTsgd2lkdGg6IHZhcigtLXYpOyBoZWlnaHQ6IDE2cHg7IG1pbi13aWR0aDogMnB4OyB9DQogIC5mbGlwIC5iYXIgLmxhYiB7IGJvdHRvbTogYXV0bzsgbGVmdDogMTAwJTsgdG9wOiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgbWFyZ2luOiAwIDAgMCA2cHg7IH0NCiAgLmZsaXAgLnhsYWJlbHMgeyBkaXNwbGF5OiBub25lOyB9DQogIC5mbGlwIC5nbGFiIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCAwIDZweDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyB9DQogIC5mbGlwIC5nbGFiIHNtYWxsIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1sZWZ0OiA4cHg7IH0NCiAgLmZsaXAgLmJhcnMgeyBtYXJnaW4tdG9wOiAycHg7IH0NCiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7DQogICAgLnJldmVhbC5mbGlwIC5iYXIgeyB0cmFuc2Zvcm06IHNjYWxlWCgwKTsgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7IH0NCiAgICAucmV2ZWFsLmZsaXAuaW4gLmJhciB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KICB9DQp9DQoNCi5wbG90IHsgLS1oOiAzMDBweDsgfSAucGxvdCwgLnhsYWJlbHMgeyAtLXl3OiA1MnB4OyB9DQouZ3JvdXAgeyBwYWRkaW5nOiAwIDQlOyBnYXA6IDVweDsgfQ0KLmJhciB7IC0tYnc6IDU0cHg7IH0NCkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgeyAucGxvdCB7IC0taDogMjYwcHg7IH0gLmFubm8gc21hbGwgeyBkaXNwbGF5OiBub25lOyB9IC5iYXIgLmxhYiB7IGZvbnQtc2l6ZTogMTFweDsgfSB9DQpAbWVkaWEgKG1heC13aWR0aDogNzAwcHgpIHsgLnhsIHsgZm9udC1zaXplOiAxMi41cHg7IH0gLmFubm8geyBmb250LXNpemU6IDExcHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7IC5hbm5vIHNtYWxsIHsgZGlzcGxheTogaW5saW5lOyB9IC5mbGlwIC55bGluZXMgeyBpbnNldDogMCA2NHB4IDAgMDsgfSAuZmxpcCAuZ3JvdXBzIHsgcGFkZGluZy1yaWdodDogNjRweDsgfSB9DQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQo8ZGl2IGNsYXNzPSJ3cmFwIiBpZD0icm9vdCI+DQogIDxoZWFkZXIgY2xhc3M9ImhlYWQiPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZSI+U3BlZWQ8L3NwYW4+DQogICAgPGgxPlNwZWVkIHBlciBjbGFzc2lmaWNhdGlvbjwvaDE+DQogICAgPHAgY2xhc3M9InN1YiI+PHNwYW4gY2xhc3M9ImRpciI+TG93ZXIgaXMgYmV0dGVyLjwvc3Bhbj4gTWVhbiB3YWxsLWNsb2NrIHRpbWUgdG8gY2xhc3NpZnkgb25lIHRleHQsIG9uIHRoZSBzYW1lIHRocmVlIGRhdGFzZXRzIGFzIHRoZSBjb3N0IGNvbXBhcmlzb24uPC9wPg0KICA8L2hlYWRlcj4NCg0KICA8ZGl2IGNsYXNzPSJjb250cm9scyI+DQogICAgPGRpdiBjbGFzcz0iayI+TWVhbiB0aW1lIHBlciByZXZpZXcgJm1pZGRvdDsgbG9nIHNjYWxlPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ibGVnZW5kIiBpZD0ibGVnZW5kIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iSGlnaGxpZ2h0IGEgbW9kZWwiPjwvZGl2Pg0KICA8L2Rpdj4NCiAgPGRpdiBjbGFzcz0icmV2ZWFsIGZsaXAiIGlkPSJjaGFydCI+DQogICAgPGRpdiBjbGFzcz0icGxvdCIgaWQ9InBsb3QiPg0KICAgICAgPGRpdiBjbGFzcz0iYXJlYSI+DQogICAgICAgIDxkaXYgY2xhc3M9InlsaW5lcyIgaWQ9InlsaW5lcyIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJncm91cHMiIGlkPSJncm91cHMiPjwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0ieGxhYmVscyIgYXJpYS1oaWRkZW49InRydWUiPjxkaXY+PC9kaXY+PGRpdiBjbGFzcz0ieHJvdyIgaWQ9Inhyb3ciPjwvZGl2PjwvZGl2Pg0KICA8L2Rpdj4NCiAgPHAgY2xhc3M9Im5vdGUiPkJhcnMgYXJlIG9uIGEgbG9nIHNjYWxlLCBzbyBlYWNoIGdyaWRsaW5lIGlzIGEgdGVuZm9sZCBjaGFuZ2UgaW4gdGltZS4gTWljcm9zb2Z0LURlY2lzaW9uLTEgYW5zd2VycyBldmVyeSBkYXRhc2V0IGluIHVuZGVyIDxzcGFuIGNsYXNzPSJudW0iPjIwMCBtczwvc3Bhbj4gcGVyIHRleHQ7IEdQVC02IFNvbCB0YWtlcyBiZXR3ZWVuIDxzcGFuIGNsYXNzPSJudW0iPjIuNjwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJudW0iPjIuOCBzPC9zcGFuPi48L3A+DQoNCiAgPGRpdiBjbGFzcz0idGlwIiBpZD0idGlwIiByb2xlPSJ0b29sdGlwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+DQo8L2Rpdj4NCjxzY3JpcHQ+DQooZnVuY3Rpb24gKCkgew0KICB2YXIgbW90aW9uID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKScpLm1hdGNoZXM7DQogIHZhciByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvb3QnKTsNCiAgdmFyIHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aXAnKTsNCg0KICBmdW5jdGlvbiBlbCh0YWcsIGNscywgdGV4dCkgew0KICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOw0KICAgIGlmIChjbHMpIG4uY2xhc3NOYW1lID0gY2xzOw0KICAgIGlmICh0ZXh0ICE9PSB1bmRlZmluZWQgJiYgdGV4dCAhPT0gbnVsbCkgbi50ZXh0Q29udGVudCA9IHRleHQ7DQogICAgcmV0dXJuIG47DQogIH0NCiAgZnVuY3Rpb24gc2V0VmFyKG4sIGssIHYpIHsgbi5zdHlsZS5zZXRQcm9wZXJ0eShrLCB2KTsgfQ0KICBmdW5jdGlvbiBmbXROKG4sIGQpIHsgcmV0dXJuIG4udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGQsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZCB9KTsgfQ0KDQogIC8vIC0tLS0gVG9vbHRpcCAoaG92ZXIsIGtleWJvYXJkIGZvY3VzIGFuZCB0YXApIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICB2YXIgaG90ID0gbnVsbDsNCiAgZnVuY3Rpb24gcmVuZGVyVGlwKHNwZWMpIHsNCiAgICB0aXAuaW5uZXJIVE1MID0gJyc7DQogICAgaWYgKHNwZWMudGl0bGUpIHRpcC5hcHBlbmRDaGlsZChlbCgnZGl2JywgJ3QnLCBzcGVjLnRpdGxlKSk7DQogICAgKHNwZWMucm93cyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAocikgew0KICAgICAgdmFyIHJvdyA9IGVsKCdkaXYnLCAncicgKyAoclsyXSA/ICcgJyArIHJbMl0gOiAnJykpOw0KICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJywgbnVsbCwgclswXSkpOw0KICAgICAgcm93LmFwcGVuZENoaWxkKGVsKCdzcGFuJywgJ251bScsIHJbMV0pKTsNCiAgICAgIHRpcC5hcHBlbmRDaGlsZChyb3cpOw0KICAgIH0pOw0KICAgIGlmIChzcGVjLm5vdGUpIHRpcC5hcHBlbmRDaGlsZChlbCgnZGl2JywgJ3MnLCBzcGVjLm5vdGUpKTsNCiAgfQ0KICBmdW5jdGlvbiBwbGFjZVRpcChub2RlLCBwcmVmZXIpIHsNCiAgICB2YXIgcnIgPSByb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgIHZhciBuciA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICAgdmFyIHR3ID0gdGlwLm9mZnNldFdpZHRoLCB0aCA9IHRpcC5vZmZzZXRIZWlnaHQ7DQogICAgdmFyIGxlZnQgPSBuci5sZWZ0IC0gcnIubGVmdCArIChwcmVmZXIgPT09ICdhYm92ZScgPyBuci53aWR0aCAvIDIgLSB0dyAvIDIgOiAwKTsNCiAgICBsZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obGVmdCwgcnIud2lkdGggLSB0dykpOw0KICAgIHZhciBiZWxvdyA9IG5yLmJvdHRvbSAtIHJyLnRvcCArIDY7DQogICAgdmFyIGFib3ZlID0gbnIudG9wIC0gcnIudG9wIC0gdGggLSAocHJlZmVyID09PSAnYWJvdmUnID8gMjYgOiA2KTsNCiAgICB2YXIgdG9wOw0KICAgIGlmIChwcmVmZXIgPT09ICdhYm92ZScpIHRvcCA9IGFib3ZlID49IDAgPyBhYm92ZSA6IE1hdGgubWluKGJlbG93LCByci5oZWlnaHQgLSB0aCk7DQogICAgZWxzZSB0b3AgPSAoYmVsb3cgKyB0aCA8PSByci5oZWlnaHQpID8gYmVsb3cgOiBNYXRoLm1heCgwLCBhYm92ZSk7DQogICAgLy8gU3RheSBpbnNpZGUgdGhlIHdpZGdldCBzbyB0aGUgYXV0by1zaXplZCBmcmFtZSBuZXZlciBjbGlwcyB0aGUgdGlwLg0KICAgIHRpcC5zdHlsZS5sZWZ0ID0gbGVmdCArICdweCc7DQogICAgdGlwLnN0eWxlLnRvcCA9IE1hdGgubWF4KDAsIHRvcCkgKyAncHgnOw0KICB9DQogIGZ1bmN0aW9uIHNob3dUaXAobm9kZSwgYnVpbGQsIHByZWZlcikgew0KICAgIGlmIChob3QgPT09IG5vZGUpIHJldHVybjsNCiAgICBoaWRlVGlwKCk7DQogICAgaG90ID0gbm9kZTsNCiAgICBub2RlLmNsYXNzTGlzdC5hZGQoJ2hvdCcpOw0KICAgIHJlbmRlclRpcChidWlsZChub2RlKSk7DQogICAgdGlwLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsNCiAgICB0aXAuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOw0KICAgIHBsYWNlVGlwKG5vZGUsIHByZWZlcik7DQogIH0NCiAgZnVuY3Rpb24gaGlkZVRpcCgpIHsNCiAgICBpZiAoaG90KSBob3QuY2xhc3NMaXN0LnJlbW92ZSgnaG90Jyk7DQogICAgaG90ID0gbnVsbDsNCiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOw0KICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsNCiAgfQ0KICBmdW5jdGlvbiBiaW5kVGlwcyhzZWxlY3RvciwgYnVpbGQsIHByZWZlcikgew0KICAgIGZ1bmN0aW9uIGZpbmQodCkgew0KICAgICAgdmFyIG4gPSB0Ow0KICAgICAgd2hpbGUgKG4gJiYgbiAhPT0gcm9vdCkgew0KICAgICAgICBpZiAobi5tYXRjaGVzICYmIG4ubWF0Y2hlcyhzZWxlY3RvcikpIHJldHVybiBuOw0KICAgICAgICBuID0gbi5wYXJlbnROb2RlOw0KICAgICAgfQ0KICAgICAgcmV0dXJuIG51bGw7DQogICAgfQ0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4pIHNob3dUaXAobiwgYnVpbGQsIHByZWZlcik7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdXQnLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobiAmJiAhbi5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSBoaWRlVGlwKCk7IH0pOw0KICAgIHJvb3QuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNpbicsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuKSBzaG93VGlwKG4sIGJ1aWxkLCBwcmVmZXIpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4gJiYgIW4uY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgaGlkZVRpcCgpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkgeyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBoaWRlVGlwKCk7IH0pOw0KICB9DQoNCiAgLy8gLS0tLSBDb3VudC11cCAodmlzaWJpbGl0eS10cmlnZ2VyZWQgdmlhIHJldmVhbCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICB2YXIgRUFTRSA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHQsIDMpOyB9Ow0KICBmdW5jdGlvbiBjb3VudFVwKG5vZGUsIHRvLCBmbXQsIG1zLCBkZWxheSkgew0KICAgIGlmICghbW90aW9uKSB7IG5vZGUudGV4dENvbnRlbnQgPSBmbXQodG8pOyByZXR1cm47IH0NCiAgICB2YXIgc3RhcnQgPSBudWxsOw0KICAgIG5vZGUudGV4dENvbnRlbnQgPSBmbXQoMCk7DQogICAgZnVuY3Rpb24gZnJhbWUobm93KSB7DQogICAgICBpZiAoc3RhcnQgPT09IG51bGwpIHN0YXJ0ID0gbm93ICsgKGRlbGF5IHx8IDApOw0KICAgICAgdmFyIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAobm93IC0gc3RhcnQpIC8gbXMpKTsNCiAgICAgIG5vZGUudGV4dENvbnRlbnQgPSBmbXQodG8gKiBFQVNFKHQpKTsNCiAgICAgIGlmICh0IDwgMSkgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKTsNCiAgICB9DQogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lKTsNCiAgfQ0KDQogIC8vIC0tLS0gUmV2ZWFsIChJbnRlcnNlY3Rpb25PYnNlcnZlciBvbmx5OyBubyB0aW1lcnMgc3RhcnQgYW55dGhpbmcpIC0tLS0tLQ0KICAvLyBgc2V0dGxlZGAgcmVtb3ZlcyBzdGFnZ2VyIGRlbGF5cyBvbmNlIHRoZSBlbnRyYW5jZSBoYXMgcGxheWVkIHNvIGhvdmVyLA0KICAvLyB0b2dnbGVzIGFuZCBmaWx0ZXJzIHJlc3BvbmQgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkcy4NCiAgZnVuY3Rpb24gcmV2ZWFsKGdyb3VwLCBjb3VudCwgY2IpIHsNCiAgICBncm91cC5jbGFzc0xpc3QuYWRkKCdpbicpOw0KICAgIGlmIChjYikgY2IoKTsNCiAgICBpZiAoIW1vdGlvbikgeyBncm91cC5jbGFzc0xpc3QuYWRkKCdzZXR0bGVkJyk7IHJldHVybjsgfQ0KICAgIHZhciB3YWl0ID0gTWF0aC5taW4oY291bnQsIDMwKSAqIDQ1ICsgNzAwOw0KICAgIHZhciB0MCA9IHBlcmZvcm1hbmNlLm5vdygpOw0KICAgIChmdW5jdGlvbiB0aWNrKG5vdykgeyBpZiAobm93IC0gdDAgPj0gd2FpdCkgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnc2V0dGxlZCcpOyBlbHNlIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTsgfSkodDApOw0KICB9DQogIGZ1bmN0aW9uIG9ic2VydmUoaXRlbXMpIHsgLy8gaXRlbXM6IFtbbm9kZSwgZm5dXQ0KICAgIGlmICgnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykgew0KICAgICAgdmFyIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7DQogICAgICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbiAoZSkgew0KICAgICAgICAgIGlmICghZS5pc0ludGVyc2VjdGluZykgcmV0dXJuOw0KICAgICAgICAgIGlvLnVub2JzZXJ2ZShlLnRhcmdldCk7DQogICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaWYgKGl0WzBdID09PSBlLnRhcmdldCkgaXRbMV0oKTsgfSk7DQogICAgICAgIH0pOw0KICAgICAgfSwgeyB0aHJlc2hvbGQ6IDAuMDUgfSk7DQogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpby5vYnNlcnZlKGl0WzBdKTsgfSk7DQogICAgfSBlbHNlIHsNCiAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGl0WzFdKCk7IH0pOw0KICAgIH0NCiAgfQ0KICB2YXIgaGVhZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZWFkJyk7DQoNCiAgdmFyIERBVEEgPSB7DQogICAgc2VyaWVzOiBbDQogICAgICBbJ0dQVC02IFNvbCcsICdyZWYnXSwNCiAgICAgIFsnTWljcm9zb2Z0LURlY2lzaW9uLTEnLCAncHJpJ10NCiAgICBdLA0KICAgIGdyb3VwczogWw0KICAgICAgLy8gZGF0YXNldCwgdW5pdCwgW0dQVC02IFNvbCwgTUQxXSBtZWFuIG1zIHBlciByZXZpZXcsICJmYXN0ZXIiIGFubm90YXRpb24NCiAgICAgIFsnUmFjaW5nIFRpdGxlJywgJzc1MyByZXZpZXdzJywgWzI4MDAsIDE1OV0sICcxOCddLA0KICAgICAgWydGaXJzdC1QZXJzb24gU2hvb3RlcicsICczNDEgcmV2aWV3cycsIFsyNjAwLCAxODhdLCAnMTQnXSwNCiAgICAgIFsnU3R1ZGlvIExpdmVzdHJlYW0nLCAnMTAzMCBwb3N0cycsIFsyNjAwLCAxNDNdLCAnMTgnXQ0KICAgIF0sDQogICAgZG9tYWluOiBbNTAsIDEwMDAwXSwNCiAgICB0aWNrczogW1sxMDAsICcxMDAgbXMnXSwgWzEwMDAsICcxIHMnXSwgWzEwMDAwLCAnMTAgcyddXQ0KICB9Ow0KICBmdW5jdGlvbiBtcyh2KSB7IHJldHVybiB2ID49IDEwMDAgPyBmbXROKHYgLyAxMDAwLCAxKSArICcgcycgOiBNYXRoLnJvdW5kKHYpICsgJyBtcyc7IH0NCiAgZnVuY3Rpb24gcGN0KHYpIHsNCiAgICB2YXIgbG8gPSBNYXRoLmxvZyhEQVRBLmRvbWFpblswXSksIGhpID0gTWF0aC5sb2coREFUQS5kb21haW5bMV0pOw0KICAgIHJldHVybiBNYXRoLm1heCgwLCAoTWF0aC5sb2coTWF0aC5tYXgodiwgREFUQS5kb21haW5bMF0pKSAtIGxvKSAvIChoaSAtIGxvKSAqIDEwMCk7DQogIH0NCg0KICB2YXIgeWxpbmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3lsaW5lcycpOw0KICB2YXIgZ3JvdXBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dyb3VwcycpOw0KICB2YXIgeHJvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd4cm93Jyk7DQogIHZhciBjb3VudGVycyA9IFtdOw0KICB2YXIgayA9IDA7DQoNCiAgREFUQS50aWNrcy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7DQogICAgdmFyIHkgPSBlbCgnc3BhbicsICd5bCcpOyBzZXRWYXIoeSwgJy0tcCcsIHBjdCh0WzBdKSArICclJyk7DQogICAgeS5hcHBlbmRDaGlsZChlbCgnaScsIG51bGwsIHRbMV0pKTsgeWxpbmVzLmFwcGVuZENoaWxkKHkpOw0KICB9KTsNCiAgdmFyIGJhc2UgPSBlbCgnc3BhbicsICd5bCBiYXNlJyk7IHNldFZhcihiYXNlLCAnLS1wJywgJzAlJyk7IHlsaW5lcy5hcHBlbmRDaGlsZChiYXNlKTsNCg0KICBEQVRBLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChnLCBnaSkgew0KICAgIHZhciBncm91cCA9IGVsKCdkaXYnLCAnZ3JvdXAnKTsNCiAgICB2YXIgZ2xhYiA9IGVsKCdkaXYnLCAnZ2xhYicsIGdbMF0pOyBnbGFiLmFwcGVuZENoaWxkKGVsKCdzbWFsbCcsIG51bGwsIGdbMV0pKTsNCiAgICBncm91cC5hcHBlbmRDaGlsZChnbGFiKTsNCiAgICB2YXIgYW5ubyA9IGVsKCdkaXYnLCAnYW5ubycsICd+JyArIGdbM10gKyAnw5cgZmFzdGVyJyk7DQogICAgYW5uby5hcHBlbmRDaGlsZChlbCgnc21hbGwnLCBudWxsLCAnTWljcm9zb2Z0LURlY2lzaW9uLTEgdnMgR1BULTYgU29sJykpOw0KICAgIGdyb3VwLmFwcGVuZENoaWxkKGFubm8pOw0KICAgIHZhciBiYXJzID0gZWwoJ2RpdicsICdiYXJzJyk7DQogICAgREFUQS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocywgc2kpIHsNCiAgICAgIHZhciB2ID0gZ1syXVtzaV07DQogICAgICB2YXIgYmFyID0gZWwoJ2J1dHRvbicsICdiYXIgJyArIHNbMV0gKyAnIHMnICsgc2kpOyBiYXIudHlwZSA9ICdidXR0b24nOw0KICAgICAgc2V0VmFyKGJhciwgJy0tdicsIHBjdCh2KSArICclJyk7IHNldFZhcihiYXIsICctLWknLCBTdHJpbmcoaysrKSk7DQogICAgICBiYXIuZGF0YXNldC5nID0gU3RyaW5nKGdpKTsgYmFyLmRhdGFzZXQucyA9IFN0cmluZyhzaSk7DQogICAgICBiYXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc1swXSArICcsICcgKyBnWzBdICsgJzogJyArIG1zKHYpICsgJyBtZWFuIHRpbWUgcGVyIHJldmlldycpOw0KICAgICAgdmFyIGxhYiA9IGVsKCdzcGFuJywgJ2xhYicsIG1zKHYpKTsgY291bnRlcnMucHVzaChbbGFiLCB2XSk7DQogICAgICBiYXIuYXBwZW5kQ2hpbGQobGFiKTsgYmFycy5hcHBlbmRDaGlsZChiYXIpOw0KICAgIH0pOw0KICAgIGdyb3VwLmFwcGVuZENoaWxkKGJhcnMpOw0KICAgIGdyb3Vwcy5hcHBlbmRDaGlsZChncm91cCk7DQogICAgdmFyIHhsID0gZWwoJ2RpdicsICd4bCcsIGdbMF0pOyB4bC5hcHBlbmRDaGlsZChlbCgnc21hbGwnLCBudWxsLCBnWzFdKSk7DQogICAgeHJvdy5hcHBlbmRDaGlsZCh4bCk7DQogIH0pOw0KDQogIHZhciBsZWdlbmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVnZW5kJyk7DQogIHZhciBwbG90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bsb3QnKTsNCiAgREFUQS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbiAocywgc2kpIHsNCiAgICB2YXIgYiA9IGVsKCdidXR0b24nLCBudWxsKTsgYi50eXBlID0gJ2J1dHRvbic7DQogICAgYi5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsICdmYWxzZScpOyBiLmRhdGFzZXQucyA9IFN0cmluZyhzaSk7DQogICAgYi5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdzdyAnICsgc1sxXSkpOyBiLmFwcGVuZENoaWxkKGVsKCdzcGFuJywgbnVsbCwgc1swXSkpOw0KICAgIGxlZ2VuZC5hcHBlbmRDaGlsZChiKTsNCiAgfSk7DQogIHZhciBpc28gPSBudWxsOw0KICBsZWdlbmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkgew0KICAgIHZhciBiID0gZS50YXJnZXQuY2xvc2VzdCgnYnV0dG9uJyk7IGlmICghYikgcmV0dXJuOw0KICAgIGlzbyA9IGlzbyA9PT0gYi5kYXRhc2V0LnMgPyBudWxsIDogYi5kYXRhc2V0LnM7DQogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChsZWdlbmQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyksIGZ1bmN0aW9uICh4KSB7IHguc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB4LmRhdGFzZXQucyA9PT0gaXNvID8gJ3RydWUnIDogJ2ZhbHNlJyk7IH0pOw0KICAgIGxlZ2VuZC5jbGFzc0xpc3QudG9nZ2xlKCdpc28nLCBpc28gIT09IG51bGwpOw0KICAgIHBsb3QuY2xhc3NMaXN0LnRvZ2dsZSgnaXNvJywgaXNvICE9PSBudWxsKTsNCiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHBsb3QucXVlcnlTZWxlY3RvckFsbCgnLmJhcicpLCBmdW5jdGlvbiAoYmFyKSB7IGJhci5jbGFzc0xpc3QudG9nZ2xlKCdvbicsIGJhci5kYXRhc2V0LnMgPT09IGlzbyk7IH0pOw0KICB9KTsNCg0KICBiaW5kVGlwcygnLmJhcicsIGZ1bmN0aW9uIChiYXIpIHsNCiAgICB2YXIgZyA9IERBVEEuZ3JvdXBzWytiYXIuZGF0YXNldC5nXSwgc2kgPSArYmFyLmRhdGFzZXQucywgcyA9IERBVEEuc2VyaWVzW3NpXTsNCiAgICB2YXIgc3BlYyA9IHsgdGl0bGU6IHNbMF0gKyAnIMK3ICcgKyBnWzBdLCByb3dzOiBbWydNZWFuIHRpbWUgcGVyIHJldmlldycsIG1zKGdbMl1bc2ldKSwgc1sxXSA9PT0gJ3ByaScgPyAnaGknIDogJyddLCBbJ0RhdGFzZXQnLCBnWzFdXV0gfTsNCiAgICBzcGVjLm5vdGUgPSBzaSA9PT0gMSA/ICd+JyArIGdbM10gKyAnw5cgZmFzdGVyIHRoYW4gR1BULTYgU29sIG9uIHRoaXMgZGF0YXNldC4nIDogJ01lYW4gd2FsbC1jbG9jayB0aW1lIHRvIGNsYXNzaWZ5IG9uZSB0ZXh0Lic7DQogICAgcmV0dXJuIHNwZWM7DQogIH0sICdhYm92ZScpOw0KDQogIHZhciBjaGFydCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGFydCcpOw0KICBvYnNlcnZlKFsNCiAgICBbaGVhZCwgZnVuY3Rpb24gKCkgeyBoZWFkLmNsYXNzTGlzdC5hZGQoJ2luJyk7IH1dLA0KICAgIFtjaGFydCwgZnVuY3Rpb24gKCkgew0KICAgICAgcmV2ZWFsKGNoYXJ0LCBjb3VudGVycy5sZW5ndGgsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgY291bnRlcnMuZm9yRWFjaChmdW5jdGlvbiAoYykgeyBjb3VudFVwKGNbMF0sIGNbMV0sIG1zLCA4MDAsIDI1MCk7IH0pOw0KICAgICAgfSk7DQogICAgfV0NCiAgXSk7DQoNCn0pKCk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCg==
PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iZGVmYXVsdC1zcmMgJ25vbmUnOyBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJyAndW5zYWZlLWV2YWwnOyBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnOyBpbWctc3JjIGRhdGE6IGJsb2I6IGh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvOyBmb250LXNyYyBkYXRhOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb207IG1lZGlhLXNyYyBkYXRhOiBibG9iOiBodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC91cGxvYWRzLzsiPg0KPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4NCjx0aXRsZT5Db3N0IHBlciBydW48L3RpdGxlPg0KPHN0eWxlPg0KQGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvb2sub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo1MDA7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtTWVkaXVtLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiUFAgTmV1ZSBNb250cmVhbCI7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtZGlzcGxheTpzd2FwO3NyYzp1cmwoImh0dHBzOi8vY29tbWFuZGxpbmUubWljcm9zb2Z0LmNvbS93cC1jb250ZW50L3RoZW1lcy9jb21tYW5kLWxpbmUvYXNzZXRzL2ZvbnRzL1BQTmV1ZU1vbnRyZWFsLUJvbGQub3RmIikgZm9ybWF0KCJvcGVudHlwZSIpO31AZm9udC1mYWNle2ZvbnQtZmFtaWx5OiJQUCBOZXVlIE1vbnRyZWFsIjtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvUFBOZXVlTW9udHJlYWwtSXRhbGljLm90ZiIpIGZvcm1hdCgib3BlbnR5cGUiKTt9QGZvbnQtZmFjZXtmb250LWZhbWlseToiQ2FzY2FkaWEgQ29kZSI7Zm9udC13ZWlnaHQ6MjAwIDcwMDtmb250LXN0eWxlOm5vcm1hbDtmb250LWRpc3BsYXk6c3dhcDtzcmM6dXJsKCJodHRwczovL2NvbW1hbmRsaW5lLm1pY3Jvc29mdC5jb20vd3AtY29udGVudC90aGVtZXMvY29tbWFuZC1saW5lL2Fzc2V0cy9mb250cy9DYXNjYWRpYUNvZGUud29mZjIiKSBmb3JtYXQoIndvZmYyIik7fUBmb250LWZhY2V7Zm9udC1mYW1pbHk6IkNhc2NhZGlhIENvZGUiO2ZvbnQtd2VpZ2h0OjIwMCA3MDA7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC1kaXNwbGF5OnN3YXA7c3JjOnVybCgiaHR0cHM6Ly9jb21tYW5kbGluZS5taWNyb3NvZnQuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2NvbW1hbmQtbGluZS9hc3NldHMvZm9udHMvQ2FzY2FkaWFDb2RlSXRhbGljLndvZmYyIikgZm9ybWF0KCJ3b2ZmMiIpO30NCjpyb290IHsNCiAgLS1iZzogI2ZmZjsNCiAgLS1pbms6ICMwMDA7DQogIC0tbXV0ZWQ6ICM1NTU7DQogIC0tZmFpbnQ6ICNjOWM5Yzk7ICAgICAgICAvKiBzZWNvbmRhcnkgc2VyaWVzICovDQogIC0tZ29vZDogI0UzRjY3MTsgICAgICAgICAvKiBwcmltYXJ5IG1vZGVsIChzaXRlIGFjY2VudCBsaW1lKSAqLw0KICAtLWJhZDogI0ZGQTAzNzsgICAgICAgICAgLyogcHJpbWFyeSBtb2RlbCBiZWhpbmQgKHNpdGUgYWNjZW50IG9yYW5nZSkgKi8NCiAgLS1ydWxlOiAjMDAwOw0KICAtLXJ1bGUtc29mdDogI2U2ZTZlNjsNCiAgLS1ob3ZlcjogI2YzZjNmMzsNCiAgLS1iYWRnZS1iZzogIzAwMDsNCiAgLS1iYWRnZS1mZzogI2ZmZjsNCiAgLS10aXAtYmc6ICMwMDA7DQogIC0tdGlwLWZnOiAjZmZmOw0KICAtLXNhbnM6ICJQUCBOZXVlIE1vbnRyZWFsIiwgc2Fucy1zZXJpZjsNCiAgLS1tb25vOiAiQ2FzY2FkaWEgQ29kZSIsIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAiTGliZXJhdGlvbiBNb25vIiwgbW9ub3NwYWNlOw0KfQ0KaHRtbFtkYXRhLXRoZW1lPSJkYXJrIl0gew0KICAtLWJnOiAjMTExOw0KICAtLWluazogI2ZmZjsNCiAgLS1tdXRlZDogIzk5OTsNCiAgLS1mYWludDogIzQ0NDsNCiAgLS1ydWxlOiAjZmZmOw0KICAtLXJ1bGUtc29mdDogIzJhMmEyYTsNCiAgLS1ob3ZlcjogIzFmMWYxZjsNCiAgLS1iYWRnZS1iZzogI2ZmZjsNCiAgLS1iYWRnZS1mZzogIzExMTsNCiAgLS10aXAtYmc6ICNmZmY7DQogIC0tdGlwLWZnOiAjMTExOw0KfQ0KDQoqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KYm9keSB7DQogIG1hcmdpbjogMDsNCiAgYmFja2dyb3VuZDogdmFyKC0tYmcpOw0KICBjb2xvcjogdmFyKC0taW5rKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLXNhbnMpOw0KICBmb250LXNpemU6IDE1cHg7DQogIGxpbmUtaGVpZ2h0OiAxLjQ1Ow0KICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsNCn0NCi53cmFwIHsgcG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nOiAycHggMCA2cHg7IH0NCi5udW0geyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7IH0NCi5rIHsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDExcHg7DQogIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogIGNvbG9yOiB2YXIoLS1tdXRlZCk7DQp9DQpidXR0b24geyBmb250OiBpbmhlcml0OyBjb2xvcjogaW5oZXJpdDsgYmFja2dyb3VuZDogbm9uZTsgYm9yZGVyOiAwOyBwYWRkaW5nOiAwOyBjdXJzb3I6IHBvaW50ZXI7IH0NCmJ1dHRvbjpmb2N1cy12aXNpYmxlLCBbdGFiaW5kZXhdOmZvY3VzLXZpc2libGUgeyBvdXRsaW5lOiAycHggc29saWQgdmFyKC0taW5rKTsgb3V0bGluZS1vZmZzZXQ6IDJweDsgfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBIZWFkZXIgPT09PT09PT09PT09PT09PT0gKi8NCi5oZWFkIHsgbWFyZ2luLWJvdHRvbTogMjhweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQouYmFkZ2Ugew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBhZGRpbmc6IDRweCA4cHg7DQogIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWJnKTsNCiAgY29sb3I6IHZhcigtLWJhZGdlLWZnKTsNCiAgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOw0KICBmb250LXNpemU6IDEwcHg7DQogIGxpbmUtaGVpZ2h0OiAxOw0KICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOw0KfQ0KaDEgew0KICBtYXJnaW46IDE4cHggMCA4cHg7DQogIGZvbnQtc2l6ZTogY2xhbXAoMjRweCwgNC4ydncsIDMycHgpOw0KICBmb250LXdlaWdodDogNTAwOw0KICBsZXR0ZXItc3BhY2luZzogLTAuMDE1ZW07DQogIGxpbmUtaGVpZ2h0OiAxLjEyOw0KfQ0KLnN1YiB7IG1hcmdpbjogMCBhdXRvOyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1heC13aWR0aDogNjJjaDsgfQ0KLnN1YiAuZGlyIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA1MDA7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTGVnZW5kIC8gdG9nZ2xlcyA9PT09PT09PT09PT09PT09PSAqLw0KLmNvbnRyb2xzIHsNCiAgZGlzcGxheTogZmxleDsNCiAgZmxleC13cmFwOiB3cmFwOw0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogIGdhcDogMTBweCAyNHB4Ow0KICBtYXJnaW4tYm90dG9tOiAxOHB4Ow0KfQ0KLmxlZ2VuZCB7IGRpc3BsYXk6IGZsZXg7IGZsZXgtd3JhcDogd3JhcDsgZ2FwOiA0cHggNnB4OyB9DQoubGVnZW5kIGJ1dHRvbiwgLnRvZ2dsZSBidXR0b24gew0KICBkaXNwbGF5OiBpbmxpbmUtZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgZ2FwOiA4cHg7DQogIHBhZGRpbmc6IDVweCAxMXB4Ow0KICBmb250LXNpemU6IDEzcHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJ1bGUtc29mdCk7DQogIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOw0KfQ0KLmxlZ2VuZCBidXR0b246aG92ZXIsIC50b2dnbGUgYnV0dG9uOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXSB7IGJvcmRlci1jb2xvcjogdmFyKC0taW5rKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQ0KLmxlZ2VuZCAuc3cgeyB3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4OyBmbGV4OiAwIDAgMTBweDsgfQ0KLmxlZ2VuZCAuc3cucHJpIHsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IH0NCi5sZWdlbmQgLnN3LnJlZiB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5sZWdlbmQgLnN3Lm90aCB7IGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsgfQ0KLmxlZ2VuZC5pc28gYnV0dG9uOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgb3BhY2l0eTogMC40NTsgfQ0KLmxlZ2VuZCBidXR0b25bYXJpYS1wcmVzc2VkPSJ0cnVlIl06OmFmdGVyIHsgY29udGVudDogIsK3IGNsaWNrIHRvIGNsZWFyIjsgZm9udC13ZWlnaHQ6IDQwMDsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLnRvZ2dsZSB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNHB4OyB9DQoudG9nZ2xlIC5rIHsgbWFyZ2luLXJpZ2h0OiA4cHg7IH0NCi50b2dnbGUgYnV0dG9uW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLWJnKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1pbmspOyB9DQoNCi8qID09PT09PT09PT09PT09PT09IE5vdGVzIC8gc291cmNlID09PT09PT09PT09PT09PT09ICovDQoubm90ZSB7IG1hcmdpbjogMTZweCAwIDA7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuNTsgY29sb3I6IHZhcigtLW11dGVkKTsgfQ0KLm5vdGUgLm51bSB7IGNvbG9yOiB2YXIoLS1pbmspOyB9DQouc291cmNlIHsgbWFyZ2luLXRvcDogMzJweDsgcGFkZGluZy10b3A6IDE0cHg7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ydWxlLXNvZnQpOyBmb250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB9DQouc291cmNlIHAgeyBtYXJnaW46IDAgMCA0cHg7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gVG9vbHRpcCA9PT09PT09PT09PT09PT09PSAqLw0KLnRpcCB7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgei1pbmRleDogMjsNCiAgbWF4LXdpZHRoOiAzMDBweDsNCiAgcGFkZGluZzogMTBweCAxMnB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS10aXAtYmcpOw0KICBjb2xvcjogdmFyKC0tdGlwLWZnKTsNCiAgZm9udC1zaXplOiAxM3B4Ow0KICBsaW5lLWhlaWdodDogMS40Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgb3BhY2l0eTogMDsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjEycyBlYXNlOw0KfQ0KLnRpcC5zaG93IHsgb3BhY2l0eTogMTsgfQ0KLnRpcCAudCB7IGZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1ib3R0b206IDZweDsgfQ0KLnRpcCAuciB7IGRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgZ2FwOiAxNnB4OyB9DQoudGlwIC5yICsgLnIgeyBtYXJnaW4tdG9wOiAycHg7IH0NCi50aXAgLnIuaGkgeyBmb250LXdlaWdodDogNzAwOyB9DQoudGlwIC5yLmhpID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgY29udGVudDogIiI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgd2lkdGg6IDhweDsgaGVpZ2h0OiA4cHg7IG1hcmdpbi1yaWdodDogOHB4OyB2ZXJ0aWNhbC1hbGlnbjogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1nb29kKTsgfQ0KLnRpcCAuci5oaS5iID4gc3BhbjpmaXJzdC1jaGlsZDo6YmVmb3JlIHsgYmFja2dyb3VuZDogdmFyKC0tYmFkKTsgfQ0KLnRpcCAucyB7IG1hcmdpbi10b3A6IDhweDsgcGFkZGluZy10b3A6IDZweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS10aXAtZmcpIDI1JSwgdHJhbnNwYXJlbnQpOyBmb250LXNpemU6IDEycHg7IG9wYWNpdHk6IDAuODU7IH0NCg0KLyogPT09PT09PT09PT09PT09PT0gTW90aW9uIChzaGFyZWQpID09PT09PT09PT09PT09PT09ICovDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHsNCiAgLmhlYWQgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KTsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UsIHRyYW5zZm9ybSAwLjVzIGVhc2U7IH0NCiAgLmhlYWQuaW4geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0NCn0NCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7DQogICogeyB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IH0NCn0NCkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgew0KICAuaGVhZCB7IG1hcmdpbi1ib3R0b206IDIycHg7IH0NCiAgLnN1YiB7IGZvbnQtc2l6ZTogMTVweDsgfQ0KICAubGVnZW5kIGJ1dHRvblthcmlhLXByZXNzZWQ9InRydWUiXTo6YWZ0ZXIgeyBjb250ZW50OiAiwrcgdGFwIHRvIGNsZWFyIjsgfQ0KfQ0KDQovKiA9PT09PT09PT09PT09PT09PSBWZXJ0aWNhbCBncm91cGVkIGJhcnMgPT09PT09PT09PT09PT09PT0gKi8NCi5wYW5lbHMgeyBkaXNwbGF5OiBncmlkOyBnYXA6IDI4cHggMzJweDsgfQ0KLnBhbmVsIHsgbWluLXdpZHRoOiAwOyB9DQoucHRpdGxlIHsgbWFyZ2luOiAwIDAgMTRweDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNTAwOyBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsgfQ0KLnB0aXRsZSAucG0geyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLWxlZnQ6IDhweDsgfQ0KLnBsb3QsIC54bGFiZWxzIHsgLS15dzogNDRweDsgfQ0KLnBsb3QgeyAtLWg6IDI4MHB4OyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHZhcigtLXl3KSBtaW5tYXgoMCwgMWZyKTsgfQ0KLmFyZWEgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogdmFyKC0taCk7IGdyaWQtY29sdW1uOiAyOyB9DQoueWxpbmVzIHsgcG9zaXRpb246IGFic29sdXRlOyBpbnNldDogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IH0NCi55bCB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogdmFyKC0tcCk7IGhlaWdodDogMXB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1ydWxlLXNvZnQpOyB9DQoueWwuYmFzZSB7IGJhY2tncm91bmQ6IHZhcigtLXJ1bGUpOyB6LWluZGV4OiAxOyB9DQoueWwgaSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IGNhbGMoMTAwJSArIDhweCk7IHRvcDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGxldHRlci1zcGFjaW5nOiAwLjA0ZW07IGNvbG9yOiB2YXIoLS1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH0NCi5ncm91cHMgeyBwb3NpdGlvbjogYWJzb2x1dGU7IGluc2V0OiAwOyBkaXNwbGF5OiBmbGV4OyB9DQouYmFycyB7IGRpc3BsYXk6IGNvbnRlbnRzOyB9DQouZ3JvdXAgeyBwb3NpdGlvbjogcmVsYXRpdmU7IGZsZXg6IDEgMSAwOyBtaW4td2lkdGg6IDA7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDogNHB4OyBwYWRkaW5nOiAwIDUlOyB9DQouYW5ubyB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsgbGluZS1oZWlnaHQ6IDEuMzsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgfQ0KLmFubm8gc21hbGwgeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxMHB4OyBmb250LXdlaWdodDogNDAwOyBsZXR0ZXItc3BhY2luZzogMC4wNGVtOyBjb2xvcjogdmFyKC0tbXV0ZWQpOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyB9DQouYmFyIHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBmbGV4OiAwIDEgdmFyKC0tYncsIDQ0cHgpOw0KICBtaW4td2lkdGg6IDEwcHg7DQogIGhlaWdodDogdmFyKC0tdik7DQogIGJhY2tncm91bmQ6IHZhcigtLWZhaW50KTsNCiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7DQp9DQouYmFyLnByaSB7IGJhY2tncm91bmQ6IHZhcigtLWdvb2QpOyB9DQouYmFyLnJlZiB7IGJhY2tncm91bmQ6IHZhcigtLWluayk7IH0NCi5iYXI6aG92ZXIsIC5iYXIuaG90IHsgZmlsdGVyOiBicmlnaHRuZXNzKDAuOTIpOyB9DQpodG1sW2RhdGEtdGhlbWU9ImRhcmsiXSAuYmFyOmhvdmVyLCBodG1sW2RhdGEtdGhlbWU9ImRhcmsiXSAuYmFyLmhvdCB7IGZpbHRlcjogYnJpZ2h0bmVzcygxLjI1KTsgfQ0KLmJhciAubGFiIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBib3R0b206IDEwMCU7DQogIGxlZnQ6IDUwJTsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOw0KICBtYXJnaW4tYm90dG9tOiA1cHg7DQogIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogIGZvbnQtZmFtaWx5OiB2YXIoLS1tb25vKTsNCiAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsNCiAgZm9udC1zaXplOiAxMnB4Ow0KICBjb2xvcjogdmFyKC0tbXV0ZWQpOw0KfQ0KLmJhci5wcmkgLmxhYiwgLmJhci5yZWYgLmxhYiB7IGNvbG9yOiB2YXIoLS1pbmspOyBmb250LXdlaWdodDogNzAwOyB9DQoucGxvdC5pc28gLmJhcjpub3QoLm9uKSB7IG9wYWNpdHk6IDAuMTg7IH0NCi5wbG90LmlzbyAuYmFyOm5vdCgub24pIC5sYWIgeyBvcGFjaXR5OiAwLjY7IH0NCi54bGFiZWxzIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiB2YXIoLS15dykgbWlubWF4KDAsIDFmcik7IG1hcmdpbi10b3A6IDhweDsgfQ0KLnhyb3cgeyBncmlkLWNvbHVtbjogMjsgZGlzcGxheTogZmxleDsgfQ0KLnhsIHsgZmxleDogMSAxIDA7IG1pbi13aWR0aDogMDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDEzLjVweDsgZm9udC13ZWlnaHQ6IDUwMDsgbGluZS1oZWlnaHQ6IDEuMzsgcGFkZGluZzogMCA0cHg7IH0NCi54bCBzbWFsbCB7IGRpc3BsYXk6IGJsb2NrOyBmb250LWZhbWlseTogdmFyKC0tbW9ubyk7IGZvbnQtc2l6ZTogMTFweDsgZm9udC13ZWlnaHQ6IDQwMDsgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsgY29sb3I6IHZhcigtLW11dGVkKTsgbWFyZ2luLXRvcDogMnB4OyB9DQoueHRpdGxlIHsgZ3JpZC1jb2x1bW46IDI7IHRleHQtYWxpZ246IGNlbnRlcjsgbWFyZ2luLXRvcDogMTBweDsgfQ0KLmdsYWIgeyBkaXNwbGF5OiBub25lOyB9DQoNCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgew0KICAucmV2ZWFsIC5iYXIgeyB0cmFuc2Zvcm06IHNjYWxlWSgwKTsgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGJvdHRvbTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNnMgY3ViaWMtYmV6aWVyKDAuMjE1LCAwLjYxLCAwLjM1NSwgMSksIG9wYWNpdHkgMC4ycyBlYXNlOyB0cmFuc2l0aW9uLWRlbGF5OiBjYWxjKHZhcigtLWksIDApICogNDBtcyk7IH0NCiAgLnJldmVhbC5pbiAuYmFyIHsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwgLmJhciAubGFiIHsgb3BhY2l0eTogMDsgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjRzIGVhc2U7IHRyYW5zaXRpb24tZGVsYXk6IGNhbGModmFyKC0taSwgMCkgKiA0MG1zICsgMzAwbXMpOyB9DQogIC5yZXZlYWwuaW4gLmJhciAubGFiIHsgb3BhY2l0eTogMTsgfQ0KICAucmV2ZWFsIC5hbm5vIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IHRyYW5zaXRpb246IG9wYWNpdHkgMC40cyBlYXNlIDAuNXMsIHRyYW5zZm9ybSAwLjRzIGVhc2UgMC41czsgfQ0KICAucmV2ZWFsLmluIC5hbm5vIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBub25lOyB9DQogIC5yZXZlYWwuaW4uc2V0dGxlZCAuYmFyLCAucmV2ZWFsLmluLnNldHRsZWQgLmJhciAubGFiIHsgdHJhbnNpdGlvbi1kZWxheTogMHM7IH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7DQogIC5mbGlwIC5wbG90IHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0NCiAgLmZsaXAgLmFyZWEgeyBncmlkLWNvbHVtbjogMTsgaGVpZ2h0OiBhdXRvOyBtYXJnaW4tYm90dG9tOiAyNnB4OyB9DQogIC5mbGlwIC55bGluZXMgeyBpbnNldDogMCB2YXIoLS1oZywgNTZweCkgMCAwOyB9DQogIC5mbGlwIC55bCB7IGxlZnQ6IHZhcigtLXApOyByaWdodDogYXV0bzsgdG9wOiAwOyBib3R0b206IDA7IHdpZHRoOiAxcHg7IGhlaWdodDogYXV0bzsgfQ0KICAuZmxpcCAueWwgaSB7IHJpZ2h0OiBhdXRvOyBsZWZ0OiA1MCU7IHRvcDogY2FsYygxMDAlICsgNnB4KTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOyB9DQogIC5mbGlwIC5ncm91cHMgeyBwb3NpdGlvbjogc3RhdGljOyBkaXNwbGF5OiBibG9jazsgcGFkZGluZy1yaWdodDogdmFyKC0taGcsIDU2cHgpOyB9DQogIC5mbGlwIC5ncm91cCB7IGRpc3BsYXk6IGJsb2NrOyBwYWRkaW5nOiAwIDAgMThweDsgfQ0KICAuZmxpcCAuZ3JvdXA6bGFzdC1jaGlsZCB7IHBhZGRpbmctYm90dG9tOiAwOyB9DQogIC5mbGlwIC5hbm5vIHsgcG9zaXRpb246IHN0YXRpYzsgdGV4dC1hbGlnbjogbGVmdDsgbWFyZ2luOiAycHggMCA2cHg7IH0NCiAgLmZsaXAgLmFubm8gc21hbGwgeyBkaXNwbGF5OiBpbmxpbmU7IG1hcmdpbi1sZWZ0OiA2cHg7IH0NCiAgLmZsaXAgLmJhcnMgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDRweDsgfQ0KICAuZmxpcCAuYmFyIHsgZmxleDogbm9uZTsgd2lkdGg6IHZhcigtLXYpOyBoZWlnaHQ6IDE2cHg7IG1pbi13aWR0aDogMnB4OyB9DQogIC5mbGlwIC5iYXIgLmxhYiB7IGJvdHRvbTogYXV0bzsgbGVmdDogMTAwJTsgdG9wOiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsgbWFyZ2luOiAwIDAgMCA2cHg7IH0NCiAgLmZsaXAgLnhsYWJlbHMgeyBkaXNwbGF5OiBub25lOyB9DQogIC5mbGlwIC5nbGFiIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMCAwIDZweDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyB9DQogIC5mbGlwIC5nbGFiIHNtYWxsIHsgZm9udC1mYW1pbHk6IHZhcigtLW1vbm8pOyBmb250LXNpemU6IDExcHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGNvbG9yOiB2YXIoLS1tdXRlZCk7IG1hcmdpbi1sZWZ0OiA4cHg7IH0NCiAgLmZsaXAgLmJhcnMgeyBtYXJnaW4tdG9wOiAycHg7IH0NCiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7DQogICAgLnJldmVhbC5mbGlwIC5iYXIgeyB0cmFuc2Zvcm06IHNjYWxlWCgwKTsgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCBjZW50ZXI7IH0NCiAgICAucmV2ZWFsLmZsaXAuaW4gLmJhciB7IHRyYW5zZm9ybTogbm9uZTsgfQ0KICB9DQp9DQoNCi5wbG90IHsgLS1oOiAzMDBweDsgfSAucGxvdCwgLnhsYWJlbHMgeyAtLXl3OiA0OHB4OyB9DQouZ3JvdXAgeyBwYWRkaW5nOiAwIDQlOyBnYXA6IDVweDsgfQ0KLmJhciB7IC0tYnc6IDU0cHg7IH0NCkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgeyAucGxvdCB7IC0taDogMjYwcHg7IH0gLmFubm8gc21hbGwgeyBkaXNwbGF5OiBub25lOyB9IC5iYXIgLmxhYiB7IGZvbnQtc2l6ZTogMTFweDsgfSB9DQpAbWVkaWEgKG1heC13aWR0aDogNzAwcHgpIHsgLnhsIHsgZm9udC1zaXplOiAxMi41cHg7IH0gLmFubm8geyBmb250LXNpemU6IDExcHg7IH0gfQ0KQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7IC5hbm5vIHNtYWxsIHsgZGlzcGxheTogaW5saW5lOyB9IH0NCjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCjxkaXYgY2xhc3M9IndyYXAiIGlkPSJyb290Ij4NCiAgPGhlYWRlciBjbGFzcz0iaGVhZCI+DQogICAgPHNwYW4gY2xhc3M9ImJhZGdlIj5Db3N0PC9zcGFuPg0KICAgIDxoMT5Db3N0IHBlciBydW48L2gxPg0KICAgIDxwIGNsYXNzPSJzdWIiPk1pY3Jvc29mdC1EZWNpc2lvbi0xIGNsYXNzaWZpZXMgdGhlIHNhbWUgdGV4dHMgZm9yIGEgc21hbGwgZnJhY3Rpb24gb2YgdGhlIGNvc3Qgb2YgR1BULTYgU29sLjwvcD4NCiAgPC9oZWFkZXI+DQoNCiAgPGRpdiBjbGFzcz0iY29udHJvbHMiPg0KICAgIDxkaXYgY2xhc3M9ImsiPkNvc3QgdG8gY2xhc3NpZnkgdGhlIHdob2xlIGRhdGFzZXQgb25jZSDCtyBsb2cgc2NhbGUgKFVTRCk8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJsZWdlbmQiIGlkPSJsZWdlbmQiIHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJIaWdobGlnaHQgYSBtb2RlbCI+PC9kaXY+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJyZXZlYWwgZmxpcCIgaWQ9ImNoYXJ0Ij4NCiAgICA8ZGl2IGNsYXNzPSJwbG90IiBpZD0icGxvdCI+DQogICAgICA8ZGl2IGNsYXNzPSJhcmVhIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ieWxpbmVzIiBpZD0ieWxpbmVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9kaXY+DQogICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwcyIgaWQ9Imdyb3VwcyI+PC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJ4bGFiZWxzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PGRpdj48L2Rpdj48ZGl2IGNsYXNzPSJ4cm93IiBpZD0ieHJvdyI+PC9kaXY+PC9kaXY+DQogIDwvZGl2Pg0KICA8cCBjbGFzcz0ibm90ZSI+QmFycyBhcmUgb24gYSBsb2cgc2NhbGUsIHNvIGVhY2ggZ3JpZGxpbmUgaXMgYSB0ZW5mb2xkIGNoYW5nZSBpbiBjb3N0LjwvcD4NCiAgPGRpdiBjbGFzcz0ic291cmNlIj4NCiAgICA8cD5Fc3RpbWF0ZWQuIEJvdGggcmVhZCB0aGUgaWRlbnRpY2FsIGJyaWVmLCBzbyBpbnB1dCB0b2tlbnMgbWF0Y2g7IG9ubHkgR1BULTYgU29sIGFsc28gcGF5cyBmb3Igb3V0cHV0LjwvcD4NCiAgICA8cD5TY2FsZWQgdG8gMSwwMDAsMDAwIHRleHRzOiBHUFQtNiBTb2wgYWJvdXQgPHNwYW4gY2xhc3M9Im51bSI+JDIsNDM0PC9zcGFuPiwgTWljcm9zb2Z0LURlY2lzaW9uLTEgYWJvdXQgPHNwYW4gY2xhc3M9Im51bSI+JDExPC9zcGFuPi48L3A+DQogIDwvZGl2Pg0KDQogIDxkaXYgY2xhc3M9InRpcCIgaWQ9InRpcCIgcm9sZT0idG9vbHRpcCIgYXJpYS1oaWRkZW49InRydWUiPjwvZGl2Pg0KPC9kaXY+DQo8c2NyaXB0Pg0KKGZ1bmN0aW9uICgpIHsNCiAgdmFyIG1vdGlvbiA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSknKS5tYXRjaGVzOw0KICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290Jyk7DQogIHZhciB0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGlwJyk7DQoNCiAgZnVuY3Rpb24gZWwodGFnLCBjbHMsIHRleHQpIHsNCiAgICB2YXIgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTsNCiAgICBpZiAoY2xzKSBuLmNsYXNzTmFtZSA9IGNsczsNCiAgICBpZiAodGV4dCAhPT0gdW5kZWZpbmVkICYmIHRleHQgIT09IG51bGwpIG4udGV4dENvbnRlbnQgPSB0ZXh0Ow0KICAgIHJldHVybiBuOw0KICB9DQogIGZ1bmN0aW9uIHNldFZhcihuLCBrLCB2KSB7IG4uc3R5bGUuc2V0UHJvcGVydHkoaywgdik7IH0NCiAgZnVuY3Rpb24gZm10TihuLCBkKSB7IHJldHVybiBuLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBkLCBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IGQgfSk7IH0NCg0KICAvLyAtLS0tIFRvb2x0aXAgKGhvdmVyLCBrZXlib2FyZCBmb2N1cyBhbmQgdGFwKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIGhvdCA9IG51bGw7DQogIGZ1bmN0aW9uIHJlbmRlclRpcChzcGVjKSB7DQogICAgdGlwLmlubmVySFRNTCA9ICcnOw0KICAgIGlmIChzcGVjLnRpdGxlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICd0Jywgc3BlYy50aXRsZSkpOw0KICAgIChzcGVjLnJvd3MgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHIpIHsNCiAgICAgIHZhciByb3cgPSBlbCgnZGl2JywgJ3InICsgKHJbMl0gPyAnICcgKyByWzJdIDogJycpKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsIG51bGwsIHJbMF0pKTsNCiAgICAgIHJvdy5hcHBlbmRDaGlsZChlbCgnc3BhbicsICdudW0nLCByWzFdKSk7DQogICAgICB0aXAuYXBwZW5kQ2hpbGQocm93KTsNCiAgICB9KTsNCiAgICBpZiAoc3BlYy5ub3RlKSB0aXAuYXBwZW5kQ2hpbGQoZWwoJ2RpdicsICdzJywgc3BlYy5ub3RlKSk7DQogIH0NCiAgZnVuY3Rpb24gcGxhY2VUaXAobm9kZSwgcHJlZmVyKSB7DQogICAgdmFyIHJyID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgICB2YXIgbnIgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOw0KICAgIHZhciB0dyA9IHRpcC5vZmZzZXRXaWR0aCwgdGggPSB0aXAub2Zmc2V0SGVpZ2h0Ow0KICAgIHZhciBsZWZ0ID0gbnIubGVmdCAtIHJyLmxlZnQgKyAocHJlZmVyID09PSAnYWJvdmUnID8gbnIud2lkdGggLyAyIC0gdHcgLyAyIDogMCk7DQogICAgbGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGxlZnQsIHJyLndpZHRoIC0gdHcpKTsNCiAgICB2YXIgYmVsb3cgPSBuci5ib3R0b20gLSByci50b3AgKyA2Ow0KICAgIHZhciBhYm92ZSA9IG5yLnRvcCAtIHJyLnRvcCAtIHRoIC0gKHByZWZlciA9PT0gJ2Fib3ZlJyA/IDI2IDogNik7DQogICAgdmFyIHRvcDsNCiAgICBpZiAocHJlZmVyID09PSAnYWJvdmUnKSB0b3AgPSBhYm92ZSA+PSAwID8gYWJvdmUgOiBNYXRoLm1pbihiZWxvdywgcnIuaGVpZ2h0IC0gdGgpOw0KICAgIGVsc2UgdG9wID0gKGJlbG93ICsgdGggPD0gcnIuaGVpZ2h0KSA/IGJlbG93IDogTWF0aC5tYXgoMCwgYWJvdmUpOw0KICAgIC8vIFN0YXkgaW5zaWRlIHRoZSB3aWRnZXQgc28gdGhlIGF1dG8tc2l6ZWQgZnJhbWUgbmV2ZXIgY2xpcHMgdGhlIHRpcC4NCiAgICB0aXAuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnOw0KICAgIHRpcC5zdHlsZS50b3AgPSBNYXRoLm1heCgwLCB0b3ApICsgJ3B4JzsNCiAgfQ0KICBmdW5jdGlvbiBzaG93VGlwKG5vZGUsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBpZiAoaG90ID09PSBub2RlKSByZXR1cm47DQogICAgaGlkZVRpcCgpOw0KICAgIGhvdCA9IG5vZGU7DQogICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdob3QnKTsNCiAgICByZW5kZXJUaXAoYnVpbGQobm9kZSkpOw0KICAgIHRpcC5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7DQogICAgdGlwLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTsNCiAgICBwbGFjZVRpcChub2RlLCBwcmVmZXIpOw0KICB9DQogIGZ1bmN0aW9uIGhpZGVUaXAoKSB7DQogICAgaWYgKGhvdCkgaG90LmNsYXNzTGlzdC5yZW1vdmUoJ2hvdCcpOw0KICAgIGhvdCA9IG51bGw7DQogICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsNCiAgICB0aXAuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7DQogIH0NCiAgZnVuY3Rpb24gYmluZFRpcHMoc2VsZWN0b3IsIGJ1aWxkLCBwcmVmZXIpIHsNCiAgICBmdW5jdGlvbiBmaW5kKHQpIHsNCiAgICAgIHZhciBuID0gdDsNCiAgICAgIHdoaWxlIChuICYmIG4gIT09IHJvb3QpIHsNCiAgICAgICAgaWYgKG4ubWF0Y2hlcyAmJiBuLm1hdGNoZXMoc2VsZWN0b3IpKSByZXR1cm4gbjsNCiAgICAgICAgbiA9IG4ucGFyZW50Tm9kZTsNCiAgICAgIH0NCiAgICAgIHJldHVybiBudWxsOw0KICAgIH0NCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuKSBzaG93VGlwKG4sIGJ1aWxkLCBwcmVmZXIpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgZnVuY3Rpb24gKGUpIHsgdmFyIG4gPSBmaW5kKGUudGFyZ2V0KTsgaWYgKG4gJiYgIW4uY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgaGlkZVRpcCgpOyB9KTsNCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoZSkgeyB2YXIgbiA9IGZpbmQoZS50YXJnZXQpOyBpZiAobikgc2hvd1RpcChuLCBidWlsZCwgcHJlZmVyKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIGZ1bmN0aW9uIChlKSB7IHZhciBuID0gZmluZChlLnRhcmdldCk7IGlmIChuICYmICFuLmNvbnRhaW5zKGUucmVsYXRlZFRhcmdldCkpIGhpZGVUaXAoKTsgfSk7DQogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgaGlkZVRpcCgpOyB9KTsNCiAgfQ0KDQogIC8vIC0tLS0gQ291bnQtdXAgKHZpc2liaWxpdHktdHJpZ2dlcmVkIHZpYSByZXZlYWwpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIEVBU0UgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCAzKTsgfTsNCiAgZnVuY3Rpb24gY291bnRVcChub2RlLCB0bywgZm10LCBtcywgZGVsYXkpIHsNCiAgICBpZiAoIW1vdGlvbikgeyBub2RlLnRleHRDb250ZW50ID0gZm10KHRvKTsgcmV0dXJuOyB9DQogICAgdmFyIHN0YXJ0ID0gbnVsbDsNCiAgICBub2RlLnRleHRDb250ZW50ID0gZm10KDApOw0KICAgIGZ1bmN0aW9uIGZyYW1lKG5vdykgew0KICAgICAgaWYgKHN0YXJ0ID09PSBudWxsKSBzdGFydCA9IG5vdyArIChkZWxheSB8fCAwKTsNCiAgICAgIHZhciB0ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKG5vdyAtIHN0YXJ0KSAvIG1zKSk7DQogICAgICBub2RlLnRleHRDb250ZW50ID0gZm10KHRvICogRUFTRSh0KSk7DQogICAgICBpZiAodCA8IDEpIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogICAgfQ0KICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmcmFtZSk7DQogIH0NCg0KICAvLyAtLS0tIFJldmVhbCAoSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgb25seTsgbm8gdGltZXJzIHN0YXJ0IGFueXRoaW5nKSAtLS0tLS0NCiAgLy8gYHNldHRsZWRgIHJlbW92ZXMgc3RhZ2dlciBkZWxheXMgb25jZSB0aGUgZW50cmFuY2UgaGFzIHBsYXllZCBzbyBob3ZlciwNCiAgLy8gdG9nZ2xlcyBhbmQgZmlsdGVycyByZXNwb25kIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuDQogIGZ1bmN0aW9uIHJldmVhbChncm91cCwgY291bnQsIGNiKSB7DQogICAgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnaW4nKTsNCiAgICBpZiAoY2IpIGNiKCk7DQogICAgaWYgKCFtb3Rpb24pIHsgZ3JvdXAuY2xhc3NMaXN0LmFkZCgnc2V0dGxlZCcpOyByZXR1cm47IH0NCiAgICB2YXIgd2FpdCA9IE1hdGgubWluKGNvdW50LCAzMCkgKiA0NSArIDcwMDsNCiAgICB2YXIgdDAgPSBwZXJmb3JtYW5jZS5ub3coKTsNCiAgICAoZnVuY3Rpb24gdGljayhub3cpIHsgaWYgKG5vdyAtIHQwID49IHdhaXQpIGdyb3VwLmNsYXNzTGlzdC5hZGQoJ3NldHRsZWQnKTsgZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7IH0pKHQwKTsNCiAgfQ0KICBmdW5jdGlvbiBvYnNlcnZlKGl0ZW1zKSB7IC8vIGl0ZW1zOiBbW25vZGUsIGZuXV0NCiAgICBpZiAoJ0ludGVyc2VjdGlvbk9ic2VydmVyJyBpbiB3aW5kb3cpIHsNCiAgICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbiAoZW50cmllcykgew0KICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICBpZiAoIWUuaXNJbnRlcnNlY3RpbmcpIHJldHVybjsNCiAgICAgICAgICBpby51bm9ic2VydmUoZS50YXJnZXQpOw0KICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0KSB7IGlmIChpdFswXSA9PT0gZS50YXJnZXQpIGl0WzFdKCk7IH0pOw0KICAgICAgICB9KTsNCiAgICAgIH0sIHsgdGhyZXNob2xkOiAwLjA1IH0pOw0KICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXQpIHsgaW8ub2JzZXJ2ZShpdFswXSk7IH0pOw0KICAgIH0gZWxzZSB7DQogICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChpdCkgeyBpdFsxXSgpOyB9KTsNCiAgICB9DQogIH0NCiAgdmFyIGhlYWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGVhZCcpOw0KDQogIHZhciBEQVRBID0gew0KICAgIHNlcmllczogWw0KICAgICAgWydHUFQtNiBTb2wnLCAncmVmJ10sDQogICAgICBbJ01pY3Jvc29mdC1EZWNpc2lvbi0xJywgJ3ByaSddDQogICAgXSwNCiAgICBncm91cHM6IFsNCiAgICAgIC8vIGRhdGFzZXQsIHVuaXQsIFtHUFQtNiBTb2wsIE1EMV0gVVNELCAiY2hlYXBlciIgYW5ub3RhdGlvbg0KICAgICAgWydSYWNpbmcgVGl0bGUnLCAnNzUzIHJldmlld3MnLCBbMS44MywgMC4wMDldLCAnMjEzJ10sDQogICAgICBbJ0ZpcnN0LVBlcnNvbiBTaG9vdGVyJywgJzM0MSByZXZpZXdzJywgWzEuMDMsIDAuMDA1XSwgJzIxMiddLA0KICAgICAgWydTdHVkaW8gTGl2ZXN0cmVhbScsICcxMDMwIHBvc3RzJywgWzIuOTIsIDAuMDEzXSwgJzIyMyddDQogICAgXSwNCiAgICBkb21haW46IFswLjAwMywgMjBdLA0KICAgIHRpY2tzOiBbWzAuMDEsICckMC4wMSddLCBbMC4xLCAnJDAuMTAnXSwgWzEsICckMSddLCBbMTAsICckMTAnXV0NCiAgfTsNCiAgZnVuY3Rpb24gdXNkKHYpIHsNCiAgICBpZiAodiA8IDAuMSkgcmV0dXJuIGZtdE4odiAqIDEwMCwgMSkgKyAnwqInOw0KICAgIHJldHVybiAnJCcgKyBmbXROKHYsIDIpOw0KICB9DQogIGZ1bmN0aW9uIHBjdCh2KSB7DQogICAgdmFyIGxvID0gTWF0aC5sb2coREFUQS5kb21haW5bMF0pLCBoaSA9IE1hdGgubG9nKERBVEEuZG9tYWluWzFdKTsNCiAgICByZXR1cm4gTWF0aC5tYXgoMCwgKE1hdGgubG9nKE1hdGgubWF4KHYsIERBVEEuZG9tYWluWzBdKSkgLSBsbykgLyAoaGkgLSBsbykgKiAxMDApOw0KICB9DQoNCiAgdmFyIHlsaW5lcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5bGluZXMnKTsNCiAgdmFyIGdyb3VwcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdncm91cHMnKTsNCiAgdmFyIHhyb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneHJvdycpOw0KICB2YXIgY291bnRlcnMgPSBbXTsNCiAgdmFyIGsgPSAwOw0KDQogIERBVEEudGlja3MuZm9yRWFjaChmdW5jdGlvbiAodCwgaSkgew0KICAgIHZhciB5ID0gZWwoJ3NwYW4nLCAneWwnICsgKGkgPT09IDAgPyAnJyA6ICcnKSk7DQogICAgc2V0VmFyKHksICctLXAnLCBwY3QodFswXSkgKyAnJScpOw0KICAgIHkuYXBwZW5kQ2hpbGQoZWwoJ2knLCBudWxsLCB0WzFdKSk7DQogICAgeWxpbmVzLmFwcGVuZENoaWxkKHkpOw0KICB9KTsNCiAgdmFyIGJhc2UgPSBlbCgnc3BhbicsICd5bCBiYXNlJyk7IHNldFZhcihiYXNlLCAnLS1wJywgJzAlJyk7IHlsaW5lcy5hcHBlbmRDaGlsZChiYXNlKTsNCg0KICBEQVRBLmdyb3Vwcy5mb3JFYWNoKGZ1bmN0aW9uIChnLCBnaSkgew0KICAgIHZhciBncm91cCA9IGVsKCdkaXYnLCAnZ3JvdXAnKTsNCiAgICB2YXIgZ2xhYiA9IGVsKCdkaXYnLCAnZ2xhYicsIGdbMF0pOyBnbGFiLmFwcGVuZENoaWxkKGVsKCdzbWFsbCcsIG51bGwsIGdbMV0pKTsNCiAgICBncm91cC5hcHBlbmRDaGlsZChnbGFiKTsNCiAgICB2YXIgYW5ubyA9IGVsKCdkaXYnLCAnYW5ubycsICd+JyArIGdbM10gKyAnw5cgY2hlYXBlcicpOw0KICAgIGFubm8uYXBwZW5kQ2hpbGQoZWwoJ3NtYWxsJywgbnVsbCwgJ01pY3Jvc29mdC1EZWNpc2lvbi0xIHZzIEdQVC02IFNvbCcpKTsNCiAgICBncm91cC5hcHBlbmRDaGlsZChhbm5vKTsNCiAgICB2YXIgYmFycyA9IGVsKCdkaXYnLCAnYmFycycpOw0KICAgIERBVEEuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKHMsIHNpKSB7DQogICAgICB2YXIgdiA9IGdbMl1bc2ldOw0KICAgICAgdmFyIGJhciA9IGVsKCdidXR0b24nLCAnYmFyICcgKyBzWzFdICsgJyBzJyArIHNpKTsNCiAgICAgIGJhci50eXBlID0gJ2J1dHRvbic7DQogICAgICBzZXRWYXIoYmFyLCAnLS12JywgcGN0KHYpICsgJyUnKTsNCiAgICAgIHNldFZhcihiYXIsICctLWknLCBTdHJpbmcoaysrKSk7DQogICAgICBiYXIuZGF0YXNldC5nID0gU3RyaW5nKGdpKTsgYmFyLmRhdGFzZXQucyA9IFN0cmluZyhzaSk7DQogICAgICBiYXIuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgc1swXSArICcsICcgKyBnWzBdICsgJzogJyArIHVzZCh2KSArICcgcGVyIHJ1bicpOw0KICAgICAgdmFyIGxhYiA9IGVsKCdzcGFuJywgJ2xhYicsIHVzZCh2KSk7DQogICAgICBjb3VudGVycy5wdXNoKFtsYWIsIHZdKTsNCiAgICAgIGJhci5hcHBlbmRDaGlsZChsYWIpOw0KICAgICAgYmFycy5hcHBlbmRDaGlsZChiYXIpOw0KICAgIH0pOw0KICAgIGdyb3VwLmFwcGVuZENoaWxkKGJhcnMpOw0KICAgIGdyb3Vwcy5hcHBlbmRDaGlsZChncm91cCk7DQogICAgdmFyIHhsID0gZWwoJ2RpdicsICd4bCcsIGdbMF0pOyB4bC5hcHBlbmRDaGlsZChlbCgnc21hbGwnLCBudWxsLCBnWzFdKSk7DQogICAgeHJvdy5hcHBlbmRDaGlsZCh4bCk7DQogIH0pOw0KDQogIC8vIExlZ2VuZDogaXNvbGF0ZSBhIHNlcmllcw0KICB2YXIgbGVnZW5kID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZ2VuZCcpOw0KICB2YXIgcGxvdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbG90Jyk7DQogIERBVEEuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24gKHMsIHNpKSB7DQogICAgdmFyIGIgPSBlbCgnYnV0dG9uJywgbnVsbCk7IGIudHlwZSA9ICdidXR0b24nOw0KICAgIGIuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCAnZmFsc2UnKTsgYi5kYXRhc2V0LnMgPSBTdHJpbmcoc2kpOw0KICAgIGIuYXBwZW5kQ2hpbGQoZWwoJ3NwYW4nLCAnc3cgJyArIHNbMV0pKTsgYi5hcHBlbmRDaGlsZChlbCgnc3BhbicsIG51bGwsIHNbMF0pKTsNCiAgICBsZWdlbmQuYXBwZW5kQ2hpbGQoYik7DQogIH0pOw0KICB2YXIgaXNvID0gbnVsbDsNCiAgbGVnZW5kLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsNCiAgICB2YXIgYiA9IGUudGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbicpOyBpZiAoIWIpIHJldHVybjsNCiAgICBpc28gPSBpc28gPT09IGIuZGF0YXNldC5zID8gbnVsbCA6IGIuZGF0YXNldC5zOw0KICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwobGVnZW5kLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLCBmdW5jdGlvbiAoeCkgeyB4LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgeC5kYXRhc2V0LnMgPT09IGlzbyA/ICd0cnVlJyA6ICdmYWxzZScpOyB9KTsNCiAgICBsZWdlbmQuY2xhc3NMaXN0LnRvZ2dsZSgnaXNvJywgaXNvICE9PSBudWxsKTsNCiAgICBwbG90LmNsYXNzTGlzdC50b2dnbGUoJ2lzbycsIGlzbyAhPT0gbnVsbCk7DQogICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChwbG90LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYXInKSwgZnVuY3Rpb24gKGJhcikgeyBiYXIuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCBiYXIuZGF0YXNldC5zID09PSBpc28pOyB9KTsNCiAgfSk7DQoNCiAgYmluZFRpcHMoJy5iYXInLCBmdW5jdGlvbiAoYmFyKSB7DQogICAgdmFyIGcgPSBEQVRBLmdyb3Vwc1srYmFyLmRhdGFzZXQuZ10sIHNpID0gK2Jhci5kYXRhc2V0LnMsIHMgPSBEQVRBLnNlcmllc1tzaV07DQogICAgdmFyIHNwZWMgPSB7IHRpdGxlOiBzWzBdICsgJyDCtyAnICsgZ1swXSwgcm93czogW1snQ29zdCBwZXIgZnVsbCBydW4nLCB1c2QoZ1syXVtzaV0pLCBzWzFdID09PSAncHJpJyA/ICdoaScgOiAnJ10sIFsnRGF0YXNldCcsIGdbMV1dXSB9Ow0KICAgIHNwZWMubm90ZSA9IHNpID09PSAxID8gJ34nICsgZ1szXSArICfDlyBjaGVhcGVyIHRoYW4gR1BULTYgU29sIG9uIHRoaXMgZGF0YXNldC4gRXN0aW1hdGVkLicNCiAgICAgIDogJ0VzdGltYXRlZCBjb3N0IHRvIGNsYXNzaWZ5IHRoZSB3aG9sZSBkYXRhc2V0IG9uY2UuJzsNCiAgICByZXR1cm4gc3BlYzsNCiAgfSwgJ2Fib3ZlJyk7DQoNCiAgdmFyIGNoYXJ0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoYXJ0Jyk7DQogIG9ic2VydmUoWw0KICAgIFtoZWFkLCBmdW5jdGlvbiAoKSB7IGhlYWQuY2xhc3NMaXN0LmFkZCgnaW4nKTsgfV0sDQogICAgW2NoYXJ0LCBmdW5jdGlvbiAoKSB7DQogICAgICByZXZlYWwoY2hhcnQsIGNvdW50ZXJzLmxlbmd0aCwgZnVuY3Rpb24gKCkgew0KICAgICAgICBjb3VudGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7IGNvdW50VXAoY1swXSwgY1sxXSwgdXNkLCA4MDAsIDI1MCk7IH0pOw0KICAgICAgfSk7DQogICAgfV0NCiAgXSk7DQoNCn0pKCk7DQo8L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4NCg==
Quality control
The Copilot team measures the quality of chat and agentic responses. Their testing found Microsoft-Decision-1 to be competitive with GPT5.6 Luna and 100 times faster.
Incident response
Our on-call engineers use AI to retrieve relevant knowledge to respond to live incidents across logs, ticketing systems, calls, messages, and other data sources. Microsoft-Decision-1 performed better and faster than an LLM for knowledge retrieval.
Scientific discovery
Microsoft Discovery implements an adaptive replanning feature where an agent evaluates a previous experiment, revises its approach based on rubric grades, and repeats until it has completed its objectives. Microsoft-Decision-1 scored as 46 times more consistent than the LLM-based score at three times the speed and resulted in nearly four times the speed on adaptive replanning
Faster, more reliable planning could significantly impact outcomes for long-running scientific experiments.
Those are just a small handful of examples. There are many more potential use cases for Microsoft-Decision-1. Consider trying out the following:
Agent controls: Evaluate an agent’s proposed next step and decide whether to continue, stop, retry, or hand off to a model, tool, or human.
Model routing: Evaluate an incoming request and select the best model for the task based on quality, cost, and latency requirements.
Skill-based decisions: Apply the rules from an agent skill to select the appropriate next action without repeatedly processing a long list of instructions.
Data labeling: Assign consistent labels to social media posts, customer feedback, and other data for analysis or training.
AI judging: Evaluate an AI-generated response against defined quality criteria and decide whether to accept, revise, or reject it.
Intent analysis: Identify what a user is trying to accomplish and match their request to a supported intent.
Incident response routing: Classify an incident by type and urgency, then route it to the appropriate team or workflow.
Data validation: Check whether an input meets defined requirements and decide whether to accept it, reject it, or flag it for review.
Recommendations: Select the most relevant item, offer, or next action from a set of candidates.
Search relevance: Assess how well a search result matches a query and assign a relevance label or priority.
Content classification and filtering: Categorize content by topic or policy and decide whether to display it, filter it, or send it for review.
Code scanning: Evaluate code against defined criteria and flag potential defects or policy violations for review.
Safety and security screening: Classify requests, outputs, or proposed actions by risk and decide whether to allow, block, or escalate them.
Computer and UI use: Select the next interface action from a set of options based on the current screen and task.
Robotics: Select among predefined robot actions based on observations, task goals, and operating constraints.
Scientific discovery: Screen candidate hypotheses, compounds, or experiments against defined criteria and prioritize them for further evaluation.
Getting started
Developers can get started with Microsoft-Decision-1 today in Microsoft Foundry here: https://ai.azure.com/catalog/models/Microsoft-Decision-1 . You can also get started through OpenRouter here: https://openrouter.ai/microsoft/microsoft-decision-1 .
Documentation is available here: https://learn.microsoft.com/en-us/azure/foundry/foundry-models/how-to/use-foundry-models-microsoft-decision .
Pricing
Input tokens cost $0.042 USD per million tokens. Output tokens are free.
Looking ahead
Now that agentic AI is a reality, we’ve seen that cost plays a major role in how people decide to use AI. And it’s increasingly important to choose the right model for the right job. With agents taking action and making an impact in the real world, decision models have the potential to help people guide and control those agents through complex environments.
We look forward to seeing what developers build with Microsoft-Decision-1 and hearing their feedback. We’ll continue to release updates to the model, including by incorporating evaluations and data to further optimize quality, confidence, and cost.
Appendix: Models benchmarked
Quyet-1.0-Large — https://huggingface.co/chinhnc/Quyet-1.0-Large Surogate Rune 26B-A4B — https://huggingface.co/surogate/rune-26b-a4b-GGUF GPT-6 Luna Decisions — https://developers.openai.com/api/docs/guides/decisions deck-31B — https://github.com/krishna-gogineni-765/deck31b H2O-Lightning-4B — https://huggingface.co/h2oai/h2o-lightning-4b Strands-Decider 2B — https://github.com/strands-labs/strands-decider