Análise da sazonalidade da inflação no México.

Inflação headline

Inflação de não subjacentes

Inflação de subjacentes

Inflação de núcleos de serviços

LS0tDQp0aXRsZTogIk1YTiAtIEluZmxhw6fDo28gSU5QQyINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHBhY2thZ2VzLCBpbmNsdWRlPUZ9DQpybShsaXN0PWxzKCkpDQpzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkoZHBseXIpKQ0Kc3VwcHJlc3NXYXJuaW5ncyhsaWJyYXJ5KGx1YnJpZGF0ZSkpDQpzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkodGliYmxlKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShzZWFzb25hbCkpDQpzdXBwcmVzc1dhcm5pbmdzKGxpYnJhcnkoeHRzKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShyb2xsKSkNCnN1cHByZXNzV2FybmluZ3MobGlicmFyeShyZWFkeGxzYikpDQpgYGANCg0KDQpgYGB7ciBwYXJhbXMsIGluY2x1ZGU9Rn0NCg0KY3VyLmRhdGUgPSBhcy5EYXRlKCIyMDI1LTA2LTE1IikNCnBhdGggPSAiRjovRWNvbm9taWNzL01FWElDTy9DUEkvSU5QQ19Gb3JlY2FzdC54bHNiIg0Kd2FpcmZhcmVzID0gMC4yOA0Kd290aGVyc2VydiA9IDE4LjYzDQp3c2VydiA9IDM5LjIxDQoNCmBgYA0KDQoNCmBgYHtyLCBmdW5jdGlvbnMsIGluY2x1ZGU9Rn0NCmdldC5zZWFzb25hbC5wYXR0ZXJuID0gZnVuY3Rpb24oZHRhLCBmcmVxKQ0Kew0KICBkdGEubW9uID0gc3Vic2V0KGR0YSwgZGF0ZVNlc3Npb24gPD0gYXMuRGF0ZSgiMjAyNC0xMi0zMSIpKQ0KICBycXVhcnRpbGUgPSBjKDAuMjUsIDAuNSwgMC43NSkNCiAgZHRhLmF2ZyA9IHN1YnNldChkdGEsIGRhdGVTZXNzaW9uID49IGFzLkRhdGUoIjIwMTMtMDEtMDEiKSAmIGRhdGVTZXNzaW9uIDw9IGFzLkRhdGUoIjIwMTktMTItMzEiKSkNCiAgZHRhLmF2ZyA9IGFnZ3JlZ2F0ZShkdGEuYXZnWywtMV0sIGJ5ID0gbGlzdChiaXdlZWsgPSBwYXN0ZTAoZm9ybWF0KGR0YS5hdmckZGF0ZVNlc3Npb24sICIlbSIpLCBpZmVsc2UoZGF5KGR0YS5hdmckZGF0ZVNlc3Npb24pPD0xNSwgIkgxIiwgIkgyIikpKSwgIEZVTiA9IGZ1bmN0aW9uKHgpIG1lYW4oeCwgbmEucm09VCkpDQoNCiAgbGlzdC5xdWFydGlsZSA9IGxhcHBseShzZXROYW1lcyhycXVhcnRpbGUsIHJxdWFydGlsZSksIGZ1bmN0aW9uKHEpIA0KICB7DQogICAgcmVzID0gYWdncmVnYXRlKGR0YS5tb25bLC0xXSwgYnkgPSBsaXN0KGJpd2VlayA9IHBhc3RlMChmb3JtYXQoZHRhLm1vbiRkYXRlU2Vzc2lvbiwgIiVtIiksIGlmZWxzZShkYXkoZHRhLm1vbiRkYXRlU2Vzc2lvbik8PTE1LCAiSDEiLCAiSDIiKSkpLCAgRlVOID0gZnVuY3Rpb24oeCkgcXVhbnRpbGUoeCwgcSkpDQogICAgY29sbmFtZXMocmVzKVstMV0gPSBwYXN0ZTAoIlF1YXJ0aWxlICIsIHEpDQogICAgcmVzDQogIH0pDQogIHJlcyA9IFJlZHVjZShmdW5jdGlvbih4LCB5KSBtZXJnZSh4LCB5LCBieT1mcmVxLCBhbGw9VCksIGxpc3QucXVhcnRpbGUpDQogIHJlcyRgWWVhciAyMDI0YCA9IHN1YnNldChkdGEsIGRhdGVTZXNzaW9uID49IGFzLkRhdGUoIjIwMjQtMDEtMDEiKSAmIGRhdGVTZXNzaW9uIDw9IGFzLkRhdGUoIjIwMjQtMTItMzEiKSlbLC0xXQ0KICB2ZWMuY3VyID0gc3Vic2V0KGR0YSwgZGF0ZVNlc3Npb24gPj0gYXMuRGF0ZSgiMjAyNS0wMS0wMSIpICYgZGF0ZVNlc3Npb24gPD0gYXMuRGF0ZSgiMjAyNS0xMi0zMSIpKVssLTFdDQogIHJlcyRgWWVhciAyMDI1YCA9IGModmVjLmN1ciwgcmVwKE5BLCBucm93KHJlcykgLSBsZW5ndGgodmVjLmN1cikpKQ0KICByZXMkYE1lYW4gMTMtMTlgID0gZHRhLmF2Z1ssLTFdDQogIHJldHVybihyZXMpDQp9DQoNCmBgYA0KDQoNCkFuw6FsaXNlIGRhIHNhem9uYWxpZGFkZSBkYSBpbmZsYcOnw6NvIG5vIE3DqXhpY28uIA0KDQotIEluZmxhw6fDo28gaGVhZGxpbmUuDQotIEFiZXJ0dXJhIGRhIGluZmxhw6fDo28gZGUgbsOjbyBzdWJqYWNlbnRlcy4NCi0gQWJlcnR1cmEgZGEgaW5mbGHDp8OjbyBkZSBzdWJqYWNlbnRlcy4NCg0KDQpgYGB7ciwgZGF0YWJhc2UsIGluY2x1ZGU9Rn0NCmRiLmlucGMgPSByZWFkX3hsc2IocGF0aCwgc2hlZXQgPSAiQWJlcnR1cmFzIiwgcmFuZ2UgPSAiQTI6UFExOCIsIGNvbF9uYW1lcyA9IEYpDQpkYi5pbnBjID0gZGF0YS5mcmFtZSh0KGRiLmlucGMpKQ0KY29sbmFtZXMoZGIuaW5wYykgPSBhcy5jaGFyYWN0ZXIoZGIuaW5wY1sxLF0pDQpkYi5pbnBjID0gZGIuaW5wY1syOm5yb3coZGIuaW5wYyksXQ0Kcm93bmFtZXMoZGIuaW5wYykgPSBOVUxMDQpjb2xuYW1lcyhkYi5pbnBjKVsxXSA9ICJkYXRlU2Vzc2lvbiINCmRiLmlucGMkZGF0ZVNlc3Npb24gPSBhcy5EYXRlKGFzLm51bWVyaWMoZGIuaW5wYyRkYXRlU2Vzc2lvbiksIG9yaWdpbiA9ICIxODk5LTEyLTMwIikNCmRiLmlucGNbLC0xXSA9IHNhcHBseShkYi5pbnBjWywtMV0sIGZ1bmN0aW9uKHgpIGFzLm51bWVyaWMoeCkpDQpkYi5pbnBjID0gc3Vic2V0KGRiLmlucGMsIGRhdGVTZXNzaW9uIDw9IGN1ci5kYXRlKQ0KDQpgYGANCg0KYGBge3IgYWlyZmFyZXMsIGluY2x1ZGU9Rn0NCmRiLml0ZW1zID0gcmVhZF94bHNiKHBhdGgsIHNoZWV0PSJFc3BlY2lhaXMiLCByYW5nZSA9ICJGMjpQVzMxMCIsIGNvbF9uYW1lcyA9IEYpDQpkYi5pdGVtcyA9IGRiLml0ZW1zWywtMl0NCnJvd25hbWVzKGRiLml0ZW1zKSA9IE5VTEwNCmNvbG5hbWVzKGRiLml0ZW1zKSA9IE5VTEwNCnJkYXRlcyA9IGFzLkRhdGUoYXMubnVtZXJpYyhkYi5pdGVtc1sxLDI6bmNvbChkYi5pdGVtcyldKSwgb3JpZ2luID0gIjE4OTktMTItMzAiKQ0KZGIuaXRlbXMgPSBkYi5pdGVtc1tkYi5pdGVtc1ssMV0gIT0gIiIsXQ0KZGIuaXRlbXMgPSBkYXRhLmZyYW1lKHQoZGIuaXRlbXMpKQ0KY29sbmFtZXMoZGIuaXRlbXMpID0gYXMuY2hhcmFjdGVyKGRiLml0ZW1zWzEsXSkNCmRiLml0ZW1zID0gZGIuaXRlbXNbLTEsXQ0KZGIuaXRlbXMgPSBjYmluZChkYXRhLmZyYW1lKGRhdGVTZXNzaW9uPXJkYXRlcyksIGRiLml0ZW1zKQ0KZGIuaXRlbXNbLC0xXSA9IHNhcHBseShkYi5pdGVtc1ssLTFdLCBmdW5jdGlvbih4KSBhcy5udW1lcmljKHgpKQ0KZGIuYWlyZmFyZXMgPSBkYi5pdGVtc1ssYygiZGF0ZVNlc3Npb24iLCAiVHJhbnNwb3J0ZSBhw6lyZW8iKV0NCmRiLmFpcmZhcmVzID0gc3Vic2V0KGRiLmFpcmZhcmVzLCBkYXRlU2Vzc2lvbiA8PSBjdXIuZGF0ZSkNCmRiLmFpcmZhcmVzID0gbGVmdF9qb2luKGRiLmFpcmZhcmVzLCBkYi5pbnBjWyxjKCJkYXRlU2Vzc2lvbiIsICJPdHJvcyBzZXJ2aWNpb3MiLCAiU2VydmljaW9zIildKQ0KDQpgYGANCg0KPGgyIHN0eWxlPSJjb2xvcjpkYXJrZ3JlZW47Ij5JbmZsYcOnw6NvIGhlYWRsaW5lPC9oMj4NCg0KYGBge3IgaGVhZGxpbmVzZWFzLCBlY2hvPUYsIG1lc3NhZ2U9Rn0NCmRiLmlucGMuaGVhZCA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiSU5QQyIpXQ0KZGIuaW5wYy5oZWFkWywtMV0gPSAxMDAgKiAoZGIuaW5wYy5oZWFkWywtMV0gLyBsYWcoZGIuaW5wYy5oZWFkWywtMV0sIDEpIC0gMSkNCmRiLmlucGMuaGVhZC5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5pbnBjLmhlYWQpLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3ggPSBucm93KGRiLmlucGMuaGVhZC5zZWFzKQ0KI3BhcihtZnJvdz1jKDEsIDIpKQ0KDQpwbG90KDE6bnJvd3gsIGRiLmlucGMuaGVhZC5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gaGVhZGxpbmUiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGIuaW5wYy5oZWFkLnNlYXNbLCAtMV0pKSksIHhheHQgPSAibiIsIGNvbC5tYWluID0gImRhcmtncmVlbiIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3gsYnk9MyksIGxhYmVscyA9IGRiLmlucGMuaGVhZC5zZWFzJGJpd2Vla1tzZXEoMSxucm93eCxieT0zKV0pDQpsaW5lcygxOm5yb3d4LCBkYi5pbnBjLmhlYWQuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMuaGVhZC5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KcG9seWdvbihjKDE6bnJvd3gsIHJldigxOm5yb3d4KSksICAgICAgICAgICAgICAgIA0KICAgICAgICBjKGRiLmlucGMuaGVhZC5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLmlucGMuaGVhZC5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiMjAyNSIsICIyMDI0IiwgIk1lZGlhbiIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiKSwgbHR5ID0gMSwgcGNoID0gMTkpDQpncmlkKCkNCmBgYA0KDQo8aDIgc3R5bGU9ImNvbG9yOmRhcmtyZWQ7Ij5JbmZsYcOnw6NvIGRlIG7Do28gc3ViamFjZW50ZXM8L2gyPg0KDQpgYGB7ciBub25jb3Jlc2VhcywgZWNobz1GLCBtZXNzYWdlPUZ9DQpkYi5pbnBjLm5jb3JlID0gZGIuaW5wY1tjKCJkYXRlU2Vzc2lvbiIsICJObyBzdWJ5YWNlbnRlIildDQpkYi5pbnBjLm5jb3JlWywtMV0gPSAxMDAgKiAoZGIuaW5wYy5uY29yZVssLTFdIC8gbGFnKGRiLmlucGMubmNvcmVbLC0xXSkgLSAxKQ0KZGIuaW5wYy5uY29yZS5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5pbnBjLm5jb3JlKSwgZnJlcT0iYml3ZWVrIikNCm5yb3d4ID0gbnJvdyhkYi5pbnBjLm5jb3JlLnNlYXMpDQoNCg0KcGxvdCgxOm5yb3d4LCBkYi5pbnBjLm5jb3JlLnNlYXMkYFllYXIgMjAyNWAsIHR5cGUgPSAiYiIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCB4bGFiID0gIlF1aW56ZW5hIiwgeWxhYiA9ICIlLCBCV29CVyIsIG1haW4gPSAiSW5mbGHDp8OjbyBub24tY29yZSIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYi5pbnBjLm5jb3JlLnNlYXNbLCAtMV0pKSksIHhheHQgPSAibiIsIGNvbC5tYWluID0gImRhcmtyZWQiKQ0KYXhpcygxLCBhdCA9IHNlcSgxLG5yb3d4LGJ5PTMpLCBsYWJlbHMgPSBkYi5pbnBjLm5jb3JlLnNlYXMkYml3ZWVrW3NlcSgxLG5yb3d4LGJ5PTMpXSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMubmNvcmUuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMubmNvcmUuc2VhcyRgUXVhcnRpbGUgMC41YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtyZWQiLCBwY2ggPSAxOSwgbHdkID0gMSkNCnBvbHlnb24oYygxOm5yb3d4LCByZXYoMTpucm93eCkpLCAgICAgICAgICAgICAgICANCiAgICAgICAgYyhkYi5pbnBjLm5jb3JlLnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuaW5wYy5uY29yZS5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoInRvcGxlZnQiLCBsZWdlbmQgPSBjKCIyMDI1IiwgIjIwMjQiLCAiTWVkaWFuIiksIGNvbCA9IGMoImJsYWNrIiwgImJsdWUiLCAiZGFya3JlZCIpLCBsdHkgPSAxLCBwY2ggPSAxOSkNCmdyaWQoKQ0KDQpgYGANCg0KYGBge3Igbm9uY29yZWFncm9zZWFzLCBlY2hvPUYsIG1lc3NhZ2U9Rn0NCmRiLmlucGMuYWdybyA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiQWdyb3BlY3VhcmlvcyIpXQ0KZGIuaW5wYy5hZ3JvWywtMV0gPSAxMDAgKiAoZGIuaW5wYy5hZ3JvWywtMV0gLyBsYWcoZGIuaW5wYy5hZ3JvWywtMV0pIC0gMSkNCmRiLmlucGMuYWdyby5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5pbnBjLmFncm8pLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3ggPSBucm93KGRiLmlucGMuYWdyby5zZWFzKQ0KDQoNCnBsb3QoMTpucm93eCwgZGIuaW5wYy5hZ3JvLnNlYXMkYFllYXIgMjAyNWAsIHR5cGUgPSAiYiIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCB4bGFiID0gIlF1aW56ZW5hIiwgeWxhYiA9ICIlLCBCV29CVyIsIG1haW4gPSAiSW5mbGHDp8OjbyBub24tY29yZSBhZ3JvcGVjdcOhcmlhIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiLmlucGMuYWdyby5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrcmVkIikNCmF4aXMoMSwgYXQgPSBzZXEoMSxucm93eCxieT0zKSwgbGFiZWxzID0gZGIuaW5wYy5hZ3JvLnNlYXMkYml3ZWVrW3NlcSgxLG5yb3d4LGJ5PTMpXSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMuYWdyby5zZWFzJGBZZWFyIDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eCwgZGIuaW5wYy5hZ3JvLnNlYXMkYFF1YXJ0aWxlIDAuNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrcmVkIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpwb2x5Z29uKGMoMTpucm93eCwgcmV2KDE6bnJvd3gpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuaW5wYy5hZ3JvLnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuaW5wYy5hZ3JvLnNlYXMkYFF1YXJ0aWxlIDAuNzVgKSksICAgICAgICAgIA0KICAgICAgICBjb2wgPSByZ2IoMC41LCAwLjUsIDEsIDAuMyksICANCiAgICAgICAgYm9yZGVyID0gTkEpICANCmxlZ2VuZCgiYm90dG9tcmlnaHQiLCBsZWdlbmQgPSBjKCIyMDI1IiwgIjIwMjQiLCAiTWVkaWFuIiksIGNvbCA9IGMoImJsYWNrIiwgImJsdWUiLCAiZGFya3JlZCIpLCBsdHkgPSAxLCBwY2ggPSAxOSkNCmdyaWQoKQ0KDQpgYGANCg0KYGBge3Igbm9uY29yZWVuZXJneXNlYXMsIGVjaG89RiwgbWVzc2FnZT1GfQ0KZGIuaW5wYy5lbmVyZ3kgPSBkYi5pbnBjW2MoImRhdGVTZXNzaW9uIiwgIkVuZXJnw6l0aWNvcyB5IHRhcmlmYXMgYXV0b3JpemFkYXMgcG9yIGVsIGdvYmllcm5vIildDQpkYi5pbnBjLmVuZXJneVssLTFdID0gMTAwICogKGRiLmlucGMuZW5lcmd5WywtMV0gLyBsYWcoZGIuaW5wYy5lbmVyZ3lbLC0xXSkgLSAxKQ0KZGIuaW5wYy5lbmVyZ3kuc2VhcyA9IGdldC5zZWFzb25hbC5wYXR0ZXJuKG5hLm9taXQoZGIuaW5wYy5lbmVyZ3kpLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3ggPSBucm93KGRiLmlucGMuZW5lcmd5LnNlYXMpDQoNCg0KcGxvdCgxOm5yb3d4LCBkYi5pbnBjLmVuZXJneS5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gbm9uLWNvcmUgZW5lcmdpYSBlIHRhcmlmYXMiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGIuaW5wYy5lbmVyZ3kuc2Vhc1ssIC0xXSkpKSwgeGF4dCA9ICJuIiwgY29sLm1haW4gPSAiZGFya3JlZCIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3gsYnk9MyksIGxhYmVscyA9IGRiLmlucGMuZW5lcmd5LnNlYXMkYml3ZWVrW3NlcSgxLG5yb3d4LGJ5PTMpXSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMuZW5lcmd5LnNlYXMkYFllYXIgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJibHVlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcygxOm5yb3d4LCBkYi5pbnBjLmVuZXJneS5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KcG9seWdvbihjKDE6bnJvd3gsIHJldigxOm5yb3d4KSksICAgICAgICAgICAgICAgIA0KICAgICAgICBjKGRiLmlucGMuZW5lcmd5LnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuaW5wYy5lbmVyZ3kuc2VhcyRgUXVhcnRpbGUgMC43NWApKSwgICAgICAgICAgDQogICAgICAgIGNvbCA9IHJnYigwLjUsIDAuNSwgMSwgMC4zKSwgIA0KICAgICAgICBib3JkZXIgPSBOQSkgIA0KbGVnZW5kKCJib3R0b21yaWdodCIsIGxlZ2VuZCA9IGMoIjIwMjUiLCAiMjAyNCIsICJNZWRpYW4iKSwgY29sID0gYygiYmxhY2siLCAiYmx1ZSIsICJkYXJrcmVkIiksIGx0eSA9IDEsIHBjaCA9IDE5KQ0KZ3JpZCgpDQoNCmBgYA0KDQo8aDIgc3R5bGU9ImNvbG9yOmRhcmtibHVlOyI+SW5mbGHDp8OjbyBkZSBzdWJqYWNlbnRlczwvaDI+DQoNCmBgYHtyIGNvcmVzZWFzLCBlY2hvPUYsIG1lc3NhZ2U9Rn0NCmRiLmlucGMuY29yZSA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiU3VieWFjZW50ZSIpXQ0KZGIuaW5wYy5jb3JlWywtMV0gPSAxMDAgKiAoZGIuaW5wYy5jb3JlWywtMV0gLyBsYWcoZGIuaW5wYy5jb3JlWywtMV0pIC0gMSkNCmRiLmlucGMuY29yZS5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5pbnBjLmNvcmUpLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3ggPSBucm93KGRiLmlucGMuY29yZS5zZWFzKQ0KDQoNCnBsb3QoMTpucm93eCwgZGIuaW5wYy5jb3JlLnNlYXMkYFllYXIgMjAyNWAsIHR5cGUgPSAiYiIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCB4bGFiID0gIlF1aW56ZW5hIiwgeWxhYiA9ICIlLCBCV29CVyIsIG1haW4gPSAiSW5mbGHDp8OjbyBjb3JlIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiLmlucGMuY29yZS5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrYmx1ZSIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3gsYnk9MyksIGxhYmVscyA9IGRiLmlucGMuY29yZS5zZWFzJGJpd2Vla1tzZXEoMSxucm93eCxieT0zKV0pDQpsaW5lcygxOm5yb3d4LCBkYi5pbnBjLmNvcmUuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3gsIGRiLmlucGMuY29yZS5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eCwgZGIuaW5wYy5jb3JlLnNlYXMkYE1lYW4gMTMtMTlgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya2dyZWVuIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpwb2x5Z29uKGMoMTpucm93eCwgcmV2KDE6bnJvd3gpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuaW5wYy5jb3JlLnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuaW5wYy5jb3JlLnNlYXMkYFF1YXJ0aWxlIDAuNzVgKSksICAgICAgICAgIA0KICAgICAgICBjb2wgPSByZ2IoMC41LCAwLjUsIDEsIDAuMyksICANCiAgICAgICAgYm9yZGVyID0gTkEpICANCmxlZ2VuZCgidG9wbGVmdCIsIGxlZ2VuZCA9IGMoIjIwMjUiLCAiMjAyNCIsICJNZWRpYW4iLCAiTWVhbiAxMy0xOSIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiLCAiZGFya2dyZWVuIiksIGx0eSA9IDEsIHBjaCA9IDE5KQ0KZ3JpZCgpDQoNCmBgYA0KDQpgYGB7ciBnb29kc2VhcywgZWNobz1GLCBtZXNzYWdlPUZ9DQoNCmRiLmdvb2RzID0gZGIuaW5wY1tjKCJkYXRlU2Vzc2lvbiIsICJNZXJjYW5jaWFzIildDQpkYi5nb29kc1ssLTFdID0gMTAwICogKGRiLmdvb2RzWywtMV0gLyBsYWcoZGIuZ29vZHNbLC0xXSkgLSAxKQ0KZGIuZ29vZHMuc2VhcyA9IGdldC5zZWFzb25hbC5wYXR0ZXJuKG5hLm9taXQoZGIuZ29vZHMpLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3guZ29vZHMgPSBucm93KGRiLmdvb2RzLnNlYXMpDQoNCiMgQ2hhcnQNCnBsb3QoMTpucm93eC5nb29kcywgZGIuZ29vZHMuc2VhcyRgWWVhciAyMDI1YCwgdHlwZSA9ICJiIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIHhsYWIgPSAiUXVpbnplbmEiLCB5bGFiID0gIiUsIEJXb0JXIiwgbWFpbiA9ICJJbmZsYcOnw6NvIGNvcmUgZGUgYmVucyIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYi5nb29kcy5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrYmx1ZSIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3guZ29vZHMsYnk9MyksIGxhYmVscyA9IGRiLmdvb2RzLnNlYXMkYml3ZWVrW3NlcSgxLG5yb3d4Lmdvb2RzLGJ5PTMpXSkNCmxpbmVzKDE6bnJvd3guZ29vZHMsIGRiLmdvb2RzLnNlYXMkYFllYXIgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJibHVlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcygxOm5yb3d4Lmdvb2RzLCBkYi5nb29kcy5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eC5nb29kcywgZGIuZ29vZHMuc2VhcyRgTWVhbiAxMy0xOWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCnBvbHlnb24oYygxOm5yb3d4Lmdvb2RzLCByZXYoMTpucm93eC5nb29kcykpLCAgICAgICAgICAgICAgICANCiAgICAgICAgYyhkYi5nb29kcy5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLmdvb2RzLnNlYXMkYFF1YXJ0aWxlIDAuNzVgKSksICAgICAgICAgIA0KICAgICAgICBjb2wgPSByZ2IoMC41LCAwLjUsIDEsIDAuMyksICANCiAgICAgICAgYm9yZGVyID0gTkEpICANCmxlZ2VuZCgiYm90dG9tbGVmdCIsIGxlZ2VuZCA9IGMoIjIwMjUiLCAiMjAyNCIsICJNZWRpYW4iLCAiTWVhbiAxMy0xOSIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiLCAiZGFya2dyZWVuIiksIGx0eSA9IDEsIHBjaCA9IDE5KQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCmBgYHtyIGdvb2RleGZvb2RzZWFzLCBlY2hvPUYsIG1lc3NhZ2U9Rn0NCg0KZGIuZ29vZHMuZXhmb29kID0gZGIuaW5wY1tjKCJkYXRlU2Vzc2lvbiIsICJNZXJjYW5jaWFzIG5vIGFsaW1lbnTDrWNpYXMiKV0NCmRiLmdvb2RzLmV4Zm9vZFssLTFdID0gMTAwICogKGRiLmdvb2RzLmV4Zm9vZFssLTFdIC8gbGFnKGRiLmdvb2RzLmV4Zm9vZFssLTFdKSAtIDEpDQpkYi5nb29kcy5leGZvb2Quc2VhcyA9IGdldC5zZWFzb25hbC5wYXR0ZXJuKG5hLm9taXQoZGIuZ29vZHMuZXhmb29kKSwgZnJlcT0iYml3ZWVrIikNCm5yb3d4Lmdvb2RzID0gbnJvdyhkYi5nb29kcy5leGZvb2Quc2VhcykNCg0KIyBDaGFydA0KcGxvdCgxOm5yb3d4Lmdvb2RzLCBkYi5nb29kcy5leGZvb2Quc2VhcyRgWWVhciAyMDI1YCwgdHlwZSA9ICJiIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIHhsYWIgPSAiUXVpbnplbmEiLCB5bGFiID0gIiUsIEJXb0JXIiwgbWFpbiA9ICJJbmZsYcOnw6NvIGNvcmUgZGUgYmVucyAtIGV4LWFsaW1lbnRvcyIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYi5nb29kcy5leGZvb2Quc2Vhc1ssIC0xXSkpKSwgeGF4dCA9ICJuIiwgY29sLm1haW4gPSAiZGFya2JsdWUiKQ0KYXhpcygxLCBhdCA9IHNlcSgxLG5yb3d4Lmdvb2RzLGJ5PTMpLCBsYWJlbHMgPSBkYi5nb29kcy5leGZvb2Quc2VhcyRiaXdlZWtbc2VxKDEsbnJvd3guZ29vZHMsYnk9MyldKQ0KbGluZXMoMTpucm93eC5nb29kcywgZGIuZ29vZHMuZXhmb29kLnNlYXMkYFllYXIgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJibHVlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcygxOm5yb3d4Lmdvb2RzLCBkYi5nb29kcy5leGZvb2Quc2VhcyRgUXVhcnRpbGUgMC41YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtyZWQiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3guZ29vZHMsIGRiLmdvb2RzLmV4Zm9vZC5zZWFzJGBNZWFuIDEzLTE5YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtncmVlbiIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KcG9seWdvbihjKDE6bnJvd3guZ29vZHMsIHJldigxOm5yb3d4Lmdvb2RzKSksICAgICAgICAgICAgICAgIA0KICAgICAgICBjKGRiLmdvb2RzLmV4Zm9vZC5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLmdvb2RzLmV4Zm9vZC5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoImJvdHRvbWxlZnQiLCBsZWdlbmQgPSBjKCIyMDI1IiwgIjIwMjQiLCAiTWVkaWFuIiwgIk1lYW4gMTMtMTkiKSwgY29sID0gYygiYmxhY2siLCAiYmx1ZSIsICJkYXJrcmVkIiwgImRhcmtncmVlbiIpLCBsdHkgPSAxLCBwY2ggPSAxOSkNCmdyaWQoKQ0KDQoNCmBgYA0KDQoNCmBgYHtyIGdvb2Rmb29kc2VhcywgZWNobz1GLCBtZXNzYWdlPUZ9DQoNCmRiLmdvb2RzLmZvb2QgPSBkYi5pbnBjW2MoImRhdGVTZXNzaW9uIiwgIkFsaW1lbnRvcywgYmViaWRhcyB5IHRhYmFjbyIpXQ0KZGIuZ29vZHMuZm9vZFssLTFdID0gMTAwICogKGRiLmdvb2RzLmZvb2RbLC0xXSAvIGxhZyhkYi5nb29kcy5mb29kWywtMV0pIC0gMSkNCmRiLmdvb2RzLmZvb2Quc2VhcyA9IGdldC5zZWFzb25hbC5wYXR0ZXJuKG5hLm9taXQoZGIuZ29vZHMuZm9vZCksIGZyZXE9ImJpd2VlayIpDQpucm93eC5nb29kcyA9IG5yb3coZGIuZ29vZHMuZm9vZC5zZWFzKQ0KDQojIENoYXJ0DQpwbG90KDE6bnJvd3guZ29vZHMsIGRiLmdvb2RzLmZvb2Quc2VhcyRgWWVhciAyMDI1YCwgdHlwZSA9ICJiIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIHhsYWIgPSAiUXVpbnplbmEiLCB5bGFiID0gIiUsIEJXb0JXIiwgbWFpbiA9ICJJbmZsYcOnw6NvIGNvcmUgZGUgYmVucyAtIGFsaW1lbnRvcyIsIHlsaW0gPSByYW5nZShuYS5vbWl0KHVubGlzdChkYi5nb29kcy5mb29kLnNlYXNbLCAtMV0pKSksIHhheHQgPSAibiIsIGNvbC5tYWluID0gImRhcmtibHVlIikNCmF4aXMoMSwgYXQgPSBzZXEoMSxucm93eC5nb29kcyxieT0zKSwgbGFiZWxzID0gZGIuZ29vZHMuZm9vZC5zZWFzJGJpd2Vla1tzZXEoMSxucm93eC5nb29kcyxieT0zKV0pDQpsaW5lcygxOm5yb3d4Lmdvb2RzLCBkYi5nb29kcy5mb29kLnNlYXMkYFllYXIgMjAyNGAsIHR5cGUgPSAibCIsIGNvbCA9ICJibHVlIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcygxOm5yb3d4Lmdvb2RzLCBkYi5nb29kcy5mb29kLnNlYXMkYFF1YXJ0aWxlIDAuNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrcmVkIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpwb2x5Z29uKGMoMTpucm93eC5nb29kcywgcmV2KDE6bnJvd3guZ29vZHMpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuZ29vZHMuZm9vZC5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLmdvb2RzLmZvb2Quc2VhcyRgUXVhcnRpbGUgMC43NWApKSwgICAgICAgICAgDQogICAgICAgIGNvbCA9IHJnYigwLjUsIDAuNSwgMSwgMC4zKSwgIA0KICAgICAgICBib3JkZXIgPSBOQSkgIA0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IGMoIjIwMjUiLCAiMjAyNCIsICJNZWRpYW4iKSwgY29sID0gYygiYmxhY2siLCAiYmx1ZSIsICJkYXJrcmVkIiksIGx0eSA9IDEsIHBjaCA9IDE5KQ0KZ3JpZCgpDQoNCg0KYGBgDQoNCg0KYGBge3Igc2VydmljZXNlYXMsIGVjaG89RiwgbWVzc2FnZT1GfQ0KZGIuc2VydiA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiU2VydmljaW9zIildDQpkYi5zZXJ2WywtMV0gPSAxMDAgKiAoZGIuc2VydlssLTFdIC8gbGFnKGRiLnNlcnZbLC0xXSkgLSAxKQ0KZGIuc2Vydi5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5zZXJ2KSwgZnJlcT0iYml3ZWVrIikNCm5yb3d4LnNlcnYgPSBucm93KGRiLnNlcnYuc2VhcykNCg0KIyBDaGFydA0KDQpwbG90KDE6bnJvd3guc2VydiwgZGIuc2Vydi5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gY29yZSBkZSBzZXJ2acOnb3MiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGIuc2Vydi5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrYmx1ZSIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3guc2VydixieT0zKSwgbGFiZWxzID0gZGIuc2Vydi5zZWFzJGJpd2Vla1tzZXEoMSxucm93eC5zZXJ2LGJ5PTMpXSkNCmxpbmVzKDE6bnJvd3guc2VydiwgZGIuc2Vydi5zZWFzJGBZZWFyIDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eC5zZXJ2LCBkYi5zZXJ2LnNlYXMkYFF1YXJ0aWxlIDAuNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrcmVkIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpsaW5lcygxOm5yb3d4LnNlcnYsIGRiLnNlcnYuc2VhcyRgTWVhbiAxMy0xOWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrZ3JlZW4iLCBwY2ggPSAxOSwgbHdkID0gMSkNCnBvbHlnb24oYygxOm5yb3d4LnNlcnYsIHJldigxOm5yb3d4LnNlcnYpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuc2Vydi5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLnNlcnYuc2VhcyRgUXVhcnRpbGUgMC43NWApKSwgICAgICAgICAgDQogICAgICAgIGNvbCA9IHJnYigwLjUsIDAuNSwgMSwgMC4zKSwgIA0KICAgICAgICBib3JkZXIgPSBOQSkgIA0KbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZCA9IGMoIjIwMjUiLCAiMjAyNCIsICJNZWRpYW4iLCAiTWVhbiAxMy0xOSIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiLCAiZGFya2dyZWVuIiksIGx0eSA9IDEsIHBjaCA9IDE5LCBiZz0id2hpdGUiKQ0KZ3JpZCgpDQoNCmBgYA0KDQoNCmBgYHtyIG90aGVyc2VydmljZXNlYXMsIGVjaG89RiwgbWVzc2FnZT1GfQ0KZGIuc2Vydi5vdGhlciA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiT3Ryb3Mgc2VydmljaW9zIildDQpkYi5zZXJ2Lm90aGVyWywtMV0gPSAxMDAgKiAoZGIuc2Vydi5vdGhlclssLTFdIC8gbGFnKGRiLnNlcnYub3RoZXJbLC0xXSkgLSAxKQ0KZGIuc2Vydi5vdGhlci5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5zZXJ2Lm90aGVyKSwgZnJlcT0iYml3ZWVrIikNCm5yb3d4LnNlcnYgPSBucm93KGRiLnNlcnYub3RoZXIuc2VhcykNCg0KIyBDaGFydA0KDQpwbG90KDE6bnJvd3guc2VydiwgZGIuc2Vydi5vdGhlci5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gY29yZSBkZSBzZXJ2acOnb3MgLSBvdXRyb3Mgc2VydmnDp29zIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiLnNlcnYub3RoZXIuc2Vhc1ssIC0xXSkpKSwgeGF4dCA9ICJuIiwgY29sLm1haW4gPSAiZGFya2JsdWUiKQ0KYXhpcygxLCBhdCA9IHNlcSgxLG5yb3d4LnNlcnYsYnk9MyksIGxhYmVscyA9IGRiLnNlcnYub3RoZXIuc2VhcyRiaXdlZWtbc2VxKDEsbnJvd3guc2VydixieT0zKV0pDQpsaW5lcygxOm5yb3d4LnNlcnYsIGRiLnNlcnYub3RoZXIuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3guc2VydiwgZGIuc2Vydi5vdGhlci5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KcG9seWdvbihjKDE6bnJvd3guc2VydiwgcmV2KDE6bnJvd3guc2VydikpLCAgICAgICAgICAgICAgICANCiAgICAgICAgYyhkYi5zZXJ2Lm90aGVyLnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuc2Vydi5vdGhlci5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiMjAyNSIsICIyMDI0IiwgIk1lZGlhbiIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiKSwgbHR5ID0gMSwgcGNoID0gMTksIGJnPSJ3aGl0ZSIpDQpncmlkKCkNCg0KYGBgDQoNCmBgYHtyIGhvdXNpbmdzZXJ2aWNlc2VhcywgZWNobz1GLCBtZXNzYWdlPUZ9DQpkYi5zZXJ2LmhvdXMgPSBkYi5pbnBjW2MoImRhdGVTZXNzaW9uIiwgIlZpdmllbmRhIildDQpkYi5zZXJ2LmhvdXNbLC0xXSA9IDEwMCAqIChkYi5zZXJ2LmhvdXNbLC0xXSAvIGxhZyhkYi5zZXJ2LmhvdXNbLC0xXSkgLSAxKQ0KZGIuc2Vydi5ob3VzLnNlYXMgPSBnZXQuc2Vhc29uYWwucGF0dGVybihuYS5vbWl0KGRiLnNlcnYuaG91cyksIGZyZXE9ImJpd2VlayIpDQpucm93eC5zZXJ2ID0gbnJvdyhkYi5zZXJ2LmhvdXMuc2VhcykNCg0KIyBDaGFydA0KDQpwbG90KDE6bnJvd3guc2VydiwgZGIuc2Vydi5ob3VzLnNlYXMkYFllYXIgMjAyNWAsIHR5cGUgPSAiYiIsIGNvbCA9ICJibGFjayIsIHBjaCA9IDE5LCBsd2QgPSAzLCB4bGFiID0gIlF1aW56ZW5hIiwgeWxhYiA9ICIlLCBCV29CVyIsIG1haW4gPSAiSW5mbGHDp8OjbyBjb3JlIGRlIHNlcnZpw6dvcyAtIGhvdXNpbmciLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGIuc2Vydi5ob3VzLnNlYXNbLCAtMV0pKSksIHhheHQgPSAibiIsIGNvbC5tYWluID0gImRhcmtibHVlIikNCmF4aXMoMSwgYXQgPSBzZXEoMSxucm93eC5zZXJ2LGJ5PTMpLCBsYWJlbHMgPSBkYi5zZXJ2LmhvdXMuc2VhcyRiaXdlZWtbc2VxKDEsbnJvd3guc2VydixieT0zKV0pDQpsaW5lcygxOm5yb3d4LnNlcnYsIGRiLnNlcnYuaG91cy5zZWFzJGBZZWFyIDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eC5zZXJ2LCBkYi5zZXJ2LmhvdXMuc2VhcyRgUXVhcnRpbGUgMC41YCwgdHlwZSA9ICJsIiwgY29sID0gImRhcmtyZWQiLCBwY2ggPSAxOSwgbHdkID0gMSkNCnBvbHlnb24oYygxOm5yb3d4LnNlcnYsIHJldigxOm5yb3d4LnNlcnYpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuc2Vydi5ob3VzLnNlYXMkYFF1YXJ0aWxlIDAuMjVgLCByZXYoZGIuc2Vydi5ob3VzLnNlYXMkYFF1YXJ0aWxlIDAuNzVgKSksICAgICAgICAgIA0KICAgICAgICBjb2wgPSByZ2IoMC41LCAwLjUsIDEsIDAuMyksICANCiAgICAgICAgYm9yZGVyID0gTkEpICANCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBjKCIyMDI1IiwgIjIwMjQiLCAiTWVkaWFuIiksIGNvbCA9IGMoImJsYWNrIiwgImJsdWUiLCAiZGFya3JlZCIpLCBsdHkgPSAxLCBwY2ggPSAxOSwgYmc9IndoaXRlIikNCmdyaWQoKQ0KDQpgYGANCg0KYGBge3IgZWR1Y3NlcnZpY2VzZWFzLCBlY2hvPUYsIG1lc3NhZ2U9Rn0NCmRiLnNlcnYuZWR1YyA9IGRiLmlucGNbYygiZGF0ZVNlc3Npb24iLCAiRWR1Y2FjacOzbiIpXQ0KZGIuc2Vydi5lZHVjWywtMV0gPSAxMDAgKiAoZGIuc2Vydi5lZHVjWywtMV0gLyBsYWcoZGIuc2Vydi5lZHVjWywtMV0pIC0gMSkNCmRiLnNlcnYuZWR1Yy5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5zZXJ2LmVkdWMpLCBmcmVxPSJiaXdlZWsiKQ0KbnJvd3guc2VydiA9IG5yb3coZGIuc2Vydi5lZHVjLnNlYXMpDQoNCiMgQ2hhcnQNCg0KcGxvdCgxOm5yb3d4LnNlcnYsIGRiLnNlcnYuZWR1Yy5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gY29yZSBkZSBzZXJ2acOnb3MgLSBlZHVjYcOnw6NvIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiLnNlcnYuZWR1Yy5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrYmx1ZSIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3guc2VydixieT0zKSwgbGFiZWxzID0gZGIuc2Vydi5lZHVjLnNlYXMkYml3ZWVrW3NlcSgxLG5yb3d4LnNlcnYsYnk9MyldKQ0KbGluZXMoMTpucm93eC5zZXJ2LCBkYi5zZXJ2LmVkdWMuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3guc2VydiwgZGIuc2Vydi5lZHVjLnNlYXMkYFF1YXJ0aWxlIDAuNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrcmVkIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpwb2x5Z29uKGMoMTpucm93eC5zZXJ2LCByZXYoMTpucm93eC5zZXJ2KSksICAgICAgICAgICAgICAgIA0KICAgICAgICBjKGRiLnNlcnYuZWR1Yy5zZWFzJGBRdWFydGlsZSAwLjI1YCwgcmV2KGRiLnNlcnYuZWR1Yy5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiMjAyNSIsICIyMDI0IiwgIk1lZGlhbiIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiKSwgbHR5ID0gMSwgcGNoID0gMTksIGJnPSJ3aGl0ZSIpDQpncmlkKCkNCg0KYGBgDQoNCjxoMiBzdHlsZT0iY29sb3I6ZGFya2dyYXk7Ij5JbmZsYcOnw6NvIGRlIG7DumNsZW9zIGRlIHNlcnZpw6dvczwvaDI+DQoNCmBgYHtyIGFpcmZhcmVzaW5mbCwgZWNobz1GLCBtZXNzYWdlPUZ9DQpkYi5haXJmYXJlcy5zZWFzID0gZGIuYWlyZmFyZXNbYygiZGF0ZVNlc3Npb24iLCAiVHJhbnNwb3J0ZSBhw6lyZW8iKV0NCmRiLmFpcmZhcmVzLnNlYXNbLC0xXSA9IDEwMCAqIChkYi5haXJmYXJlcy5zZWFzWywtMV0gLyBsYWcoZGIuYWlyZmFyZXMuc2Vhc1ssLTFdKSAtIDEpDQpkYi5haXJmYXJlcy5zZWFzID0gZ2V0LnNlYXNvbmFsLnBhdHRlcm4obmEub21pdChkYi5haXJmYXJlcy5zZWFzKSwgZnJlcT0iYml3ZWVrIikNCm5yb3d4LmFpcmZhcmVzID0gbnJvdyhkYi5haXJmYXJlcy5zZWFzKQ0KDQojIENoYXJ0DQoNCnBsb3QoMTpucm93eC5haXJmYXJlcywgZGIuYWlyZmFyZXMuc2VhcyRgWWVhciAyMDI1YCwgdHlwZSA9ICJiIiwgY29sID0gImJsYWNrIiwgcGNoID0gMTksIGx3ZCA9IDMsIHhsYWIgPSAiUXVpbnplbmEiLCB5bGFiID0gIiUsIEJXb0JXIiwgbWFpbiA9ICJJbmZsYcOnw6NvIGRlIHNlcnZpw6dvcyAtIHBhc3NhZ2VucyBhw6lyZWFzIiwgeWxpbSA9IHJhbmdlKG5hLm9taXQodW5saXN0KGRiLmFpcmZhcmVzLnNlYXNbLCAtMV0pKSksIHhheHQgPSAibiIsIGNvbC5tYWluID0gImRhcmtncmF5IikNCmF4aXMoMSwgYXQgPSBzZXEoMSxucm93eC5haXJmYXJlcyxieT0zKSwgbGFiZWxzID0gZGIuYWlyZmFyZXMuc2VhcyRiaXdlZWtbc2VxKDEsbnJvd3guYWlyZmFyZXMsYnk9MyldKQ0KbGluZXMoMTpucm93eC5haXJmYXJlcywgZGIuYWlyZmFyZXMuc2VhcyRgWWVhciAyMDI0YCwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiLCBwY2ggPSAxOSwgbHdkID0gMSkNCmxpbmVzKDE6bnJvd3guYWlyZmFyZXMsIGRiLmFpcmZhcmVzLnNlYXMkYFF1YXJ0aWxlIDAuNWAsIHR5cGUgPSAibCIsIGNvbCA9ICJkYXJrcmVkIiwgcGNoID0gMTksIGx3ZCA9IDEpDQpwb2x5Z29uKGMoMTpucm93eC5haXJmYXJlcywgcmV2KDE6bnJvd3guYWlyZmFyZXMpKSwgICAgICAgICAgICAgICAgDQogICAgICAgIGMoZGIuYWlyZmFyZXMuc2VhcyRgUXVhcnRpbGUgMC4yNWAsIHJldihkYi5haXJmYXJlcy5zZWFzJGBRdWFydGlsZSAwLjc1YCkpLCAgICAgICAgICANCiAgICAgICAgY29sID0gcmdiKDAuNSwgMC41LCAxLCAwLjMpLCAgDQogICAgICAgIGJvcmRlciA9IE5BKSAgDQpsZWdlbmQoInRvcHJpZ2h0IiwgbGVnZW5kID0gYygiMjAyNSIsICIyMDI0IiwgIk1lZGlhbiIpLCBjb2wgPSBjKCJibGFjayIsICJibHVlIiwgImRhcmtyZWQiKSwgbHR5ID0gMSwgcGNoID0gMTksIGJnPSJ3aGl0ZSIpDQpncmlkKCkNCg0KYGBgDQoNCmBgYHtyIG90aGVyZXhhaXJmYXJlcywgZWNobz1GLCBtZXNzYWdlPUZ9DQpkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMgPSBkYi5haXJmYXJlc1tjKCJkYXRlU2Vzc2lvbiIsICJUcmFuc3BvcnRlIGHDqXJlbyIsICJPdHJvcyBzZXJ2aWNpb3MiKV0NCmRiLm90aGVyLmV4YWlyZmFyZXMuc2VhcyRgT3RoZXIgZXgtYWlyZmFyZXNgID0gKHdvdGhlcnNlcnYgKiBkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMkYE90cm9zIHNlcnZpY2lvc2AgLSB3YWlyZmFyZXMgKiBkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMkYFRyYW5zcG9ydGUgYcOpcmVvYCkgLyAod290aGVyc2VydiAtIHdhaXJmYXJlcykNCmRiLm90aGVyLmV4YWlyZmFyZXMuc2Vhc1ssLTFdID0gMTAwICogKGRiLm90aGVyLmV4YWlyZmFyZXMuc2Vhc1ssLTFdIC8gbGFnKGRiLm90aGVyLmV4YWlyZmFyZXMuc2Vhc1ssLTFdKSAtIDEpDQpkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMgPSBkYi5vdGhlci5leGFpcmZhcmVzLnNlYXNbLGMoImRhdGVTZXNzaW9uIiwgIk90aGVyIGV4LWFpcmZhcmVzIildDQpkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMgPSBnZXQuc2Vhc29uYWwucGF0dGVybihuYS5vbWl0KGRiLm90aGVyLmV4YWlyZmFyZXMuc2VhcyksIGZyZXE9ImJpd2VlayIpDQpucm93eC5haXJmYXJlcyA9IG5yb3coZGIub3RoZXIuZXhhaXJmYXJlcy5zZWFzKQ0KDQojIENoYXJ0DQoNCnBsb3QoMTpucm93eC5haXJmYXJlcywgZGIub3RoZXIuZXhhaXJmYXJlcy5zZWFzJGBZZWFyIDIwMjVgLCB0eXBlID0gImIiLCBjb2wgPSAiYmxhY2siLCBwY2ggPSAxOSwgbHdkID0gMywgeGxhYiA9ICJRdWluemVuYSIsIHlsYWIgPSAiJSwgQldvQlciLCBtYWluID0gIkluZmxhw6fDo28gZGUgc2VydmnDp29zIC0gb3RoZXIgZXgtcGFzc2FnZW5zIGHDqXJlYXMiLCB5bGltID0gcmFuZ2UobmEub21pdCh1bmxpc3QoZGIub3RoZXIuZXhhaXJmYXJlcy5zZWFzWywgLTFdKSkpLCB4YXh0ID0gIm4iLCBjb2wubWFpbiA9ICJkYXJrZ3JheSIpDQpheGlzKDEsIGF0ID0gc2VxKDEsbnJvd3guYWlyZmFyZXMsYnk9MyksIGxhYmVscyA9IGRiLm90aGVyLmV4YWlyZmFyZXMuc2VhcyRiaXdlZWtbc2VxKDEsbnJvd3guYWlyZmFyZXMsYnk9MyldKQ0KbGluZXMoMTpucm93eC5haXJmYXJlcywgZGIub3RoZXIuZXhhaXJmYXJlcy5zZWFzJGBZZWFyIDIwMjRgLCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KbGluZXMoMTpucm93eC5haXJmYXJlcywgZGIub3RoZXIuZXhhaXJmYXJlcy5zZWFzJGBRdWFydGlsZSAwLjVgLCB0eXBlID0gImwiLCBjb2wgPSAiZGFya3JlZCIsIHBjaCA9IDE5LCBsd2QgPSAxKQ0KcG9seWdvbihjKDE6bnJvd3guYWlyZmFyZXMsIHJldigxOm5yb3d4LmFpcmZhcmVzKSksICAgICAgICAgICAgICAgIA0KICAgICAgICBjKGRiLm90aGVyLmV4YWlyZmFyZXMuc2VhcyRgUXVhcnRpbGUgMC4yNWAsIHJldihkYi5vdGhlci5leGFpcmZhcmVzLnNlYXMkYFF1YXJ0aWxlIDAuNzVgKSksICAgICAgICAgIA0KICAgICAgICBjb2wgPSByZ2IoMC41LCAwLjUsIDEsIDAuMyksICANCiAgICAgICAgYm9yZGVyID0gTkEpICANCmxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQgPSBjKCIyMDI1IiwgIjIwMjQiLCAiTWVkaWFuIiksIGNvbCA9IGMoImJsYWNrIiwgImJsdWUiLCAiZGFya3JlZCIpLCBsdHkgPSAxLCBwY2ggPSAxOSwgYmc9IndoaXRlIikNCmdyaWQoKQ0KDQpgYGANCg0KDQo=