@valbuild/ui 0.48.1 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/valbuild-ui.cjs.js +1526 -102
- package/dist/valbuild-ui.esm.js +1526 -102
- package/package.json +3 -3
- package/server/.tmp/assets/index-2l1Jwds9.css +1 -0
- package/server/.tmp/assets/index-URUxEXUs.js +201 -0
- package/server/.tmp/index.html +2 -2
- package/server/dist/valbuild-ui-main.cjs.js +1512 -578
- package/server/dist/valbuild-ui-main.esm.js +1512 -578
- package/server/dist/valbuild-ui-server.cjs.js +1 -1
- package/server/dist/valbuild-ui-server.esm.js +1 -1
- package/server/.tmp/assets/index-7FeUbHhm.css +0 -1
- package/server/.tmp/assets/index-P3ucL9Mc.js +0 -201
|
@@ -17,7 +17,7 @@ function getServerMimeType(path) {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
const files = JSON.parse(
|
|
20
|
-
`{"/assets/index-7FeUbHhm.css":"Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZTVlN2VifTpiZWZvcmUsOmFmdGVyey0tdHctY29udGVudDogIiJ9aHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b306LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19YmxvY2txdW90ZSxkbCxkZCxoMSxoMixoMyxoNCxoNSxoNixocixmaWd1cmUscCxwcmV7bWFyZ2luOjB9ZmllbGRzZXR7bWFyZ2luOjA7cGFkZGluZzowfWxlZ2VuZHtwYWRkaW5nOjB9b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpYWxvZ3twYWRkaW5nOjB9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWlucHV0OjotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfWlucHV0OjpwbGFjZWhvbGRlcix0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9YnV0dG9uLFtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX06aG9zdHstLWJhY2tncm91bmQ6IDAgMCUgMTAwJTstLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tY2FyZDogMCAwJSAxMDAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXI6IDAgMCUgMTAwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wcmltYXJ5OiAyMjIuMiA0Ny40JSAxMS4yJTstLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zZWNvbmRhcnk6IDIxMCA0MCUgOTYuMSU7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1tdXRlZDogMCAwJSA1Ny4zJTstLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklOy0tYWNjZW50OiAyNzMgNjAlIDUxJTstLWFjY2VudC1mb3JlZ3JvdW5kOiAxMTAgMTAlIDk0JTstLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlOy0taW5wdXQ6IDIxNC4zIDMxLjglIDkxLjQlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfTpyb290ey0tYmFja2dyb3VuZDogMTEwIDEwJSA5NCU7LS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLWNhcmQ6IDAgMCUgMTAwJTstLWNhcmQtZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyOiAwIDAlIDEwMCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tc2Vjb25kYXJ5OiAyMTAgNDAlIDk2LjElOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tbXV0ZWQ6IDAgMCUgNTcuMyU7LS1tdXRlZC1mb3JlZ3JvdW5kOiAyMTUuNCAxNi4zJSA0Ni45JTstLWFjY2VudDogMjczIDYwJSA1MSU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMTEwIDEwJSA5NCU7LS1kZXN0cnVjdGl2ZTogMCA4NC4yJSA2MC4yJTstLWRlc3RydWN0aXZlLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tYm9yZGVyOiAyMTQuMyAzMS44JSA5MS40JTstLWlucHV0OiAyMTIuNyA5LjElIDc2LjMlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfSpbZGF0YS1tb2RlPWRhcmtdey0tYmFja2dyb3VuZDogMCAwJSA0JTstLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tY2FyZDogMjIyLjIgODQlIDQuOSU7LS1jYXJkLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcG9wb3ZlcjogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcHJpbWFyeTogMjEwIDQwJSA5OCU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tc2Vjb25kYXJ5OiAyMTcuMiAzMi42JSAxNy41JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLW11dGVkOiAxNzggMjMlIDc2JTstLW11dGVkLWZvcmVncm91bmQ6IDIxNSAyMC4yJSA2NS4xJTstLWFjY2VudDogMTU5IDYwJSA1MSU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1kZXN0cnVjdGl2ZTogMCA2Mi44JSAzMC42JTstLWRlc3RydWN0aXZlLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tYm9yZGVyOiAyMTcuMiAzMi42JSAxNy41JTstLWlucHV0OiAyMTcuMiAzMi42JSAxNy41JTstLXJpbmc6IDIxMi43IDI2LjglIDgzLjklfSp7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX1ib2R5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKTtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfSosOmJlZm9yZSw6YWZ0ZXJ7LS10dy1ib3JkZXItc3BhY2luZy14OiAwOy0tdHctYm9yZGVyLXNwYWNpbmcteTogMDstLXR3LXRyYW5zbGF0ZS14OiAwOy0tdHctdHJhbnNsYXRlLXk6IDA7LS10dy1yb3RhdGU6IDA7LS10dy1za2V3LXg6IDA7LS10dy1za2V3LXk6IDA7LS10dy1zY2FsZS14OiAxOy0tdHctc2NhbGUteTogMTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczogcHJveGltaXR5Oy0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC10by1wb3NpdGlvbjogOy0tdHctb3JkaW5hbDogOy0tdHctc2xhc2hlZC16ZXJvOiA7LS10dy1udW1lcmljLWZpZ3VyZTogOy0tdHctbnVtZXJpYy1zcGFjaW5nOiA7LS10dy1udW1lcmljLWZyYWN0aW9uOiA7LS10dy1yaW5nLWluc2V0OiA7LS10dy1yaW5nLW9mZnNldC13aWR0aDogMHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6ICNmZmY7LS10dy1yaW5nLWNvbG9yOiByZ2IoNTkgMTMwIDI0NiAvIC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogMCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IH06OmJhY2tkcm9wey0tdHctYm9yZGVyLXNwYWNpbmcteDogMDstLXR3LWJvcmRlci1zcGFjaW5nLXk6IDA7LS10dy10cmFuc2xhdGUteDogMDstLXR3LXRyYW5zbGF0ZS15OiAwOy0tdHctcm90YXRlOiAwOy0tdHctc2tldy14OiAwOy0tdHctc2tldy15OiAwOy0tdHctc2NhbGUteDogMTstLXR3LXNjYWxlLXk6IDE7LS10dy1wYW4teDogOy0tdHctcGFuLXk6IDstLXR3LXBpbmNoLXpvb206IDstLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3M6IHByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiAjZmZmOy0tdHctcmluZy1jb2xvcjogcmdiKDU5IDEzMCAyNDYgLyAuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXJpbmctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgIzAwMDA7LS10dy1ibHVyOiA7LS10dy1icmlnaHRuZXNzOiA7LS10dy1jb250cmFzdDogOy0tdHctZ3JheXNjYWxlOiA7LS10dy1odWUtcm90YXRlOiA7LS10dy1pbnZlcnQ6IDstLXR3LXNhdHVyYXRlOiA7LS10dy1zZXBpYTogOy0tdHctZHJvcC1zaGFkb3c6IDstLXR3LWJhY2tkcm9wLWJsdXI6IDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6IDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OiA7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6IDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6IDstLXR3LWJhY2tkcm9wLWludmVydDogOy0tdHctYmFja2Ryb3Atb3BhY2l0eTogOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6IDstLXR3LWJhY2tkcm9wLXNlcGlhOiB9LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uZml4ZWR7cG9zaXRpb246Zml4ZWR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MH0uaW5zZXQteS0we3RvcDowO2JvdHRvbTowfS4tbGVmdC0ye2xlZnQ6LS41cmVtfS4tcmlnaHQtXFsxMHB4XF17cmlnaHQ6LTEwcHh9Li10b3AtXFsxMHB4XF17dG9wOi0xMHB4fS4tdG9wLVxbNHB4XF17dG9wOi00cHh9LmJvdHRvbS0we2JvdHRvbTowfS5sZWZ0LTB7bGVmdDowfS5sZWZ0LTF7bGVmdDouMjVyZW19LmxlZnQtMntsZWZ0Oi41cmVtfS5sZWZ0LVxbNTBcJVxde2xlZnQ6NTAlfS5yaWdodC0we3JpZ2h0OjB9LnJpZ2h0LTF7cmlnaHQ6LjI1cmVtfS5yaWdodC00e3JpZ2h0OjFyZW19LnJpZ2h0LVxbMTZweFxde3JpZ2h0OjE2cHh9LnRvcC0we3RvcDowfS50b3AtMVwvMnt0b3A6NTAlfS50b3AtNHt0b3A6MXJlbX0udG9wLVxbNTBcJVxde3RvcDo1MCV9LnotNTB7ei1pbmRleDo1MH0uei1cWzFcXXt6LWluZGV4OjF9LnotXFs1XF17ei1pbmRleDo1fS56LW92ZXJsYXl7ei1pbmRleDo0fS5tLTR7bWFyZ2luOjFyZW19Li1teC0xe21hcmdpbi1sZWZ0Oi0uMjVyZW07bWFyZ2luLXJpZ2h0Oi0uMjVyZW19Li1teS0ye21hcmdpbi10b3A6LS41cmVtO21hcmdpbi1ib3R0b206LS41cmVtfS4tbXktXFsxMDBweFxde21hcmdpbi10b3A6LTEwMHB4O21hcmdpbi1ib3R0b206LTEwMHB4fS5teC0ye21hcmdpbi1sZWZ0Oi41cmVtO21hcmdpbi1yaWdodDouNXJlbX0ubXktMXttYXJnaW4tdG9wOi4yNXJlbTttYXJnaW4tYm90dG9tOi4yNXJlbX0ubWItNHttYXJnaW4tYm90dG9tOjFyZW19Lm1sLTB7bWFyZ2luLWxlZnQ6MH0ubWwtMnttYXJnaW4tbGVmdDouNXJlbX0ubWwtXFsyMHB4XF17bWFyZ2luLWxlZnQ6MjBweH0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5tci0ye21hcmdpbi1yaWdodDouNXJlbX0ubXQtMnttYXJnaW4tdG9wOi41cmVtfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uYXNwZWN0LXNxdWFyZXthc3BlY3QtcmF0aW86MSAvIDF9LmgtMTB7aGVpZ2h0OjIuNXJlbX0uaC0xMXtoZWlnaHQ6Mi43NXJlbX0uaC0ye2hlaWdodDouNXJlbX0uaC0yXC41e2hlaWdodDouNjI1cmVtfS5oLTN7aGVpZ2h0Oi43NXJlbX0uaC0zXC41e2hlaWdodDouODc1cmVtfS5oLTR7aGVpZ2h0OjFyZW19LmgtN3toZWlnaHQ6MS43NXJlbX0uaC05e2hlaWdodDoyLjI1cmVtfS5oLVxbMTAwXF17aGVpZ2h0OjEwMH0uaC1cWzEycHhcXXtoZWlnaHQ6MTJweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzFweFxde2hlaWdodDoxcHh9LmgtXFsyMHB4XF17aGVpZ2h0OjIwcHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNHB4XF17aGVpZ2h0OjI0cHh9LmgtXFszMnB4XF17aGVpZ2h0OjMycHh9LmgtXFs1MHB4XF17aGVpZ2h0OjUwcHh9LmgtXFs3NXB4XF17aGVpZ2h0Ojc1cHh9LmgtXFs5cHhcXXtoZWlnaHQ6OXB4fS5oLVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpXF17aGVpZ2h0OnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLVxbMzAwcHhcXXttYXgtaGVpZ2h0OjMwMHB4fS5tYXgtaC1cWzUwMHB4XF17bWF4LWhlaWdodDo1MDBweH0ubWluLWgtXFsyMDBweFxde21pbi1oZWlnaHQ6MjAwcHh9Lm1pbi1oLVxbMzAwcHhcXXttaW4taGVpZ2h0OjMwMHB4fS5taW4taC1zY3JlZW57bWluLWhlaWdodDoxMDB2aH0udy0we3dpZHRoOjBweH0udy0xXC8ze3dpZHRoOjMzLjMzMzMzMyV9LnctMTB7d2lkdGg6Mi41cmVtfS53LTJ7d2lkdGg6LjVyZW19LnctMlwuNXt3aWR0aDouNjI1cmVtfS53LTN7d2lkdGg6Ljc1cmVtfS53LTNcLjV7d2lkdGg6Ljg3NXJlbX0udy00e3dpZHRoOjFyZW19LnctNXt3aWR0aDoxLjI1cmVtfS53LTd7d2lkdGg6MS43NXJlbX0udy03Mnt3aWR0aDoxOHJlbX0udy05e3dpZHRoOjIuMjVyZW19LnctXFsxMnB4XF17d2lkdGg6MTJweH0udy1cWzE0cHhcXXt3aWR0aDoxNHB4fS53LVxbMXB4XF17d2lkdGg6MXB4fS53LVxbMjBweFxde3dpZHRoOjIwcHh9LnctXFsyNHB4XF17d2lkdGg6MjRweH0udy1cWzMwMHB4XF17d2lkdGg6MzAwcHh9LnctXFszMnB4XF17d2lkdGg6MzJweH0udy1cWzQ0cHhcXXt3aWR0aDo0NHB4fS53LVxbOXB4XF17d2lkdGg6OXB4fS53LWZpdHt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fS53LWZ1bGx7d2lkdGg6MTAwJX0udy1zY3JlZW57d2lkdGg6MTAwdnd9Lm1pbi13LTB7bWluLXdpZHRoOjBweH0ubWluLXctXFszMjBweFxde21pbi13aWR0aDozMjBweH0ubWluLXctXFs1MDBweFxde21pbi13aWR0aDo1MDBweH0ubWluLXctXFs4cmVtXF17bWluLXdpZHRoOjhyZW19Lm1pbi13LVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoXClcXXttaW4td2lkdGg6dmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpfS5tYXgtdy1cWzEwMDBweFxde21heC13aWR0aDoxMDAwcHh9Lm1heC13LVxbMTB2d1xde21heC13aWR0aDoxMHZ3fS5tYXgtdy1cWzMwMHB4XF17bWF4LXdpZHRoOjMwMHB4fS5tYXgtdy1cWzkwdndcXXttYXgtd2lkdGg6OTB2d30ubWF4LXctbGd7bWF4LXdpZHRoOjMycmVtfS5tYXgtdy14bHttYXgtd2lkdGg6MzZyZW19LmZsZXgtMXtmbGV4OjEgMSAwJX0uZmxleC1hdXRve2ZsZXg6MSAxIGF1dG99LmZsZXgtc2hyaW5rLTAsLnNocmluay0we2ZsZXgtc2hyaW5rOjB9LmZsZXgtZ3Jvd3tmbGV4LWdyb3c6MX0uYm9yZGVyLWNvbGxhcHNle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uLXRyYW5zbGF0ZS15LTFcLzJ7LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNsYXRlLXgtXFstNTBcJVxdey0tdHctdHJhbnNsYXRlLXg6IC01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zbGF0ZS15LVxbLTUwXCVcXXstLXR3LXRyYW5zbGF0ZS15OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS4tcm90YXRlLTkwey0tdHctcm90YXRlOiAtOTBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnJvdGF0ZS05MHstLXR3LXJvdGF0ZTogOTBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnJvdGF0ZS1cWy05MGRlZ1xdey0tdHctcm90YXRlOiAtOTBkZWc7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnJvdGF0ZS1cWzkwZGVnXF17LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS50cmFuc2Zvcm17dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmN1cnNvci1jb2wtcmVzaXple2N1cnNvcjpjb2wtcmVzaXplfS5jdXJzb3ItZGVmYXVsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWdyYWJ7Y3Vyc29yOmdyYWJ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3Itc2UtcmVzaXple2N1cnNvcjpzZS1yZXNpemV9LnRvdWNoLW5vbmV7dG91Y2gtYWN0aW9uOm5vbmV9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0ucmVzaXplLW5vbmV7cmVzaXplOm5vbmV9LnJlc2l6ZXtyZXNpemU6Ym90aH0ubGlzdC1kZWNpbWFse2xpc3Qtc3R5bGUtdHlwZTpkZWNpbWFsfS5saXN0LWRpc2N7bGlzdC1zdHlsZS10eXBlOmRpc2N9LmdyaWQtY29scy1cW21pbi1jb250ZW50XzFmclxde2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW4tY29udGVudCAxZnJ9LmdyaWQtcm93cy1cWzFmclwsX21pbi1jb250ZW50XF17Z3JpZC10ZW1wbGF0ZS1yb3dzOjFmciBtaW4tY29udGVudH0uZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5mbGV4LWNvbHtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmZsZXgtY29sLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9Lml0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9Lml0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9Lmp1c3RpZnktZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5nYXAtMXtnYXA6LjI1cmVtfS5nYXAtMntnYXA6LjVyZW19LmdhcC0ze2dhcDouNzVyZW19LmdhcC00e2dhcDoxcmVtfS5nYXAtNXtnYXA6MS4yNXJlbX0uZ2FwLVxbMFwuNWVtXF17Z2FwOi41ZW19LmdhcC1cWzM2cHhcXXtnYXA6MzZweH0uZ2FwLXgtNHstbW96LWNvbHVtbi1nYXA6MXJlbTtjb2x1bW4tZ2FwOjFyZW19LmdhcC15LTF7cm93LWdhcDouMjVyZW19LmdhcC15LTJ7cm93LWdhcDouNXJlbX0uZ2FwLXktNHtyb3ctZ2FwOjFyZW19LnNwYWNlLXgtMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc3BhY2UteS0xPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTFcLjU+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4zNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS0yPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3ctY2xpcHtvdmVyZmxvdzpjbGlwfS5vdmVyZmxvdy1zY3JvbGx7b3ZlcmZsb3c6c2Nyb2xsfS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1zY3JvbGx7b3ZlcmZsb3cteTpzY3JvbGx9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbaW5oZXJpdFxde2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6OTk5OXB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LnJvdW5kZWQtc217Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5yb3VuZGVkLWItbm9uZXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ucm91bmRlZC1iLXNte2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5yb3VuZGVkLXQtbm9uZXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uYm9yZGVye2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0yLC5ib3JkZXItXFsycHhcXXtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXIteHtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLXl7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYi0we2JvcmRlci1ib3R0b20td2lkdGg6MHB4fS5ib3JkZXItYi0ye2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS5ib3JkZXItbHtib3JkZXItbGVmdC13aWR0aDoxcHh9LmJvcmRlci1sLTJ7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItdHtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXQtMHtib3JkZXItdG9wLXdpZHRoOjBweH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJvcmRlci1ncmF5LTQwMHstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMTU2IDE2MyAxNzUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfS5ib3JkZXItaW5wdXR7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1pbnB1dCkpfS5ib3JkZXItcHJpbWFyeXtib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uYm9yZGVyLXRyYW5zcGFyZW50e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLWwtdHJhbnNwYXJlbnR7Ym9yZGVyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnR9LmJvcmRlci10LXRyYW5zcGFyZW50e2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uYmctYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmJnLWJhY2tncm91bmRcLzgwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpIC8gLjgpfS5iZy1ib3JkZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJnLWNhcmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZCkpfS5iZy1jYXJkLWZvcmVncm91bmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LmJnLWRlc3RydWN0aXZle2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LmJnLWdyYXktMzAwey0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyMDkgMjEzIDIxOSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctZ3JheS01MDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDEwNyAxMTQgMTI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS5iZy1wb3BvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXBvcG92ZXIpKX0uYmctcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmJnLXJlZC01MDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDIzOSA2OCA2OCAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXNlY29uZGFyeSkpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5iZy13aGl0ZXstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1iZy1vcGFjaXR5KSl9LmJnLWdyYWRpZW50LXRvLWJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmJnLWdyYWRpZW50LXRvLWJye2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSByaWdodCx2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpfS5mcm9tLWJhY2tncm91bmRcLzkwey0tdHctZ3JhZGllbnQtZnJvbTogaHNsKHZhcigtLWJhY2tncm91bmQpIC8gLjkpIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLWNhcmR7LS10dy1ncmFkaWVudC1mcm9tOiBoc2wodmFyKC0tY2FyZCkpIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1jYXJkKSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLXRyYW5zcGFyZW50ey0tdHctZ3JhZGllbnQtZnJvbTogdHJhbnNwYXJlbnQgdmFyKC0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbik7LS10dy1ncmFkaWVudC10bzogcmdiKDAgMCAwIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LmZyb20tNDBcJXstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDQwJX0uZnJvbS01MFwley0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogNTAlfS50by1iYWNrZ3JvdW5key0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS5maWxsLWN1cnJlbnR7ZmlsbDpjdXJyZW50Q29sb3J9LmZpbGwtd2hpdGV7ZmlsbDojZmZmfS5zdHJva2UtXFsycHhcXXtzdHJva2Utd2lkdGg6MnB4fS5zdHJva2UtXFszcHhcXXtzdHJva2Utd2lkdGg6M3B4fS5vYmplY3QtY29udGFpbnstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMTB7cGFkZGluZzoyLjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucC1cWzFweFxde3BhZGRpbmc6MXB4fS5weC0xe3BhZGRpbmctbGVmdDouMjVyZW07cGFkZGluZy1yaWdodDouMjVyZW19LnB4LTJ7cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LnB4LTJcLjV7cGFkZGluZy1sZWZ0Oi42MjVyZW07cGFkZGluZy1yaWdodDouNjI1cmVtfS5weC0ze3BhZGRpbmctbGVmdDouNzVyZW07cGFkZGluZy1yaWdodDouNzVyZW19LnB4LTR7cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5weC01e3BhZGRpbmctbGVmdDoxLjI1cmVtO3BhZGRpbmctcmlnaHQ6MS4yNXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB4LVxbMjRweFxde3BhZGRpbmctbGVmdDoyNHB4O3BhZGRpbmctcmlnaHQ6MjRweH0ucHgtXFsycHhcXXtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MnB4fS5weS0xe3BhZGRpbmctdG9wOi4yNXJlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LnB5LTFcLjV7cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5weS0ye3BhZGRpbmctdG9wOi41cmVtO3BhZGRpbmctYm90dG9tOi41cmVtfS5weS0ze3BhZGRpbmctdG9wOi43NXJlbTtwYWRkaW5nLWJvdHRvbTouNzVyZW19LnB5LTR7cGFkZGluZy10b3A6MXJlbTtwYWRkaW5nLWJvdHRvbToxcmVtfS5weS02e3BhZGRpbmctdG9wOjEuNXJlbTtwYWRkaW5nLWJvdHRvbToxLjVyZW19LnB5LTd7cGFkZGluZy10b3A6MS43NXJlbTtwYWRkaW5nLWJvdHRvbToxLjc1cmVtfS5weS1cWzJweFxde3BhZGRpbmctdG9wOjJweDtwYWRkaW5nLWJvdHRvbToycHh9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItMjB7cGFkZGluZy1ib3R0b206NXJlbX0ucGItNHtwYWRkaW5nLWJvdHRvbToxcmVtfS5wYi04e3BhZGRpbmctYm90dG9tOjJyZW19LnBsLTB7cGFkZGluZy1sZWZ0OjB9LnBsLTZ7cGFkZGluZy1sZWZ0OjEuNXJlbX0ucGwtOHtwYWRkaW5nLWxlZnQ6MnJlbX0ucGwtXFszMDBweFxde3BhZGRpbmctbGVmdDozMDBweH0ucHItMntwYWRkaW5nLXJpZ2h0Oi41cmVtfS5wdC0we3BhZGRpbmctdG9wOjB9LnB0LTF7cGFkZGluZy10b3A6LjI1cmVtfS5wdC0ye3BhZGRpbmctdG9wOi41cmVtfS5wdC00e3BhZGRpbmctdG9wOjFyZW19LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LXN0YXJ0e3RleHQtYWxpZ246c3RhcnR9LmZvbnQtc2Fuc3tmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZn0uZm9udC1zZXJpZntmb250LWZhbWlseTpTcGFjZSBNb25vLG1vbm9zcGFjZX0udGV4dC0yeGx7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoycmVtfS50ZXh0LTN4bHtmb250LXNpemU6MS44NzVyZW07bGluZS1oZWlnaHQ6Mi4yNXJlbX0udGV4dC00eGx7Zm9udC1zaXplOjIuMjVyZW07bGluZS1oZWlnaHQ6Mi41cmVtfS50ZXh0LVxbMFwuOHJlbVxde2ZvbnQtc2l6ZTouOHJlbX0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1sZ3tmb250LXNpemU6MS4xMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0udGV4dC1zbXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS50ZXh0LXhse2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LnRleHQteHN7Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxcmVtfS5mb250LVxbMTJweFxde2ZvbnQtd2VpZ2h0OjEycHh9LmZvbnQtXFs0MDBcXXtmb250LXdlaWdodDo0MDB9LmZvbnQtXFs1MDBcXXtmb250LXdlaWdodDo1MDB9LmZvbnQtXFs1NTBcXXtmb250LXdlaWdodDo1NTB9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZvbnQtZXh0cmFib2xke2ZvbnQtd2VpZ2h0OjgwMH0uZm9udC1tZWRpdW17Zm9udC13ZWlnaHQ6NTAwfS5mb250LW5vcm1hbHtmb250LXdlaWdodDo0MDB9LmZvbnQtc2VtaWJvbGR7Zm9udC13ZWlnaHQ6NjAwfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LmxlYWRpbmctNHtsaW5lLWhlaWdodDoxcmVtfS5sZWFkaW5nLW5vbmV7bGluZS1oZWlnaHQ6MX0udHJhY2tpbmctXFswXC4wNGVtXF17bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLXRpZ2h0e2xldHRlci1zcGFjaW5nOi0uMDI1ZW19LnRyYWNraW5nLXdpZGVye2xldHRlci1zcGFjaW5nOi4wNWVtfS50cmFja2luZy13aWRlc3R7bGV0dGVyLXNwYWNpbmc6LjFlbX0udGV4dC1hY2NlbnR7Y29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS50ZXh0LWFjY2VudC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS50ZXh0LWJhY2tncm91bmR7Y29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0udGV4dC1jYXJkLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWNhcmQtZm9yZWdyb3VuZCkpfS50ZXh0LWN1cnJlbnR7Y29sb3I6Y3VycmVudENvbG9yfS50ZXh0LWRlc3RydWN0aXZle2NvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpfS50ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlLWZvcmVncm91bmQpKX0udGV4dC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9LnRleHQtbXV0ZWR7Y29sb3I6aHNsKHZhcigtLW11dGVkKSl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS50ZXh0LXBvcG92ZXItZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcG9wb3Zlci1mb3JlZ3JvdW5kKSl9LnRleHQtcHJpbWFyeXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS50ZXh0LXByaW1hcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXNlY29uZGFyeS1mb3JlZ3JvdW5kKSl9LnRleHQtd2hpdGV7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1NSAyNTUgMjU1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5KSl9LnVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmxpbmUtdGhyb3VnaHt0ZXh0LWRlY29yYXRpb24tbGluZTpsaW5lLXRocm91Z2h9LnVuZGVybGluZS1vZmZzZXQtNHt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6NHB4fS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS03MHtvcGFjaXR5Oi43fS5vcGFjaXR5LTc1e29wYWNpdHk6Ljc1fS5taXgtYmxlbmQtZGlmZmVyZW5jZXttaXgtYmxlbmQtbW9kZTpkaWZmZXJlbmNlfS5zaGFkb3d7LS10dy1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LWxney0tdHctc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYigwIDAgMCAvIC4xKSwgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMTBweCAxNXB4IC0zcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCA0cHggNnB4IC00cHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbWR7LS10dy1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IHJnYigwIDAgMCAvIC4xKSwgMCAycHggNHB4IC0ycHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgNHB4IDZweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMnB4IDRweCAtMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LXNtey0tdHctc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAuMDUpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDJweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0ub3V0bGluZS1ub25le291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnNvbGlkfS5yaW5nLTB7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcik7LS10dy1yaW5nLXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgY2FsYygwcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93LCAwIDAgIzAwMDApfS5yaW5nLW9mZnNldC1iYWNrZ3JvdW5key0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRyb3Atc2hhZG93LTJ4bHstLXR3LWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdygwIDI1cHggMjVweCByZ2IoMCAwIDAgLyAuMTUpKTtmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uZHJvcC1zaGFkb3ctXFswcHhfMHB4XzEycHhfaHNsXCh2YXJcKC0tYWNjZW50XClcKVxdey0tdHctZHJvcC1zaGFkb3c6IGRyb3Atc2hhZG93KDBweCAwcHggMTJweCBoc2wodmFyKC0tYWNjZW50KSkpO2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmJhY2tkcm9wLWJsdXItbGd7LS10dy1iYWNrZHJvcC1ibHVyOiBibHVyKDE2cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1cikgdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcykgdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QpIHZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkgdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSkgdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0KSB2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSB2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSkgdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEpfS5iYWNrZHJvcC1ibHVyLXNtey0tdHctYmFja2Ryb3AtYmx1cjogYmx1cig0cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1cikgdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcykgdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QpIHZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkgdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSkgdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0KSB2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSB2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSkgdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEpfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tdHJhbnNmb3Jte3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMTUwe3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwe3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5lYXNlLWluLW91dHt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX1Aa2V5ZnJhbWVzIGVudGVyezAle29wYWNpdHk6dmFyKC0tdHctZW50ZXItb3BhY2l0eSwgMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwgMSksdmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWVudGVyLXJvdGF0ZSwgMCkpfX1Aa2V5ZnJhbWVzIGV4aXR7dG97b3BhY2l0eTp2YXIoLS10dy1leGl0LW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS15LCAwKSwwKSBzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpKSByb3RhdGUodmFyKC0tdHctZXhpdC1yb3RhdGUsIDApKX19LmFuaW1hdGUtaW57YW5pbWF0aW9uLW5hbWU6ZW50ZXI7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1lbnRlci1vcGFjaXR5OiBpbml0aWFsOy0tdHctZW50ZXItc2NhbGU6IGluaXRpYWw7LS10dy1lbnRlci1yb3RhdGU6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiBpbml0aWFsfS5mYWRlLWluLTB7LS10dy1lbnRlci1vcGFjaXR5OiAwfS56b29tLWluLTk1ey0tdHctZW50ZXItc2NhbGU6IC45NX0uZHVyYXRpb24tMTUwe2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7YW5pbWF0aW9uLWR1cmF0aW9uOi4yc30uZWFzZS1pbi1vdXR7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0uZmlsZVw6Ym9yZGVyLTA6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JvcmRlci13aWR0aDowcHh9LmZpbGVcOmJnLXRyYW5zcGFyZW50OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5maWxlXDp0ZXh0LXNtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS5maWxlXDpmb250LW1lZGl1bTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC13ZWlnaHQ6NTAwfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LnBsYWNlaG9sZGVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6OnBsYWNlaG9sZGVye2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmZvY3VzLXdpdGhpblw6cmVsYXRpdmU6Zm9jdXMtd2l0aGlue3Bvc2l0aW9uOnJlbGF0aXZlfS5ob3Zlclw6dy1cWzJweFxdOmhvdmVye3dpZHRoOjJweH0uaG92ZXJcOnctXFszcHhcXTpob3Zlcnt3aWR0aDozcHh9LmhvdmVyXDpjdXJzb3ItcG9pbnRlcjpob3ZlcntjdXJzb3I6cG9pbnRlcn0uaG92ZXJcOnJvdW5kZWQtbGc6aG92ZXJ7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5ob3Zlclw6YmctYWNjZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ob3Zlclw6YmctYm9yZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC45KX0uaG92ZXJcOmJnLW11dGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmhvdmVyXDpiZy1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uaG92ZXJcOmJnLXByaW1hcnlcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjkpfS5ob3Zlclw6YmctcmVkLTcwMDpob3ZlcnstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTg1IDI4IDI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5ob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1zZWNvbmRhcnkpIC8gLjgpfS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC13aGl0ZTpob3ZlcnstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0uaG92ZXJcOnVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmhvdmVyXDpvcGFjaXR5LTEwMDpob3ZlcntvcGFjaXR5OjF9LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZvY3VzXDpiZy1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZm9jdXNcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LmZvY3VzXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpmb2N1c3tjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1c1w6cmluZy0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0uZm9jdXNcOnJpbmctcmluZzpmb2N1c3stLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LmZvY3VzXDpyaW5nLW9mZnNldC0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1ub25lOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLWFjY2VudDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5mb2N1cy12aXNpYmxlXDpyaW5nLTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzLXZpc2libGVcOnJpbmctcmluZzpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXJpbmcpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtYmFja2dyb3VuZDpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC1iYWNrZ3JvdW5kOmRpc2FibGVke2NvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOm9wYWNpdHktNzB7b3BhY2l0eTouN30uYXJpYS1zZWxlY3RlZFw6YmctYWNjZW50W2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmFyaWEtc2VsZWN0ZWRcOnRleHQtYWNjZW50LWZvcmVncm91bmRbYXJpYS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uYXJpYS1zZWxlY3RlZFw6b3BhY2l0eS0xMDBbYXJpYS1zZWxlY3RlZD10cnVlXXtvcGFjaXR5OjF9LmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6dHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9Ym90dG9tXXstLXR3LXRyYW5zbGF0ZS15OiAuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOi10cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1sZWZ0XXstLXR3LXRyYW5zbGF0ZS14OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9cmlnaHRcXVw6dHJhbnNsYXRlLXgtMVtkYXRhLXNpZGU9cmlnaHRdey0tdHctdHJhbnNsYXRlLXg6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPXRvcFxdXDotdHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9dG9wXXstLXR3LXRyYW5zbGF0ZS15OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtNVtkYXRhLXN0YXRlPWNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDEuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOnRyYW5zbGF0ZS14LTBbZGF0YS1zdGF0ZT11bmNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi11cHswJXtoZWlnaHQ6dmFyKC0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0KX10b3toZWlnaHQ6MH19LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmFuaW1hdGUtYWNjb3JkaW9uLXVwW2RhdGEtc3RhdGU9Y2xvc2VkXXthbmltYXRpb246YWNjb3JkaW9uLXVwIC4ycyBlYXNlLW91dH1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmFuaW1hdGUtYWNjb3JkaW9uLWRvd25bZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gLjJzIGVhc2Utb3V0fS5kYXRhLVxbc3RhdGVcPWFjdGl2ZVxdXDpiZy1iYWNrZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b25dLC5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT11bmNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOnNoYWRvdy1zbVtkYXRhLXN0YXRlPWFjdGl2ZV17LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1pbltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1uYW1lOmV4aXQ7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1leGl0LW9wYWNpdHk6IGluaXRpYWw7LS10dy1leGl0LXNjYWxlOiBpbml0aWFsOy0tdHctZXhpdC1yb3RhdGU6IGluaXRpYWw7LS10dy1leGl0LXRyYW5zbGF0ZS14OiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6ZmFkZS1vdXQtMFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdC0xXC8yW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteDogLTUwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tdG9wLVxbNDhcJVxdW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogLTQ4JX06aXMoW2RhdGEtbW9kZT1kYXJrXSAuZGFya1w6Ym9yZGVyLXdoaXRlKXstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfUBtZWRpYSAobWluLXdpZHRoOiA2NDBweCl7LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmJsb2Nre2Rpc3BsYXk6YmxvY2t9LnNtXDpmbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpzcGFjZS14LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zbVw6c3BhY2UteC00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteC1yZXZlcnNlOiAwO21hcmdpbi1yaWdodDpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS15LTA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDBweCAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMHB4ICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNtXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uc21cOnAtMHtwYWRkaW5nOjB9LnNtXDp0ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5tZFw6cmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Lm1kXDpmbGV4e2Rpc3BsYXk6ZmxleH0ubWRcOmhpZGRlbntkaXNwbGF5Om5vbmV9Lm1kXDp3LVxbMzAwcHhcXXt3aWR0aDozMDBweH0ubWRcOnctZnVsbHt3aWR0aDoxMDAlfS5tZFw6cHgtNHtwYWRkaW5nLWxlZnQ6MXJlbTtwYWRkaW5nLXJpZ2h0OjFyZW19Lm1kXDpwbC0we3BhZGRpbmctbGVmdDowfX0uXFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOmJnLWFjY2VudDpoYXMoW2FyaWEtc2VsZWN0ZWRdKXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZmlyc3RcOlxbXCZcOmhhc1woXFthcmlhLXNlbGVjdGVkXF1cKVxdXDpyb3VuZGVkLWwtbWQ6aGFzKFthcmlhLXNlbGVjdGVkXSk6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0ubGFzdFw6XFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOnJvdW5kZWQtci1tZDpoYXMoW2FyaWEtc2VsZWN0ZWRdKTpsYXN0LWNoaWxke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uXFtcJlxbZGF0YS1zdGF0ZVw9b3BlblxdXD5zdmdcXVw6cm90YXRlLTE4MFtkYXRhLXN0YXRlPW9wZW5dPnN2Z3stLXR3LXJvdGF0ZTogMTgwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6cHgtMiBbY21kay1ncm91cC1oZWFkaW5nXXtwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnB5LTFcLjUgW2NtZGstZ3JvdXAtaGVhZGluZ117cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6dGV4dC14cyBbY21kay1ncm91cC1oZWFkaW5nXXtmb250LXNpemU6Ljc1cmVtO2xpbmUtaGVpZ2h0OjFyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpmb250LW1lZGl1bSBbY21kay1ncm91cC1oZWFkaW5nXXtmb250LXdlaWdodDo1MDB9LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDp0ZXh0LW11dGVkLWZvcmVncm91bmQgW2NtZGstZ3JvdXAtaGVhZGluZ117Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0uXFtcJl9cW2NtZGstZ3JvdXBcXVw6bm90XChcW2hpZGRlblxdXClfXH5cW2NtZGstZ3JvdXBcXVxdXDpwdC0wIFtjbWRrLWdyb3VwXTpub3QoW2hpZGRlbl0pfltjbWRrLWdyb3VwXXtwYWRkaW5nLXRvcDowfS5cW1wmX1xbY21kay1ncm91cFxdXF1cOnB4LTIgW2NtZGstZ3JvdXBde3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1pbnB1dC13cmFwcGVyXF1fc3ZnXF1cOmgtNSBbY21kay1pbnB1dC13cmFwcGVyXSBzdmd7aGVpZ2h0OjEuMjVyZW19LlxbXCZfXFtjbWRrLWlucHV0LXdyYXBwZXJcXV9zdmdcXVw6dy01IFtjbWRrLWlucHV0LXdyYXBwZXJdIHN2Z3t3aWR0aDoxLjI1cmVtfS5cW1wmX1xbY21kay1pbnB1dFxdXF1cOmgtMTIgW2NtZGstaW5wdXRde2hlaWdodDozcmVtfS5cW1wmX1xbY21kay1pdGVtXF1cXVw6cHgtMiBbY21kay1pdGVtXXtwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0uXFtcJl9cW2NtZGstaXRlbVxdXF1cOnB5LTMgW2NtZGstaXRlbV17cGFkZGluZy10b3A6Ljc1cmVtO3BhZGRpbmctYm90dG9tOi43NXJlbX0uXFtcJl9cW2NtZGstaXRlbVxdX3N2Z1xdXDpoLTUgW2NtZGstaXRlbV0gc3Zne2hlaWdodDoxLjI1cmVtfS5cW1wmX1xbY21kay1pdGVtXF1fc3ZnXF1cOnctNSBbY21kay1pdGVtXSBzdmd7d2lkdGg6MS4yNXJlbX0K","/assets/index-P3ucL9Mc.js":"dmFyIHhiPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgX2I9KHQsZSxuKT0+ZSBpbiB0P3hiKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pOnRbZV09bjt2YXIgUWU9KHQsZSxuKT0+KF9iKHQsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSxuKSxuKSx3Yj0odCxlLG4pPT57aWYoIWUuaGFzKHQpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9O3ZhciBpaD0odCxlLG4pPT57aWYoZS5oYXModCkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7ZSBpbnN0YW5jZW9mIFdlYWtTZXQ/ZS5hZGQodCk6ZS5zZXQodCxuKX07dmFyIFh1PSh0LGUsbik9Pih3Yih0LGUsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO2Z1bmN0aW9uIFRfKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZVtuXTtpZih0eXBlb2YgciE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KHIpKXtmb3IoY29uc3QgaSBpbiByKWlmKGkhPT0iZGVmYXVsdCImJiEoaSBpbiB0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsaSk7byYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvLmdldD9vOntlbnVtZXJhYmxlOiEwLGdldDooKT0+cltpXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX0oZnVuY3Rpb24oKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKGUmJmUuc3VwcG9ydHMmJmUuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXIoaSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoaT0+e2Zvcihjb25zdCBvIG9mIGkpaWYoby50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IGwgb2Ygby5hZGRlZE5vZGVzKWwudGFnTmFtZT09PSJMSU5LIiYmbC5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnIobCl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4oaSl7Y29uc3Qgbz17fTtyZXR1cm4gaS5pbnRlZ3JpdHkmJihvLmludGVncml0eT1pLmludGVncml0eSksaS5yZWZlcnJlclBvbGljeSYmKG8ucmVmZXJyZXJQb2xpY3k9aS5yZWZlcnJlclBvbGljeSksaS5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP28uY3JlZGVudGlhbHM9ImluY2x1ZGUiOmkuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9vLmNyZWRlbnRpYWxzPSJvbWl0IjpvLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsb31mdW5jdGlvbiByKGkpe2lmKGkuZXApcmV0dXJuO2kuZXA9ITA7Y29uc3Qgbz1uKGkpO2ZldGNoKGkuaHJlZixvKX19KSgpO2Z1bmN0aW9uIE91KHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJkZWZhdWx0Iik/dC5kZWZhdWx0OnR9dmFyIE5fPXtleHBvcnRzOnt9fSxQZT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBQdT1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksU2I9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksRWI9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxDYj1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLGtiPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksYmI9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSwkYj1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksVGI9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxOYj1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLFJiPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxPYj1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksZnk9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIFBiKHQpe3JldHVybiB0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiP251bGw6KHQ9ZnkmJnRbZnldfHx0WyJAQGl0ZXJhdG9yIl0sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsKX12YXIgUl89e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LE9fPU9iamVjdC5hc3NpZ24sUF89e307ZnVuY3Rpb24gU3ModCxlLG4pe3RoaXMucHJvcHM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJlZnM9UF8sdGhpcy51cGRhdGVyPW58fFJffVNzLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O1NzLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiImJnQhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyx0LGUsInNldFN0YXRlIil9O1NzLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsdCwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gQV8oKXt9QV8ucHJvdG90eXBlPVNzLnByb3RvdHlwZTtmdW5jdGlvbiBRbSh0LGUsbil7dGhpcy5wcm9wcz10LHRoaXMuY29udGV4dD1lLHRoaXMucmVmcz1QXyx0aGlzLnVwZGF0ZXI9bnx8Ul99dmFyIHFtPVFtLnByb3RvdHlwZT1uZXcgQV87cW0uY29uc3RydWN0b3I9UW07T18ocW0sU3MucHJvdG90eXBlKTtxbS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgaHk9QXJyYXkuaXNBcnJheSxNXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGVnPXtjdXJyZW50Om51bGx9LExfPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gRF8odCxlLG4pe3ZhciByLGk9e30sbz1udWxsLGw9bnVsbDtpZihlIT1udWxsKWZvcihyIGluIGUucmVmIT09dm9pZCAwJiYobD1lLnJlZiksZS5rZXkhPT12b2lkIDAmJihvPSIiK2Uua2V5KSxlKU1fLmNhbGwoZSxyKSYmIUxfLmhhc093blByb3BlcnR5KHIpJiYoaVtyXT1lW3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGE9QXJyYXkocyksdT0wO3U8czt1KyspYVt1XT1hcmd1bWVudHNbdSsyXTtpLmNoaWxkcmVuPWF9aWYodCYmdC5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz10LmRlZmF1bHRQcm9wcyxzKWlbcl09PT12b2lkIDAmJihpW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpQdSx0eXBlOnQsa2V5Om8scmVmOmwscHJvcHM6aSxfb3duZXI6ZWcuY3VycmVudH19ZnVuY3Rpb24gQWIodCxlKXtyZXR1cm57JCR0eXBlb2Y6UHUsdHlwZTp0LnR5cGUsa2V5OmUscmVmOnQucmVmLHByb3BzOnQucHJvcHMsX293bmVyOnQuX293bmVyfX1mdW5jdGlvbiB0Zyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdC4kJHR5cGVvZj09PVB1fWZ1bmN0aW9uIE1iKHQpe3ZhciBlPXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK3QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiBlW25dfSl9dmFyIHB5PS9cLysvZztmdW5jdGlvbiBvaCh0LGUpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0LmtleSE9bnVsbD9NYigiIit0LmtleSk6ZS50b1N0cmluZygzNil9ZnVuY3Rpb24gUmModCxlLG4scixpKXt2YXIgbz10eXBlb2YgdDsobz09PSJ1bmRlZmluZWQifHxvPT09ImJvb2xlYW4iKSYmKHQ9bnVsbCk7dmFyIGw9ITE7aWYodD09PW51bGwpbD0hMDtlbHNlIHN3aXRjaChvKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIFB1OmNhc2UgU2I6bD0hMH19aWYobClyZXR1cm4gbD10LGk9aShsKSx0PXI9PT0iIj8iLiIrb2gobCwwKTpyLGh5KGkpPyhuPSIiLHQhPW51bGwmJihuPXQucmVwbGFjZShweSwiJCYvIikrIi8iKSxSYyhpLGUsbiwiIixmdW5jdGlvbih1KXtyZXR1cm4gdX0pKTppIT1udWxsJiYodGcoaSkmJihpPUFiKGksbisoIWkua2V5fHxsJiZsLmtleT09PWkua2V5PyIiOigiIitpLmtleSkucmVwbGFjZShweSwiJCYvIikrIi8iKSt0KSksZS5wdXNoKGkpKSwxO2lmKGw9MCxyPXI9PT0iIj8iLiI6cisiOiIsaHkodCkpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe289dFtzXTt2YXIgYT1yK29oKG8scyk7bCs9UmMobyxlLG4sYSxpKX1lbHNlIGlmKGE9UGIodCksdHlwZW9mIGE9PSJmdW5jdGlvbiIpZm9yKHQ9YS5jYWxsKHQpLHM9MDshKG89dC5uZXh0KCkpLmRvbmU7KW89by52YWx1ZSxhPXIrb2gobyxzKyspLGwrPVJjKG8sZSxuLGEsaSk7ZWxzZSBpZihvPT09Im9iamVjdCIpdGhyb3cgZT1TdHJpbmcodCksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisoZT09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmUpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGx9ZnVuY3Rpb24gSnUodCxlLG4pe2lmKHQ9PW51bGwpcmV0dXJuIHQ7dmFyIHI9W10saT0wO3JldHVybiBSYyh0LHIsIiIsIiIsZnVuY3Rpb24obyl7cmV0dXJuIGUuY2FsbChuLG8saSsrKX0pLHJ9ZnVuY3Rpb24gTGIodCl7aWYodC5fc3RhdHVzPT09LTEpe3ZhciBlPXQuX3Jlc3VsdDtlPWUoKSxlLnRoZW4oZnVuY3Rpb24obil7KHQuX3N0YXR1cz09PTB8fHQuX3N0YXR1cz09PS0xKSYmKHQuX3N0YXR1cz0xLHQuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KHQuX3N0YXR1cz09PTB8fHQuX3N0YXR1cz09PS0xKSYmKHQuX3N0YXR1cz0yLHQuX3Jlc3VsdD1uKX0pLHQuX3N0YXR1cz09PS0xJiYodC5fc3RhdHVzPTAsdC5fcmVzdWx0PWUpfWlmKHQuX3N0YXR1cz09PTEpcmV0dXJuIHQuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IHQuX3Jlc3VsdH12YXIgeG49e2N1cnJlbnQ6bnVsbH0sT2M9e3RyYW5zaXRpb246bnVsbH0sRGI9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6eG4sUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6T2MsUmVhY3RDdXJyZW50T3duZXI6ZWd9O1BlLkNoaWxkcmVuPXttYXA6SnUsZm9yRWFjaDpmdW5jdGlvbih0LGUsbil7SnUodCxmdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gSnUodCxmdW5jdGlvbigpe2UrK30pLGV9LHRvQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIEp1KHQsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KXx8W119LG9ubHk6ZnVuY3Rpb24odCl7aWYoIXRnKHQpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gdH19O1BlLkNvbXBvbmVudD1TcztQZS5GcmFnbWVudD1FYjtQZS5Qcm9maWxlcj1rYjtQZS5QdXJlQ29tcG9uZW50PVFtO1BlLlN0cmljdE1vZGU9Q2I7UGUuU3VzcGVuc2U9TmI7UGUuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9RGI7UGUuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXtpZih0PT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK3QrIi4iKTt2YXIgcj1PXyh7fSx0LnByb3BzKSxpPXQua2V5LG89dC5yZWYsbD10Ll9vd25lcjtpZihlIT1udWxsKXtpZihlLnJlZiE9PXZvaWQgMCYmKG89ZS5yZWYsbD1lZy5jdXJyZW50KSxlLmtleSE9PXZvaWQgMCYmKGk9IiIrZS5rZXkpLHQudHlwZSYmdC50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz10LnR5cGUuZGVmYXVsdFByb3BzO2ZvcihhIGluIGUpTV8uY2FsbChlLGEpJiYhTF8uaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPWVbYV09PT12b2lkIDAmJnMhPT12b2lkIDA/c1thXTplW2FdKX12YXIgYT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoYT09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxhKXtzPUFycmF5KGEpO2Zvcih2YXIgdT0wO3U8YTt1Kyspc1t1XT1hcmd1bWVudHNbdSsyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOlB1LHR5cGU6dC50eXBlLGtleTppLHJlZjpvLHByb3BzOnIsX293bmVyOmx9fTtQZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXskJHR5cGVvZjokYixfY3VycmVudFZhbHVlOnQsX2N1cnJlbnRWYWx1ZTI6dCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LHQuUHJvdmlkZXI9eyQkdHlwZW9mOmJiLF9jb250ZXh0OnR9LHQuQ29uc3VtZXI9dH07UGUuY3JlYXRlRWxlbWVudD1EXztQZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPURfLmJpbmQobnVsbCx0KTtyZXR1cm4gZS50eXBlPXQsZX07UGUuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O1BlLmZvcndhcmRSZWY9ZnVuY3Rpb24odCl7cmV0dXJueyQkdHlwZW9mOlRiLHJlbmRlcjp0fX07UGUuaXNWYWxpZEVsZW1lbnQ9dGc7UGUubGF6eT1mdW5jdGlvbih0KXtyZXR1cm57JCR0eXBlb2Y6T2IsX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDp0fSxfaW5pdDpMYn19O1BlLm1lbW89ZnVuY3Rpb24odCxlKXtyZXR1cm57JCR0eXBlb2Y6UmIsdHlwZTp0LGNvbXBhcmU6ZT09PXZvaWQgMD9udWxsOmV9fTtQZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9T2MudHJhbnNpdGlvbjtPYy50cmFuc2l0aW9uPXt9O3RyeXt0KCl9ZmluYWxseXtPYy50cmFuc2l0aW9uPWV9fTtQZS51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC4iKX07UGUudXNlQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4geG4uY3VycmVudC51c2VDYWxsYmFjayh0LGUpfTtQZS51c2VDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB4bi5jdXJyZW50LnVzZUNvbnRleHQodCl9O1BlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O1BlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHhuLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZSh0KX07UGUudXNlRWZmZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHhuLmN1cnJlbnQudXNlRWZmZWN0KHQsZSl9O1BlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHhuLmN1cnJlbnQudXNlSWQoKX07UGUudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHhuLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZSh0LGUsbil9O1BlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB4bi5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdCh0LGUpfTtQZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geG4uY3VycmVudC51c2VMYXlvdXRFZmZlY3QodCxlKX07UGUudXNlTWVtbz1mdW5jdGlvbih0LGUpe3JldHVybiB4bi5jdXJyZW50LnVzZU1lbW8odCxlKX07UGUudXNlUmVkdWNlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHhuLmN1cnJlbnQudXNlUmVkdWNlcih0LGUsbil9O1BlLnVzZVJlZj1mdW5jdGlvbih0KXtyZXR1cm4geG4uY3VycmVudC51c2VSZWYodCl9O1BlLnVzZVN0YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB4bi5jdXJyZW50LnVzZVN0YXRlKHQpfTtQZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHhuLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUodCxlLG4pfTtQZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHhuLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtQZS52ZXJzaW9uPSIxOC4yLjAiO05fLmV4cG9ydHM9UGU7dmFyIHA9Tl8uZXhwb3J0cztjb25zdCByZT1PdShwKSxJXz1UXyh7X19wcm90b19fOm51bGwsZGVmYXVsdDpyZX0sW3BdKTt2YXIgcWg9e30sal89e2V4cG9ydHM6e319LEtuPXt9LHpfPXtleHBvcnRzOnt9fSxGXz17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShiLHope3ZhciBqPWIubGVuZ3RoO2IucHVzaCh6KTtlOmZvcig7MDxqOyl7dmFyIFo9ai0xPj4+MSxuZT1iW1pdO2lmKDA8aShuZSx6KSliW1pdPXosYltqXT1uZSxqPVo7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKGIpe3JldHVybiBiLmxlbmd0aD09PTA/bnVsbDpiWzBdfWZ1bmN0aW9uIHIoYil7aWYoYi5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciB6PWJbMF0saj1iLnBvcCgpO2lmKGohPT16KXtiWzBdPWo7ZTpmb3IodmFyIFo9MCxuZT1iLmxlbmd0aCxrZT1uZT4+PjE7WjxrZTspe3ZhciB5ZT0yKihaKzEpLTEsV2U9Ylt5ZV0sRmU9eWUrMSx0ZT1iW0ZlXTtpZigwPmkoV2UsaikpRmU8bmUmJjA+aSh0ZSxXZSk/KGJbWl09dGUsYltGZV09aixaPUZlKTooYltaXT1XZSxiW3llXT1qLFo9eWUpO2Vsc2UgaWYoRmU8bmUmJjA+aSh0ZSxqKSliW1pdPXRlLGJbRmVdPWosWj1GZTtlbHNlIGJyZWFrIGV9fXJldHVybiB6fWZ1bmN0aW9uIGkoYix6KXt2YXIgaj1iLnNvcnRJbmRleC16LnNvcnRJbmRleDtyZXR1cm4gaiE9PTA/ajpiLmlkLXouaWR9aWYodHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIG89cGVyZm9ybWFuY2U7dC51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gby5ub3coKX19ZWxzZXt2YXIgbD1EYXRlLHM9bC5ub3coKTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpLXN9fXZhciBhPVtdLHU9W10sYz0xLGQ9bnVsbCxmPTMsaD0hMSxnPSExLG09ITEsdz10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDpudWxsLHk9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24gXyhiKXtmb3IodmFyIHo9bih1KTt6IT09bnVsbDspe2lmKHouY2FsbGJhY2s9PT1udWxsKXIodSk7ZWxzZSBpZih6LnN0YXJ0VGltZTw9YilyKHUpLHouc29ydEluZGV4PXouZXhwaXJhdGlvblRpbWUsZShhLHopO2Vsc2UgYnJlYWs7ej1uKHUpfX1mdW5jdGlvbiBTKGIpe2lmKG09ITEsXyhiKSwhZylpZihuKGEpIT09bnVsbClnPSEwLFIoRSk7ZWxzZXt2YXIgej1uKHUpO3ohPT1udWxsJiZQKFMsei5zdGFydFRpbWUtYil9fWZ1bmN0aW9uIEUoYix6KXtnPSExLG0mJihtPSExLHYoTiksTj0tMSksaD0hMDt2YXIgaj1mO3RyeXtmb3IoXyh6KSxkPW4oYSk7ZCE9PW51bGwmJighKGQuZXhwaXJhdGlvblRpbWU+eil8fGImJiFNKCkpOyl7dmFyIFo9ZC5jYWxsYmFjaztpZih0eXBlb2YgWj09ImZ1bmN0aW9uIil7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciBuZT1aKGQuZXhwaXJhdGlvblRpbWU8PXopO3o9dC51bnN0YWJsZV9ub3coKSx0eXBlb2YgbmU9PSJmdW5jdGlvbiI/ZC5jYWxsYmFjaz1uZTpkPT09bihhKSYmcihhKSxfKHopfWVsc2UgcihhKTtkPW4oYSl9aWYoZCE9PW51bGwpdmFyIGtlPSEwO2Vsc2V7dmFyIHllPW4odSk7eWUhPT1udWxsJiZQKFMseWUuc3RhcnRUaW1lLXopLGtlPSExfXJldHVybiBrZX1maW5hbGx5e2Q9bnVsbCxmPWosaD0hMX19dmFyICQ9ITEsQz1udWxsLE49LTEsQT01LGs9LTE7ZnVuY3Rpb24gTSgpe3JldHVybiEodC51bnN0YWJsZV9ub3coKS1rPEEpfWZ1bmN0aW9uIEQoKXtpZihDIT09bnVsbCl7dmFyIGI9dC51bnN0YWJsZV9ub3coKTtrPWI7dmFyIHo9ITA7dHJ5e3o9QyghMCxiKX1maW5hbGx5e3o/aWUoKTooJD0hMSxDPW51bGwpfX1lbHNlICQ9ITF9dmFyIGllO2lmKHR5cGVvZiB5PT0iZnVuY3Rpb24iKWllPWZ1bmN0aW9uKCl7eShEKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgVj1uZXcgTWVzc2FnZUNoYW5uZWwsSz1WLnBvcnQyO1YucG9ydDEub25tZXNzYWdlPUQsaWU9ZnVuY3Rpb24oKXtLLnBvc3RNZXNzYWdlKG51bGwpfX1lbHNlIGllPWZ1bmN0aW9uKCl7dyhELDApfTtmdW5jdGlvbiBSKGIpe0M9YiwkfHwoJD0hMCxpZSgpKX1mdW5jdGlvbiBQKGIseil7Tj13KGZ1bmN0aW9uKCl7Yih0LnVuc3RhYmxlX25vdygpKX0seil9dC51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSx0LnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9Myx0LnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLHQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9Mix0LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGIpe2IuY2FsbGJhY2s9bnVsbH0sdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2d8fGh8fChnPSEwLFIoRSkpfSx0LnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGIpezA+Ynx8MTI1PGI/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkIik6QT0wPGI/TWF0aC5mbG9vcigxZTMvYik6NX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSx0LnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG4oYSl9LHQudW5zdGFibGVfbmV4dD1mdW5jdGlvbihiKXtzd2l0Y2goZil7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIHo9MzticmVhaztkZWZhdWx0Ono9Zn12YXIgaj1mO2Y9ejt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e2Y9an19LHQudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9LHQudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihiLHope3N3aXRjaChiKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6Yj0zfXZhciBqPWY7Zj1iO3RyeXtyZXR1cm4geigpfWZpbmFsbHl7Zj1qfX0sdC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGIseixqKXt2YXIgWj10LnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2Ygaj09Im9iamVjdCImJmohPT1udWxsPyhqPWouZGVsYXksaj10eXBlb2Ygaj09Im51bWJlciImJjA8aj9aK2o6Wik6aj1aLGIpe2Nhc2UgMTp2YXIgbmU9LTE7YnJlYWs7Y2FzZSAyOm5lPTI1MDticmVhaztjYXNlIDU6bmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6bmU9MWU0O2JyZWFrO2RlZmF1bHQ6bmU9NWUzfXJldHVybiBuZT1qK25lLGI9e2lkOmMrKyxjYWxsYmFjazp6LHByaW9yaXR5TGV2ZWw6YixzdGFydFRpbWU6aixleHBpcmF0aW9uVGltZTpuZSxzb3J0SW5kZXg6LTF9LGo+Wj8oYi5zb3J0SW5kZXg9aixlKHUsYiksbihhKT09PW51bGwmJmI9PT1uKHUpJiYobT8odihOKSxOPS0xKTptPSEwLFAoUyxqLVopKSk6KGIuc29ydEluZGV4PW5lLGUoYSxiKSxnfHxofHwoZz0hMCxSKEUpKSksYn0sdC51bnN0YWJsZV9zaG91bGRZaWVsZD1NLHQudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGIpe3ZhciB6PWY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGo9ZjtmPXo7dHJ5e3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2Y9an19fX0pKEZfKTt6Xy5leHBvcnRzPUZfO3ZhciBJYj16Xy5leHBvcnRzOy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBCXz1wLFduPUliO2Z1bmN0aW9uIFUodCl7Zm9yKHZhciBlPSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK3Qsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZSs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrdCsiOyB2aXNpdCAiK2UrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgVV89bmV3IFNldCxGYT17fTtmdW5jdGlvbiBsbCh0LGUpe29zKHQsZSksb3ModCsiQ2FwdHVyZSIsZSl9ZnVuY3Rpb24gb3ModCxlKXtmb3IoRmFbdF09ZSx0PTA7dDxlLmxlbmd0aDt0KyspVV8uYWRkKGVbdF0pfXZhciBmaT0hKHR5cGVvZiB3aW5kb3c+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PiJ1IiksZXA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxqYj0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLG15PXt9LGd5PXt9O2Z1bmN0aW9uIHpiKHQpe3JldHVybiBlcC5jYWxsKGd5LHQpPyEwOmVwLmNhbGwobXksdCk/ITE6amIudGVzdCh0KT9neVt0XT0hMDoobXlbdF09ITAsITEpfWZ1bmN0aW9uIEZiKHQsZSxuLHIpe2lmKG4hPT1udWxsJiZuLnR5cGU9PT0wKXJldHVybiExO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/ITE6biE9PW51bGw/IW4uYWNjZXB0c0Jvb2xlYW5zOih0PXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpLHQhPT0iZGF0YS0iJiZ0IT09ImFyaWEtIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gQmIodCxlLG4scil7aWYoZT09PW51bGx8fHR5cGVvZiBlPiJ1Inx8RmIodCxlLG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihuIT09bnVsbClzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIWU7Y2FzZSA0OnJldHVybiBlPT09ITE7Y2FzZSA1OnJldHVybiBpc05hTihlKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGUpfHwxPmV9cmV0dXJuITF9ZnVuY3Rpb24gX24odCxlLG4scixpLG8sbCl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9ZT09PTJ8fGU9PT0zfHxlPT09NCx0aGlzLmF0dHJpYnV0ZU5hbWU9cix0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1pLHRoaXMubXVzdFVzZVByb3BlcnR5PW4sdGhpcy5wcm9wZXJ0eU5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNhbml0aXplVVJMPW8sdGhpcy5yZW1vdmVFbXB0eVN0cmluZz1sfXZhciBHdD17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IF9uKHQsMCwhMSx0LG51bGwsITEsITEpfSk7W1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF07R3RbZV09bmV3IF9uKGUsMSwhMSx0WzFdLG51bGwsITEsITEpfSk7WyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0d0W3RdPW5ldyBfbih0LDIsITEsdC50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgX24odCwyLCExLHQsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0d0W3RdPW5ldyBfbih0LDMsITEsdC50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgX24odCwzLCEwLHQsbnVsbCwhMSwhMSl9KTtbImNhcHR1cmUiLCJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IF9uKHQsNCwhMSx0LG51bGwsITEsITEpfSk7WyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgX24odCw2LCExLHQsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IF9uKHQsNSwhMSx0LnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgbmc9L1tcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHJnKHQpe3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKG5nLHJnKTtHdFtlXT1uZXcgX24oZSwxLCExLHQsbnVsbCwhMSwhMSl9KTsieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKG5nLHJnKTtHdFtlXT1uZXcgX24oZSwxLCExLHQsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKG5nLHJnKTtHdFtlXT1uZXcgX24oZSwxLCExLHQsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsITEsITEpfSk7WyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgX24odCwxLCExLHQudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO0d0LnhsaW5rSHJlZj1uZXcgX24oInhsaW5rSHJlZiIsMSwhMSwieGxpbms6aHJlZiIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCEwLCExKTtbInNyYyIsImhyZWYiLCJhY3Rpb24iLCJmb3JtQWN0aW9uIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgX24odCwxLCExLHQudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO2Z1bmN0aW9uIGlnKHQsZSxuLHIpe3ZhciBpPUd0Lmhhc093blByb3BlcnR5KGUpP0d0W2VdOm51bGw7KGkhPT1udWxsP2kudHlwZSE9PTA6cnx8ISgyPGUubGVuZ3RoKXx8ZVswXSE9PSJvIiYmZVswXSE9PSJPInx8ZVsxXSE9PSJuIiYmZVsxXSE9PSJOIikmJihCYihlLG4saSxyKSYmKG49bnVsbCkscnx8aT09PW51bGw/emIoZSkmJihuPT09bnVsbD90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0ZShlLCIiK24pKTppLm11c3RVc2VQcm9wZXJ0eT90W2kucHJvcGVydHlOYW1lXT1uPT09bnVsbD9pLnR5cGU9PT0zPyExOiIiOm46KGU9aS5hdHRyaWJ1dGVOYW1lLHI9aS5hdHRyaWJ1dGVOYW1lc3BhY2Usbj09PW51bGw/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6KGk9aS50eXBlLG49aT09PTN8fGk9PT00JiZuPT09ITA/IiI6IiIrbixyP3Quc2V0QXR0cmlidXRlTlMocixlLG4pOnQuc2V0QXR0cmlidXRlKGUsbikpKSl9dmFyIF9pPUJfLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELFF1PVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxSbD1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxPbD1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLG9nPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksdHA9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxXXz1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLFZfPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxsZz1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLG5wPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIikscnA9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLHNnPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxJaT1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksSF89U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIiksdnk9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIEhzKHQpe3JldHVybiB0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiP251bGw6KHQ9dnkmJnRbdnldfHx0WyJAQGl0ZXJhdG9yIl0sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsKX12YXIgbXQ9T2JqZWN0LmFzc2lnbixsaDtmdW5jdGlvbiBjYSh0KXtpZihsaD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgZT1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7bGg9ZSYmZVsxXXx8IiJ9cmV0dXJuYApgK2xoK3R9dmFyIHNoPSExO2Z1bmN0aW9uIGFoKHQsZSl7aWYoIXR8fHNoKXJldHVybiIiO3NoPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYoZSlpZihlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KGUsW10pfWNhdGNoKHUpe3ZhciByPXV9UmVmbGVjdC5jb25zdHJ1Y3QodCxbXSxlKX1lbHNle3RyeXtlLmNhbGwoKX1jYXRjaCh1KXtyPXV9dC5jYWxsKGUucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKHUpe3I9dX10KCl9fWNhdGNoKHUpe2lmKHUmJnImJnR5cGVvZiB1LnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBpPXUuc3RhY2suc3BsaXQoYApgKSxvPXIuc3RhY2suc3BsaXQoYApgKSxsPWkubGVuZ3RoLTEscz1vLmxlbmd0aC0xOzE8PWwmJjA8PXMmJmlbbF0hPT1vW3NdOylzLS07Zm9yKDsxPD1sJiYwPD1zO2wtLSxzLS0paWYoaVtsXSE9PW9bc10pe2lmKGwhPT0xfHxzIT09MSlkbyBpZihsLS0scy0tLDA+c3x8aVtsXSE9PW9bc10pe3ZhciBhPWAKYCtpW2xdLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiB0LmRpc3BsYXlOYW1lJiZhLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYoYT1hLnJlcGxhY2UoIjxhbm9ueW1vdXM+Iix0LmRpc3BsYXlOYW1lKSksYX13aGlsZSgxPD1sJiYwPD1zKTticmVha319fWZpbmFsbHl7c2g9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4odD10P3QuZGlzcGxheU5hbWV8fHQubmFtZToiIik/Y2EodCk6IiJ9ZnVuY3Rpb24gVWIodCl7c3dpdGNoKHQudGFnKXtjYXNlIDU6cmV0dXJuIGNhKHQudHlwZSk7Y2FzZSAxNjpyZXR1cm4gY2EoIkxhenkiKTtjYXNlIDEzOnJldHVybiBjYSgiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiBjYSgiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiB0PWFoKHQudHlwZSwhMSksdDtjYXNlIDExOnJldHVybiB0PWFoKHQudHlwZS5yZW5kZXIsITEpLHQ7Y2FzZSAxOnJldHVybiB0PWFoKHQudHlwZSwhMCksdDtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBpcCh0KXtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiB0LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fG51bGw7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIE9sOnJldHVybiJGcmFnbWVudCI7Y2FzZSBSbDpyZXR1cm4iUG9ydGFsIjtjYXNlIHRwOnJldHVybiJQcm9maWxlciI7Y2FzZSBvZzpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBucDpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgcnA6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIHQ9PSJvYmplY3QiKXN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIFZfOnJldHVybih0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgV186cmV0dXJuKHQuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBsZzp2YXIgZT10LnJlbmRlcjtyZXR1cm4gdD10LmRpc3BsYXlOYW1lLHR8fCh0PWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdD10IT09IiI/IkZvcndhcmRSZWYoIit0KyIpIjoiRm9yd2FyZFJlZiIpLHQ7Y2FzZSBzZzpyZXR1cm4gZT10LmRpc3BsYXlOYW1lfHxudWxsLGUhPT1udWxsP2U6aXAodC50eXBlKXx8Ik1lbW8iO2Nhc2UgSWk6ZT10Ll9wYXlsb2FkLHQ9dC5faW5pdDt0cnl7cmV0dXJuIGlwKHQoZSkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2IodCl7dmFyIGU9dC50eXBlO3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4oZS5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybihlLl9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gdD1lLnJlbmRlcix0PXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZS5kaXNwbGF5TmFtZXx8KHQhPT0iIj8iRm9yd2FyZFJlZigiK3QrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiBlO2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gaXAoZSk7Y2FzZSA4OnJldHVybiBlPT09b2c/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpcmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8bnVsbDtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gb28odCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiB0O2Nhc2Uib2JqZWN0IjpyZXR1cm4gdDtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBLXyh0KXt2YXIgZT10LnR5cGU7cmV0dXJuKHQ9dC5ub2RlTmFtZSkmJnQudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihlPT09ImNoZWNrYm94Inx8ZT09PSJyYWRpbyIpfWZ1bmN0aW9uIFZiKHQpe3ZhciBlPUtfKHQpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxlKSxyPSIiK3RbZV07aWYoIXQuaGFzT3duUHJvcGVydHkoZSkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBpPW4uZ2V0LG89bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24obCl7cj0iIitsLG8uY2FsbCh0aGlzLGwpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGwpe3I9IiIrbH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7dC5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIHRbZV19fX19ZnVuY3Rpb24gcXUodCl7dC5fdmFsdWVUcmFja2VyfHwodC5fdmFsdWVUcmFja2VyPVZiKHQpKX1mdW5jdGlvbiBaXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT10Ll92YWx1ZVRyYWNrZXI7aWYoIWUpcmV0dXJuITA7dmFyIG49ZS5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIHQmJihyPUtfKHQpP3QuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjp0LnZhbHVlKSx0PXIsdCE9PW4/KGUuc2V0VmFsdWUodCksITApOiExfWZ1bmN0aW9uIEpjKHQpe2lmKHQ9dHx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgdD4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiB0LmFjdGl2ZUVsZW1lbnR8fHQuYm9keX1jYXRjaHtyZXR1cm4gdC5ib2R5fX1mdW5jdGlvbiBvcCh0LGUpe3ZhciBuPWUuY2hlY2tlZDtyZXR1cm4gbXQoe30sZSx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/dC5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24geXkodCxlKXt2YXIgbj1lLmRlZmF1bHRWYWx1ZT09bnVsbD8iIjplLmRlZmF1bHRWYWx1ZSxyPWUuY2hlY2tlZCE9bnVsbD9lLmNoZWNrZWQ6ZS5kZWZhdWx0Q2hlY2tlZDtuPW9vKGUudmFsdWUhPW51bGw/ZS52YWx1ZTpuKSx0Ll93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDplLnR5cGU9PT0iY2hlY2tib3gifHxlLnR5cGU9PT0icmFkaW8iP2UuY2hlY2tlZCE9bnVsbDplLnZhbHVlIT1udWxsfX1mdW5jdGlvbiBHXyh0LGUpe2U9ZS5jaGVja2VkLGUhPW51bGwmJmlnKHQsImNoZWNrZWQiLGUsITEpfWZ1bmN0aW9uIGxwKHQsZSl7R18odCxlKTt2YXIgbj1vbyhlLnZhbHVlKSxyPWUudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJnQudmFsdWU9PT0iInx8dC52YWx1ZSE9bikmJih0LnZhbHVlPSIiK24pOnQudmFsdWUhPT0iIituJiYodC52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe3QucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn1lLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP3NwKHQsZS50eXBlLG4pOmUuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZzcCh0LGUudHlwZSxvbyhlLmRlZmF1bHRWYWx1ZSkpLGUuY2hlY2tlZD09bnVsbCYmZS5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKHQuZGVmYXVsdENoZWNrZWQ9ISFlLmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiB4eSh0LGUsbil7aWYoZS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPWUudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fGUudmFsdWUhPT12b2lkIDAmJmUudmFsdWUhPT1udWxsKSlyZXR1cm47ZT0iIit0Ll93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fGU9PT10LnZhbHVlfHwodC52YWx1ZT1lKSx0LmRlZmF1bHRWYWx1ZT1lfW49dC5uYW1lLG4hPT0iIiYmKHQubmFtZT0iIiksdC5kZWZhdWx0Q2hlY2tlZD0hIXQuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJih0Lm5hbWU9bil9ZnVuY3Rpb24gc3AodCxlLG4peyhlIT09Im51bWJlciJ8fEpjKHQub3duZXJEb2N1bWVudCkhPT10KSYmKG49PW51bGw/dC5kZWZhdWx0VmFsdWU9IiIrdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTp0LmRlZmF1bHRWYWx1ZSE9PSIiK24mJih0LmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIGRhPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gWmwodCxlLG4scil7aWYodD10Lm9wdGlvbnMsZSl7ZT17fTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyllWyIkIituW2ldXT0hMDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWk9ZS5oYXNPd25Qcm9wZXJ0eSgiJCIrdFtuXS52YWx1ZSksdFtuXS5zZWxlY3RlZCE9PWkmJih0W25dLnNlbGVjdGVkPWkpLGkmJnImJih0W25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitvbyhuKSxlPW51bGwsaT0wO2k8dC5sZW5ndGg7aSsrKXtpZih0W2ldLnZhbHVlPT09bil7dFtpXS5zZWxlY3RlZD0hMCxyJiYodFtpXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1lIT09bnVsbHx8dFtpXS5kaXNhYmxlZHx8KGU9dFtpXSl9ZSE9PW51bGwmJihlLnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gYXAodCxlKXtpZihlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKFUoOTEpKTtyZXR1cm4gbXQoe30sZSx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIF95KHQsZSl7dmFyIG49ZS52YWx1ZTtpZihuPT1udWxsKXtpZihuPWUuY2hpbGRyZW4sZT1lLmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZihlIT1udWxsKXRocm93IEVycm9yKFUoOTIpKTtpZihkYShuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihVKDkzKSk7bj1uWzBdfWU9bn1lPT1udWxsJiYoZT0iIiksbj1lfXQuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOm9vKG4pfX1mdW5jdGlvbiBZXyh0LGUpe3ZhciBuPW9vKGUudmFsdWUpLHI9b28oZS5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PXQudmFsdWUmJih0LnZhbHVlPW4pLGUuZGVmYXVsdFZhbHVlPT1udWxsJiZ0LmRlZmF1bHRWYWx1ZSE9PW4mJih0LmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKHQuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIHd5KHQpe3ZhciBlPXQudGV4dENvbnRlbnQ7ZT09PXQuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJmUhPT0iIiYmZSE9PW51bGwmJih0LnZhbHVlPWUpfWZ1bmN0aW9uIFhfKHQpe3N3aXRjaCh0KXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gdXAodCxlKXtyZXR1cm4gdD09bnVsbHx8dD09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9YXyhlKTp0PT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmZT09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6dH12YXIgZWMsSl89ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGUsbixyLGkpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxuLHIsaSl9KX06dH0oZnVuY3Rpb24odCxlKXtpZih0Lm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gdCl0LmlubmVySFRNTD1lO2Vsc2V7Zm9yKGVjPWVjfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxlYy5pbm5lckhUTUw9Ijxzdmc+IitlLnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLGU9ZWMuZmlyc3RDaGlsZDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTtmb3IoO2UuZmlyc3RDaGlsZDspdC5hcHBlbmRDaGlsZChlLmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIEJhKHQsZSl7aWYoZSl7dmFyIG49dC5maXJzdENoaWxkO2lmKG4mJm49PT10Lmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPWU7cmV0dXJufX10LnRleHRDb250ZW50PWV9dmFyIHlhPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxIYj1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKHlhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0hiLmZvckVhY2goZnVuY3Rpb24oZSl7ZT1lK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSkseWFbZV09eWFbdF19KX0pO2Z1bmN0aW9uIFFfKHQsZSxuKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PSJib29sZWFuInx8ZT09PSIiPyIiOm58fHR5cGVvZiBlIT0ibnVtYmVyInx8ZT09PTB8fHlhLmhhc093blByb3BlcnR5KHQpJiZ5YVt0XT8oIiIrZSkudHJpbSgpOmUrInB4In1mdW5jdGlvbiBxXyh0LGUpe3Q9dC5zdHlsZTtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLGk9UV8obixlW25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP3Quc2V0UHJvcGVydHkobixpKTp0W25dPWl9fXZhciBLYj1tdCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBjcCh0LGUpe2lmKGUpe2lmKEtiW3RdJiYoZS5jaGlsZHJlbiE9bnVsbHx8ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoVSgxMzcsdCkpO2lmKGUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKGUuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoVSg2MCkpO2lmKHR5cGVvZiBlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIGUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFUoNjEpKX1pZihlLnN0eWxlIT1udWxsJiZ0eXBlb2YgZS5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoVSg2MikpfX1mdW5jdGlvbiBkcCh0LGUpe2lmKHQuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiBlLmlzPT0ic3RyaW5nIjtzd2l0Y2godCl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgZnA9bnVsbDtmdW5jdGlvbiBhZyh0KXtyZXR1cm4gdD10LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3csdC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKHQ9dC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksdC5ub2RlVHlwZT09PTM/dC5wYXJlbnROb2RlOnR9dmFyIGhwPW51bGwsR2w9bnVsbCxZbD1udWxsO2Z1bmN0aW9uIFN5KHQpe2lmKHQ9THUodCkpe2lmKHR5cGVvZiBocCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihVKDI4MCkpO3ZhciBlPXQuc3RhdGVOb2RlO2UmJihlPWNmKGUpLGhwKHQuc3RhdGVOb2RlLHQudHlwZSxlKSl9fWZ1bmN0aW9uIGUxKHQpe0dsP1lsP1lsLnB1c2godCk6WWw9W3RdOkdsPXR9ZnVuY3Rpb24gdDEoKXtpZihHbCl7dmFyIHQ9R2wsZT1ZbDtpZihZbD1HbD1udWxsLFN5KHQpLGUpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylTeShlW3RdKX19ZnVuY3Rpb24gbjEodCxlKXtyZXR1cm4gdChlKX1mdW5jdGlvbiByMSgpe312YXIgdWg9ITE7ZnVuY3Rpb24gaTEodCxlLG4pe2lmKHVoKXJldHVybiB0KGUsbik7dWg9ITA7dHJ5e3JldHVybiBuMSh0LGUsbil9ZmluYWxseXt1aD0hMSwoR2whPT1udWxsfHxZbCE9PW51bGwpJiYocjEoKSx0MSgpKX19ZnVuY3Rpb24gVWEodCxlKXt2YXIgbj10LnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1jZihuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbZV07ZTpzd2l0Y2goZSl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KHQ9dC50eXBlLHI9ISh0PT09ImJ1dHRvbiJ8fHQ9PT0iaW5wdXQifHx0PT09InNlbGVjdCJ8fHQ9PT0idGV4dGFyZWEiKSksdD0hcjticmVhayBlO2RlZmF1bHQ6dD0hMX1pZih0KXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMjMxLGUsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgcHA9ITE7aWYoZmkpdHJ5e3ZhciBLcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS3MsInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtwcD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsS3MsS3MpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixLcyxLcyl9Y2F0Y2h7cHA9ITF9ZnVuY3Rpb24gWmIodCxlLG4scixpLG8sbCxzLGEpe3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7ZS5hcHBseShuLHUpfWNhdGNoKGMpe3RoaXMub25FcnJvcihjKX19dmFyIHhhPSExLFFjPW51bGwscWM9ITEsbXA9bnVsbCxHYj17b25FcnJvcjpmdW5jdGlvbih0KXt4YT0hMCxRYz10fX07ZnVuY3Rpb24gWWIodCxlLG4scixpLG8sbCxzLGEpe3hhPSExLFFjPW51bGwsWmIuYXBwbHkoR2IsYXJndW1lbnRzKX1mdW5jdGlvbiBYYih0LGUsbixyLGksbyxsLHMsYSl7aWYoWWIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHhhKXtpZih4YSl7dmFyIHU9UWM7eGE9ITEsUWM9bnVsbH1lbHNlIHRocm93IEVycm9yKFUoMTk4KSk7cWN8fChxYz0hMCxtcD11KX19ZnVuY3Rpb24gc2wodCl7dmFyIGU9dCxuPXQ7aWYodC5hbHRlcm5hdGUpZm9yKDtlLnJldHVybjspZT1lLnJldHVybjtlbHNle3Q9ZTtkbyBlPXQsZS5mbGFncyY0MDk4JiYobj1lLnJldHVybiksdD1lLnJldHVybjt3aGlsZSh0KX1yZXR1cm4gZS50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBvMSh0KXtpZih0LnRhZz09PTEzKXt2YXIgZT10Lm1lbW9pemVkU3RhdGU7aWYoZT09PW51bGwmJih0PXQuYWx0ZXJuYXRlLHQhPT1udWxsJiYoZT10Lm1lbW9pemVkU3RhdGUpKSxlIT09bnVsbClyZXR1cm4gZS5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIEV5KHQpe2lmKHNsKHQpIT09dCl0aHJvdyBFcnJvcihVKDE4OCkpfWZ1bmN0aW9uIEpiKHQpe3ZhciBlPXQuYWx0ZXJuYXRlO2lmKCFlKXtpZihlPXNsKHQpLGU9PT1udWxsKXRocm93IEVycm9yKFUoMTg4KSk7cmV0dXJuIGUhPT10P251bGw6dH1mb3IodmFyIG49dCxyPWU7Oyl7dmFyIGk9bi5yZXR1cm47aWYoaT09PW51bGwpYnJlYWs7dmFyIG89aS5hbHRlcm5hdGU7aWYobz09PW51bGwpe2lmKHI9aS5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihpLmNoaWxkPT09by5jaGlsZCl7Zm9yKG89aS5jaGlsZDtvOyl7aWYobz09PW4pcmV0dXJuIEV5KGkpLHQ7aWYobz09PXIpcmV0dXJuIEV5KGkpLGU7bz1vLnNpYmxpbmd9dGhyb3cgRXJyb3IoVSgxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49aSxyPW87ZWxzZXtmb3IodmFyIGw9ITEscz1pLmNoaWxkO3M7KXtpZihzPT09bil7bD0hMCxuPWkscj1vO2JyZWFrfWlmKHM9PT1yKXtsPSEwLHI9aSxuPW87YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWwpe2ZvcihzPW8uY2hpbGQ7czspe2lmKHM9PT1uKXtsPSEwLG49byxyPWk7YnJlYWt9aWYocz09PXIpe2w9ITAscj1vLG49aTticmVha31zPXMuc2libGluZ31pZighbCl0aHJvdyBFcnJvcihVKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoVSgxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoVSgxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/dDplfWZ1bmN0aW9uIGwxKHQpe3JldHVybiB0PUpiKHQpLHQhPT1udWxsP3MxKHQpOm51bGx9ZnVuY3Rpb24gczEodCl7aWYodC50YWc9PT01fHx0LnRhZz09PTYpcmV0dXJuIHQ7Zm9yKHQ9dC5jaGlsZDt0IT09bnVsbDspe3ZhciBlPXMxKHQpO2lmKGUhPT1udWxsKXJldHVybiBlO3Q9dC5zaWJsaW5nfXJldHVybiBudWxsfXZhciBhMT1Xbi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLEN5PVduLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFFiPVduLnVuc3RhYmxlX3Nob3VsZFlpZWxkLHFiPVduLnVuc3RhYmxlX3JlcXVlc3RQYWludCxDdD1Xbi51bnN0YWJsZV9ub3csZSQ9V24udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsdWc9V24udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksdTE9V24udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksZWQ9V24udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksdCQ9V24udW5zdGFibGVfTG93UHJpb3JpdHksYzE9V24udW5zdGFibGVfSWRsZVByaW9yaXR5LGxmPW51bGwsRnI9bnVsbDtmdW5jdGlvbiBuJCh0KXtpZihGciYmdHlwZW9mIEZyLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtGci5vbkNvbW1pdEZpYmVyUm9vdChsZix0LHZvaWQgMCwodC5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIFNyPU1hdGguY2x6MzI/TWF0aC5jbHozMjpvJCxyJD1NYXRoLmxvZyxpJD1NYXRoLkxOMjtmdW5jdGlvbiBvJCh0KXtyZXR1cm4gdD4+Pj0wLHQ9PT0wPzMyOjMxLShyJCh0KS9pJHwwKXwwfXZhciB0Yz02NCxuYz00MTk0MzA0O2Z1bmN0aW9uIGZhKHQpe3N3aXRjaCh0Ji10KXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gdCY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIHQmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiB0ZCh0LGUpe3ZhciBuPXQucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsaT10LnN1c3BlbmRlZExhbmVzLG89dC5waW5nZWRMYW5lcyxsPW4mMjY4NDM1NDU1O2lmKGwhPT0wKXt2YXIgcz1sJn5pO3MhPT0wP3I9ZmEocyk6KG8mPWwsbyE9PTAmJihyPWZhKG8pKSl9ZWxzZSBsPW4mfmksbCE9PTA/cj1mYShsKTpvIT09MCYmKHI9ZmEobykpO2lmKHI9PT0wKXJldHVybiAwO2lmKGUhPT0wJiZlIT09ciYmIShlJmkpJiYoaT1yJi1yLG89ZSYtZSxpPj1vfHxpPT09MTYmJihvJjQxOTQyNDApIT09MCkpcmV0dXJuIGU7aWYociY0JiYocnw9biYxNiksZT10LmVudGFuZ2xlZExhbmVzLGUhPT0wKWZvcih0PXQuZW50YW5nbGVtZW50cyxlJj1yOzA8ZTspbj0zMS1TcihlKSxpPTE8PG4scnw9dFtuXSxlJj1+aTtyZXR1cm4gcn1mdW5jdGlvbiBsJCh0LGUpe3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gZSsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBlKzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBzJCh0LGUpe2Zvcih2YXIgbj10LnN1c3BlbmRlZExhbmVzLHI9dC5waW5nZWRMYW5lcyxpPXQuZXhwaXJhdGlvblRpbWVzLG89dC5wZW5kaW5nTGFuZXM7MDxvOyl7dmFyIGw9MzEtU3Iobykscz0xPDxsLGE9aVtsXTthPT09LTE/KCEocyZuKXx8cyZyKSYmKGlbbF09bCQocyxlKSk6YTw9ZSYmKHQuZXhwaXJlZExhbmVzfD1zKSxvJj1+c319ZnVuY3Rpb24gZ3AodCl7cmV0dXJuIHQ9dC5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsdCE9PTA/dDp0JjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIGQxKCl7dmFyIHQ9dGM7cmV0dXJuIHRjPDw9MSwhKHRjJjQxOTQyNDApJiYodGM9NjQpLHR9ZnVuY3Rpb24gY2godCl7Zm9yKHZhciBlPVtdLG49MDszMT5uO24rKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gQXUodCxlLG4pe3QucGVuZGluZ0xhbmVzfD1lLGUhPT01MzY4NzA5MTImJih0LnN1c3BlbmRlZExhbmVzPTAsdC5waW5nZWRMYW5lcz0wKSx0PXQuZXZlbnRUaW1lcyxlPTMxLVNyKGUpLHRbZV09bn1mdW5jdGlvbiBhJCh0LGUpe3ZhciBuPXQucGVuZGluZ0xhbmVzJn5lO3QucGVuZGluZ0xhbmVzPWUsdC5zdXNwZW5kZWRMYW5lcz0wLHQucGluZ2VkTGFuZXM9MCx0LmV4cGlyZWRMYW5lcyY9ZSx0Lm11dGFibGVSZWFkTGFuZXMmPWUsdC5lbnRhbmdsZWRMYW5lcyY9ZSxlPXQuZW50YW5nbGVtZW50czt2YXIgcj10LmV2ZW50VGltZXM7Zm9yKHQ9dC5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIGk9MzEtU3Iobiksbz0xPDxpO2VbaV09MCxyW2ldPS0xLHRbaV09LTEsbiY9fm99fWZ1bmN0aW9uIGNnKHQsZSl7dmFyIG49dC5lbnRhbmdsZWRMYW5lc3w9ZTtmb3IodD10LmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLVNyKG4pLGk9MTw8cjtpJmV8dFtyXSZlJiYodFtyXXw9ZSksbiY9fml9fXZhciBVZT0wO2Z1bmN0aW9uIGYxKHQpe3JldHVybiB0Jj0tdCwxPHQ/NDx0P3QmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIGgxLGRnLHAxLG0xLGcxLHZwPSExLHJjPVtdLEdpPW51bGwsWWk9bnVsbCxYaT1udWxsLFdhPW5ldyBNYXAsVmE9bmV3IE1hcCxGaT1bXSx1JD0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBreSh0LGUpe3N3aXRjaCh0KXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOkdpPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpZaT1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0IjpYaT1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6V2EuZGVsZXRlKGUucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6VmEuZGVsZXRlKGUucG9pbnRlcklkKX19ZnVuY3Rpb24gWnModCxlLG4scixpLG8pe3JldHVybiB0PT09bnVsbHx8dC5uYXRpdmVFdmVudCE9PW8/KHQ9e2Jsb2NrZWRPbjplLGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDpvLHRhcmdldENvbnRhaW5lcnM6W2ldfSxlIT09bnVsbCYmKGU9THUoZSksZSE9PW51bGwmJmRnKGUpKSx0KToodC5ldmVudFN5c3RlbUZsYWdzfD1yLGU9dC50YXJnZXRDb250YWluZXJzLGkhPT1udWxsJiZlLmluZGV4T2YoaSk9PT0tMSYmZS5wdXNoKGkpLHQpfWZ1bmN0aW9uIGMkKHQsZSxuLHIsaSl7c3dpdGNoKGUpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIEdpPVpzKEdpLHQsZSxuLHIsaSksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBZaT1acyhZaSx0LGUsbixyLGkpLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gWGk9WnMoWGksdCxlLG4scixpKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgbz1pLnBvaW50ZXJJZDtyZXR1cm4gV2Euc2V0KG8sWnMoV2EuZ2V0KG8pfHxudWxsLHQsZSxuLHIsaSkpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBvPWkucG9pbnRlcklkLFZhLnNldChvLFpzKFZhLmdldChvKXx8bnVsbCx0LGUsbixyLGkpKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiB2MSh0KXt2YXIgZT1Qbyh0LnRhcmdldCk7aWYoZSE9PW51bGwpe3ZhciBuPXNsKGUpO2lmKG4hPT1udWxsKXtpZihlPW4udGFnLGU9PT0xMyl7aWYoZT1vMShuKSxlIT09bnVsbCl7dC5ibG9ja2VkT249ZSxnMSh0LnByaW9yaXR5LGZ1bmN0aW9uKCl7cDEobil9KTtyZXR1cm59fWVsc2UgaWYoZT09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3QuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19dC5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBQYyh0KXtpZih0LmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBlPXQudGFyZ2V0Q29udGFpbmVyczswPGUubGVuZ3RoOyl7dmFyIG49eXAodC5kb21FdmVudE5hbWUsdC5ldmVudFN5c3RlbUZsYWdzLGVbMF0sdC5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249dC5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7ZnA9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLGZwPW51bGx9ZWxzZSByZXR1cm4gZT1MdShuKSxlIT09bnVsbCYmZGcoZSksdC5ibG9ja2VkT249biwhMTtlLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gYnkodCxlLG4pe1BjKHQpJiZuLmRlbGV0ZShlKX1mdW5jdGlvbiBkJCgpe3ZwPSExLEdpIT09bnVsbCYmUGMoR2kpJiYoR2k9bnVsbCksWWkhPT1udWxsJiZQYyhZaSkmJihZaT1udWxsKSxYaSE9PW51bGwmJlBjKFhpKSYmKFhpPW51bGwpLFdhLmZvckVhY2goYnkpLFZhLmZvckVhY2goYnkpfWZ1bmN0aW9uIEdzKHQsZSl7dC5ibG9ja2VkT249PT1lJiYodC5ibG9ja2VkT249bnVsbCx2cHx8KHZwPSEwLFduLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soV24udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksZCQpKSl9ZnVuY3Rpb24gSGEodCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gR3MoaSx0KX1pZigwPHJjLmxlbmd0aCl7R3MocmNbMF0sdCk7Zm9yKHZhciBuPTE7bjxyYy5sZW5ndGg7bisrKXt2YXIgcj1yY1tuXTtyLmJsb2NrZWRPbj09PXQmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKEdpIT09bnVsbCYmR3MoR2ksdCksWWkhPT1udWxsJiZHcyhZaSx0KSxYaSE9PW51bGwmJkdzKFhpLHQpLFdhLmZvckVhY2goZSksVmEuZm9yRWFjaChlKSxuPTA7bjxGaS5sZW5ndGg7bisrKXI9Rmlbbl0sci5ibG9ja2VkT249PT10JiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPEZpLmxlbmd0aCYmKG49RmlbMF0sbi5ibG9ja2VkT249PT1udWxsKTspdjEobiksbi5ibG9ja2VkT249PT1udWxsJiZGaS5zaGlmdCgpfXZhciBYbD1faS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxuZD0hMDtmdW5jdGlvbiBmJCh0LGUsbixyKXt2YXIgaT1VZSxvPVhsLnRyYW5zaXRpb247WGwudHJhbnNpdGlvbj1udWxsO3RyeXtVZT0xLGZnKHQsZSxuLHIpfWZpbmFsbHl7VWU9aSxYbC50cmFuc2l0aW9uPW99fWZ1bmN0aW9uIGgkKHQsZSxuLHIpe3ZhciBpPVVlLG89WGwudHJhbnNpdGlvbjtYbC50cmFuc2l0aW9uPW51bGw7dHJ5e1VlPTQsZmcodCxlLG4scil9ZmluYWxseXtVZT1pLFhsLnRyYW5zaXRpb249b319ZnVuY3Rpb24gZmcodCxlLG4scil7aWYobmQpe3ZhciBpPXlwKHQsZSxuLHIpO2lmKGk9PT1udWxsKV9oKHQsZSxyLHJkLG4pLGt5KHQscik7ZWxzZSBpZihjJChpLHQsZSxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihreSh0LHIpLGUmNCYmLTE8dSQuaW5kZXhPZih0KSl7Zm9yKDtpIT09bnVsbDspe3ZhciBvPUx1KGkpO2lmKG8hPT1udWxsJiZoMShvKSxvPXlwKHQsZSxuLHIpLG89PT1udWxsJiZfaCh0LGUscixyZCxuKSxvPT09aSlicmVhaztpPW99aSE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBfaCh0LGUscixudWxsLG4pfX12YXIgcmQ9bnVsbDtmdW5jdGlvbiB5cCh0LGUsbixyKXtpZihyZD1udWxsLHQ9YWcociksdD1Qbyh0KSx0IT09bnVsbClpZihlPXNsKHQpLGU9PT1udWxsKXQ9bnVsbDtlbHNlIGlmKG49ZS50YWcsbj09PTEzKXtpZih0PW8xKGUpLHQhPT1udWxsKXJldHVybiB0O3Q9bnVsbH1lbHNlIGlmKG49PT0zKXtpZihlLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiBlLnRhZz09PTM/ZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3Q9bnVsbH1lbHNlIGUhPT10JiYodD1udWxsKTtyZXR1cm4gcmQ9dCxudWxsfWZ1bmN0aW9uIHkxKHQpe3N3aXRjaCh0KXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChlJCgpKXtjYXNlIHVnOnJldHVybiAxO2Nhc2UgdTE6cmV0dXJuIDQ7Y2FzZSBlZDpjYXNlIHQkOnJldHVybiAxNjtjYXNlIGMxOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBWaT1udWxsLGhnPW51bGwsQWM9bnVsbDtmdW5jdGlvbiB4MSgpe2lmKEFjKXJldHVybiBBYzt2YXIgdCxlPWhnLG49ZS5sZW5ndGgscixpPSJ2YWx1ZSJpbiBWaT9WaS52YWx1ZTpWaS50ZXh0Q29udGVudCxvPWkubGVuZ3RoO2Zvcih0PTA7dDxuJiZlW3RdPT09aVt0XTt0KyspO3ZhciBsPW4tdDtmb3Iocj0xO3I8PWwmJmVbbi1yXT09PWlbby1yXTtyKyspO3JldHVybiBBYz1pLnNsaWNlKHQsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIE1jKHQpe3ZhciBlPXQua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gdD8odD10LmNoYXJDb2RlLHQ9PT0wJiZlPT09MTMmJih0PTEzKSk6dD1lLHQ9PT0xMCYmKHQ9MTMpLDMyPD10fHx0PT09MTM/dDowfWZ1bmN0aW9uIGljKCl7cmV0dXJuITB9ZnVuY3Rpb24gJHkoKXtyZXR1cm4hMX1mdW5jdGlvbiBabih0KXtmdW5jdGlvbiBlKG4scixpLG8sbCl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1pLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9byx0aGlzLnRhcmdldD1sLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJihuPXRbc10sdGhpc1tzXT1uP24obyk6b1tzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShvLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/by5kZWZhdWx0UHJldmVudGVkOm8ucmV0dXJuVmFsdWU9PT0hMSk/aWM6JHksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD0keSx0aGlzfXJldHVybiBtdChlLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWljKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWljKX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50OmljfSksZX12YXIgRXM9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0scGc9Wm4oRXMpLE11PW10KHt9LEVzLHt2aWV3OjAsZGV0YWlsOjB9KSxwJD1abihNdSksZGgsZmgsWXMsc2Y9bXQoe30sTXUse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6bWcsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVsYXRlZFRhcmdldD09PXZvaWQgMD90LmZyb21FbGVtZW50PT09dC5zcmNFbGVtZW50P3QudG9FbGVtZW50OnQuZnJvbUVsZW1lbnQ6dC5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24odCl7cmV0dXJuIm1vdmVtZW50WCJpbiB0P3QubW92ZW1lbnRYOih0IT09WXMmJihZcyYmdC50eXBlPT09Im1vdXNlbW92ZSI/KGRoPXQuc2NyZWVuWC1Zcy5zY3JlZW5YLGZoPXQuc2NyZWVuWS1Zcy5zY3JlZW5ZKTpmaD1kaD0wLFlzPXQpLGRoKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKHQpe3JldHVybiJtb3ZlbWVudFkiaW4gdD90Lm1vdmVtZW50WTpmaH19KSxUeT1abihzZiksbSQ9bXQoe30sc2Yse2RhdGFUcmFuc2ZlcjowfSksZyQ9Wm4obSQpLHYkPW10KHt9LE11LHtyZWxhdGVkVGFyZ2V0OjB9KSxoaD1abih2JCkseSQ9bXQoe30sRXMse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLHgkPVpuKHkkKSxfJD1tdCh7fSxFcyx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbih0KXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiB0P3QuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSx3JD1abihfJCksUyQ9bXQoe30sRXMse2RhdGE6MH0pLE55PVpuKFMkKSxFJD17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sQyQ9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxrJD17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIGIkKHQpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIGUuZ2V0TW9kaWZpZXJTdGF0ZT9lLmdldE1vZGlmaWVyU3RhdGUodCk6KHQ9ayRbdF0pPyEhZVt0XTohMX1mdW5jdGlvbiBtZygpe3JldHVybiBiJH12YXIgJCQ9bXQoe30sTXUse2tleTpmdW5jdGlvbih0KXtpZih0LmtleSl7dmFyIGU9RSRbdC5rZXldfHx0LmtleTtpZihlIT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIGV9cmV0dXJuIHQudHlwZT09PSJrZXlwcmVzcyI/KHQ9TWModCksdD09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6dC50eXBlPT09ImtleWRvd24ifHx0LnR5cGU9PT0ia2V5dXAiP0MkW3Qua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTptZyxjaGFyQ29kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09ImtleXByZXNzIj9NYyh0KTowfSxrZXlDb2RlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT0ia2V5ZG93biJ8fHQudHlwZT09PSJrZXl1cCI/dC5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT0ia2V5cHJlc3MiP01jKHQpOnQudHlwZT09PSJrZXlkb3duInx8dC50eXBlPT09ImtleXVwIj90LmtleUNvZGU6MH19KSxUJD1abigkJCksTiQ9bXQoe30sc2Yse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksUnk9Wm4oTiQpLFIkPW10KHt9LE11LHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6bWd9KSxPJD1abihSJCksUCQ9bXQoe30sRXMse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksQSQ9Wm4oUCQpLE0kPW10KHt9LHNmLHtkZWx0YVg6ZnVuY3Rpb24odCl7cmV0dXJuImRlbHRhWCJpbiB0P3QuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiB0Py10LndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbih0KXtyZXR1cm4iZGVsdGFZImluIHQ/dC5kZWx0YVk6IndoZWVsRGVsdGFZImluIHQ/LXQud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gdD8tdC53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksTCQ9Wm4oTSQpLEQkPVs5LDEzLDI3LDMyXSxnZz1maSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LF9hPW51bGw7ZmkmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihfYT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBJJD1maSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFfYSxfMT1maSYmKCFnZ3x8X2EmJjg8X2EmJjExPj1fYSksT3k9IiAiLFB5PSExO2Z1bmN0aW9uIHcxKHQsZSl7c3dpdGNoKHQpe2Nhc2Uia2V5dXAiOnJldHVybiBEJC5pbmRleE9mKGUua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiBlLmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFMxKHQpe3JldHVybiB0PXQuZGV0YWlsLHR5cGVvZiB0PT0ib2JqZWN0IiYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH12YXIgUGw9ITE7ZnVuY3Rpb24gaiQodCxlKXtzd2l0Y2godCl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFMxKGUpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiBlLndoaWNoIT09MzI/bnVsbDooUHk9ITAsT3kpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gdD1lLmRhdGEsdD09PU95JiZQeT9udWxsOnQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24geiQodCxlKXtpZihQbClyZXR1cm4gdD09PSJjb21wb3NpdGlvbmVuZCJ8fCFnZyYmdzEodCxlKT8odD14MSgpLEFjPWhnPVZpPW51bGwsUGw9ITEsdCk6bnVsbDtzd2l0Y2godCl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoIShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpfHxlLmN0cmxLZXkmJmUuYWx0S2V5KXtpZihlLmNoYXImJjE8ZS5jaGFyLmxlbmd0aClyZXR1cm4gZS5jaGFyO2lmKGUud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIF8xJiZlLmxvY2FsZSE9PSJrbyI/bnVsbDplLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIEYkPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBBeSh0KXt2YXIgZT10JiZ0Lm5vZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGU9PT0iaW5wdXQiPyEhRiRbdC50eXBlXTplPT09InRleHRhcmVhIn1mdW5jdGlvbiBFMSh0LGUsbixyKXtlMShyKSxlPWlkKGUsIm9uQ2hhbmdlIiksMDxlLmxlbmd0aCYmKG49bmV3IHBnKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLHQucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6ZX0pKX12YXIgd2E9bnVsbCxLYT1udWxsO2Z1bmN0aW9uIEIkKHQpe00xKHQsMCl9ZnVuY3Rpb24gYWYodCl7dmFyIGU9TGwodCk7aWYoWl8oZSkpcmV0dXJuIHR9ZnVuY3Rpb24gVSQodCxlKXtpZih0PT09ImNoYW5nZSIpcmV0dXJuIGV9dmFyIEMxPSExO2lmKGZpKXt2YXIgcGg7aWYoZmkpe3ZhciBtaD0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighbWgpe3ZhciBNeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtNeS5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47IiksbWg9dHlwZW9mIE15Lm9uaW5wdXQ9PSJmdW5jdGlvbiJ9cGg9bWh9ZWxzZSBwaD0hMTtDMT1waCYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBMeSgpe3dhJiYod2EuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLGsxKSxLYT13YT1udWxsKX1mdW5jdGlvbiBrMSh0KXtpZih0LnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJmFmKEthKSl7dmFyIGU9W107RTEoZSxLYSx0LGFnKHQpKSxpMShCJCxlKX19ZnVuY3Rpb24gVyQodCxlLG4pe3Q9PT0iZm9jdXNpbiI/KEx5KCksd2E9ZSxLYT1uLHdhLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixrMSkpOnQ9PT0iZm9jdXNvdXQiJiZMeSgpfWZ1bmN0aW9uIFYkKHQpe2lmKHQ9PT0ic2VsZWN0aW9uY2hhbmdlInx8dD09PSJrZXl1cCJ8fHQ9PT0ia2V5ZG93biIpcmV0dXJuIGFmKEthKX1mdW5jdGlvbiBIJCh0LGUpe2lmKHQ9PT0iY2xpY2siKXJldHVybiBhZihlKX1mdW5jdGlvbiBLJCh0LGUpe2lmKHQ9PT0iaW5wdXQifHx0PT09ImNoYW5nZSIpcmV0dXJuIGFmKGUpfWZ1bmN0aW9uIFokKHQsZSl7cmV0dXJuIHQ9PT1lJiYodCE9PTB8fDEvdD09PTEvZSl8fHQhPT10JiZlIT09ZX12YXIgYnI9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6WiQ7ZnVuY3Rpb24gWmEodCxlKXtpZihicih0LGUpKXJldHVybiEwO2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXModCkscj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoIWVwLmNhbGwoZSxpKXx8IWJyKHRbaV0sZVtpXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gRHkodCl7Zm9yKDt0JiZ0LmZpcnN0Q2hpbGQ7KXQ9dC5maXJzdENoaWxkO3JldHVybiB0fWZ1bmN0aW9uIEl5KHQsZSl7dmFyIG49RHkodCk7dD0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9dCtuLnRleHRDb250ZW50Lmxlbmd0aCx0PD1lJiZyPj1lKXJldHVybntub2RlOm4sb2Zmc2V0OmUtdH07dD1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49RHkobil9fWZ1bmN0aW9uIGIxKHQsZSl7cmV0dXJuIHQmJmU/dD09PWU/ITA6dCYmdC5ub2RlVHlwZT09PTM/ITE6ZSYmZS5ub2RlVHlwZT09PTM/YjEodCxlLnBhcmVudE5vZGUpOiJjb250YWlucyJpbiB0P3QuY29udGFpbnMoZSk6dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hISh0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJjE2KTohMTohMX1mdW5jdGlvbiAkMSgpe2Zvcih2YXIgdD13aW5kb3csZT1KYygpO2UgaW5zdGFuY2VvZiB0LkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiBlLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKXQ9ZS5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7ZT1KYyh0LmRvY3VtZW50KX1yZXR1cm4gZX1mdW5jdGlvbiB2Zyh0KXt2YXIgZT10JiZ0Lm5vZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUmJihlPT09ImlucHV0IiYmKHQudHlwZT09PSJ0ZXh0Inx8dC50eXBlPT09InNlYXJjaCJ8fHQudHlwZT09PSJ0ZWwifHx0LnR5cGU9PT0idXJsInx8dC50eXBlPT09InBhc3N3b3JkIil8fGU9PT0idGV4dGFyZWEifHx0LmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gRyQodCl7dmFyIGU9JDEoKSxuPXQuZm9jdXNlZEVsZW0scj10LnNlbGVjdGlvblJhbmdlO2lmKGUhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJmIxKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiZ2ZyhuKSl7aWYoZT1yLnN0YXJ0LHQ9ci5lbmQsdD09PXZvaWQgMCYmKHQ9ZSksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD1lLG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKHQsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYodD0oZT1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmZS5kZWZhdWx0Vmlld3x8d2luZG93LHQuZ2V0U2VsZWN0aW9uKXt0PXQuZ2V0U2VsZWN0aW9uKCk7dmFyIGk9bi50ZXh0Q29udGVudC5sZW5ndGgsbz1NYXRoLm1pbihyLnN0YXJ0LGkpO3I9ci5lbmQ9PT12b2lkIDA/bzpNYXRoLm1pbihyLmVuZCxpKSwhdC5leHRlbmQmJm8+ciYmKGk9cixyPW8sbz1pKSxpPUl5KG4sbyk7dmFyIGw9SXkobixyKTtpJiZsJiYodC5yYW5nZUNvdW50IT09MXx8dC5hbmNob3JOb2RlIT09aS5ub2RlfHx0LmFuY2hvck9mZnNldCE9PWkub2Zmc2V0fHx0LmZvY3VzTm9kZSE9PWwubm9kZXx8dC5mb2N1c09mZnNldCE9PWwub2Zmc2V0KSYmKGU9ZS5jcmVhdGVSYW5nZSgpLGUuc2V0U3RhcnQoaS5ub2RlLGkub2Zmc2V0KSx0LnJlbW92ZUFsbFJhbmdlcygpLG8+cj8odC5hZGRSYW5nZShlKSx0LmV4dGVuZChsLm5vZGUsbC5vZmZzZXQpKTooZS5zZXRFbmQobC5ub2RlLGwub2Zmc2V0KSx0LmFkZFJhbmdlKGUpKSl9fWZvcihlPVtdLHQ9bjt0PXQucGFyZW50Tm9kZTspdC5ub2RlVHlwZT09PTEmJmUucHVzaCh7ZWxlbWVudDp0LGxlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPGUubGVuZ3RoO24rKyl0PWVbbl0sdC5lbGVtZW50LnNjcm9sbExlZnQ9dC5sZWZ0LHQuZWxlbWVudC5zY3JvbGxUb3A9dC50b3B9fXZhciBZJD1maSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxBbD1udWxsLHhwPW51bGwsU2E9bnVsbCxfcD0hMTtmdW5jdGlvbiBqeSh0LGUsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7X3B8fEFsPT1udWxsfHxBbCE9PUpjKHIpfHwocj1BbCwic2VsZWN0aW9uU3RhcnQiaW4gciYmdmcocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxTYSYmWmEoU2Escil8fChTYT1yLHI9aWQoeHAsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKGU9bmV3IHBnKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCxlLG4pLHQucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6cn0pLGUudGFyZ2V0PUFsKSkpfWZ1bmN0aW9uIG9jKHQsZSl7dmFyIG49e307cmV0dXJuIG5bdC50b0xvd2VyQ2FzZSgpXT1lLnRvTG93ZXJDYXNlKCksblsiV2Via2l0Iit0XT0id2Via2l0IitlLG5bIk1veiIrdF09Im1veiIrZSxufXZhciBNbD17YW5pbWF0aW9uZW5kOm9jKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246b2MoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Om9jKCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6b2MoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LGdoPXt9LFQxPXt9O2ZpJiYoVDE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBNbC5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBNbC5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBNbC5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgTWwudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiB1Zih0KXtpZihnaFt0XSlyZXR1cm4gZ2hbdF07aWYoIU1sW3RdKXJldHVybiB0O3ZhciBlPU1sW3RdLG47Zm9yKG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pJiZuIGluIFQxKXJldHVybiBnaFt0XT1lW25dO3JldHVybiB0fXZhciBOMT11ZigiYW5pbWF0aW9uZW5kIiksUjE9dWYoImFuaW1hdGlvbml0ZXJhdGlvbiIpLE8xPXVmKCJhbmltYXRpb25zdGFydCIpLFAxPXVmKCJ0cmFuc2l0aW9uZW5kIiksQTE9bmV3IE1hcCx6eT0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24geG8odCxlKXtBMS5zZXQodCxlKSxsbChlLFt0XSl9Zm9yKHZhciB2aD0wO3ZoPHp5Lmxlbmd0aDt2aCsrKXt2YXIgeWg9enlbdmhdLFgkPXloLnRvTG93ZXJDYXNlKCksSiQ9eWhbMF0udG9VcHBlckNhc2UoKSt5aC5zbGljZSgxKTt4byhYJCwib24iK0okKX14byhOMSwib25BbmltYXRpb25FbmQiKTt4byhSMSwib25BbmltYXRpb25JdGVyYXRpb24iKTt4byhPMSwib25BbmltYXRpb25TdGFydCIpO3hvKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTt4bygiZm9jdXNpbiIsIm9uRm9jdXMiKTt4bygiZm9jdXNvdXQiLCJvbkJsdXIiKTt4byhQMSwib25UcmFuc2l0aW9uRW5kIik7b3MoIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtvcygib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO29zKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7b3MoIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtsbCgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7bGwoIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtsbCgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7bGwoIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7bGwoIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO2xsKCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBoYT0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksUSQ9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChoYSkpO2Z1bmN0aW9uIEZ5KHQsZSxuKXt2YXIgcj10LnR5cGV8fCJ1bmtub3duLWV2ZW50Ijt0LmN1cnJlbnRUYXJnZXQ9bixYYihyLGUsdm9pZCAwLHQpLHQuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIE0xKHQsZSl7ZT0oZSY0KSE9PTA7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl0saT1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIG89dm9pZCAwO2lmKGUpZm9yKHZhciBsPXIubGVuZ3RoLTE7MDw9bDtsLS0pe3ZhciBzPXJbbF0sYT1zLmluc3RhbmNlLHU9cy5jdXJyZW50VGFyZ2V0O2lmKHM9cy5saXN0ZW5lcixhIT09byYmaS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7RnkoaSxzLHUpLG89YX1lbHNlIGZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2lmKHM9cltsXSxhPXMuaW5zdGFuY2UsdT1zLmN1cnJlbnRUYXJnZXQscz1zLmxpc3RlbmVyLGEhPT1vJiZpLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTtGeShpLHMsdSksbz1hfX19aWYocWMpdGhyb3cgdD1tcCxxYz0hMSxtcD1udWxsLHR9ZnVuY3Rpb24gZXQodCxlKXt2YXIgbj1lW2twXTtuPT09dm9pZCAwJiYobj1lW2twXT1uZXcgU2V0KTt2YXIgcj10KyJfX2J1YmJsZSI7bi5oYXMocil8fChMMShlLHQsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIHhoKHQsZSxuKXt2YXIgcj0wO2UmJihyfD00KSxMMShuLHQscixlKX12YXIgbGM9Il9yZWFjdExpc3RlbmluZyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gR2EodCl7aWYoIXRbbGNdKXt0W2xjXT0hMCxVXy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24hPT0ic2VsZWN0aW9uY2hhbmdlIiYmKFEkLmhhcyhuKXx8eGgobiwhMSx0KSx4aChuLCEwLHQpKX0pO3ZhciBlPXQubm9kZVR5cGU9PT05P3Q6dC5vd25lckRvY3VtZW50O2U9PT1udWxsfHxlW2xjXXx8KGVbbGNdPSEwLHhoKCJzZWxlY3Rpb25jaGFuZ2UiLCExLGUpKX19ZnVuY3Rpb24gTDEodCxlLG4scil7c3dpdGNoKHkxKGUpKXtjYXNlIDE6dmFyIGk9ZiQ7YnJlYWs7Y2FzZSA0Omk9aCQ7YnJlYWs7ZGVmYXVsdDppPWZnfW49aS5iaW5kKG51bGwsZSxuLHQpLGk9dm9pZCAwLCFwcHx8ZSE9PSJ0b3VjaHN0YXJ0IiYmZSE9PSJ0b3VjaG1vdmUiJiZlIT09IndoZWVsInx8KGk9ITApLHI/aSE9PXZvaWQgMD90LmFkZEV2ZW50TGlzdGVuZXIoZSxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6aX0pOnQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApOmkhPT12b2lkIDA/dC5hZGRFdmVudExpc3RlbmVyKGUsbix7cGFzc2l2ZTppfSk6dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9ZnVuY3Rpb24gX2godCxlLG4scixpKXt2YXIgbz1yO2lmKCEoZSYxKSYmIShlJjIpJiZyIT09bnVsbCllOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBsPXIudGFnO2lmKGw9PT0zfHxsPT09NCl7dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihzPT09aXx8cy5ub2RlVHlwZT09PTgmJnMucGFyZW50Tm9kZT09PWkpYnJlYWs7aWYobD09PTQpZm9yKGw9ci5yZXR1cm47bCE9PW51bGw7KXt2YXIgYT1sLnRhZztpZigoYT09PTN8fGE9PT00KSYmKGE9bC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhPT09aXx8YS5ub2RlVHlwZT09PTgmJmEucGFyZW50Tm9kZT09PWkpKXJldHVybjtsPWwucmV0dXJufWZvcig7cyE9PW51bGw7KXtpZihsPVBvKHMpLGw9PT1udWxsKXJldHVybjtpZihhPWwudGFnLGE9PT01fHxhPT09Nil7cj1vPWw7Y29udGludWUgZX1zPXMucGFyZW50Tm9kZX19cj1yLnJldHVybn1pMShmdW5jdGlvbigpe3ZhciB1PW8sYz1hZyhuKSxkPVtdO2U6e3ZhciBmPUExLmdldCh0KTtpZihmIT09dm9pZCAwKXt2YXIgaD1wZyxnPXQ7c3dpdGNoKHQpe2Nhc2Uia2V5cHJlc3MiOmlmKE1jKG4pPT09MClicmVhayBlO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6aD1UJDticmVhaztjYXNlImZvY3VzaW4iOmc9ImZvY3VzIixoPWhoO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOmc9ImJsdXIiLGg9aGg7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6aD1oaDticmVhaztjYXNlImNsaWNrIjppZihuLmJ1dHRvbj09PTIpYnJlYWsgZTtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOmg9VHk7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6aD1nJDticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpoPU8kO2JyZWFrO2Nhc2UgTjE6Y2FzZSBSMTpjYXNlIE8xOmg9eCQ7YnJlYWs7Y2FzZSBQMTpoPUEkO2JyZWFrO2Nhc2Uic2Nyb2xsIjpoPXAkO2JyZWFrO2Nhc2Uid2hlZWwiOmg9TCQ7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6aD13JDticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjpoPVJ5fXZhciBtPShlJjQpIT09MCx3PSFtJiZ0PT09InNjcm9sbCIsdj1tP2YhPT1udWxsP2YrIkNhcHR1cmUiOm51bGw6ZjttPVtdO2Zvcih2YXIgeT11LF87eSE9PW51bGw7KXtfPXk7dmFyIFM9Xy5zdGF0ZU5vZGU7aWYoXy50YWc9PT01JiZTIT09bnVsbCYmKF89Uyx2IT09bnVsbCYmKFM9VWEoeSx2KSxTIT1udWxsJiZtLnB1c2goWWEoeSxTLF8pKSkpLHcpYnJlYWs7eT15LnJldHVybn0wPG0ubGVuZ3RoJiYoZj1uZXcgaChmLGcsbnVsbCxuLGMpLGQucHVzaCh7ZXZlbnQ6ZixsaXN0ZW5lcnM6bX0pKX19aWYoIShlJjcpKXtlOntpZihmPXQ9PT0ibW91c2VvdmVyInx8dD09PSJwb2ludGVyb3ZlciIsaD10PT09Im1vdXNlb3V0Inx8dD09PSJwb2ludGVyb3V0IixmJiZuIT09ZnAmJihnPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihQbyhnKXx8Z1toaV0pKWJyZWFrIGU7aWYoKGh8fGYpJiYoZj1jLndpbmRvdz09PWM/YzooZj1jLm93bmVyRG9jdW1lbnQpP2YuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93OndpbmRvdyxoPyhnPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQsaD11LGc9Zz9QbyhnKTpudWxsLGchPT1udWxsJiYodz1zbChnKSxnIT09d3x8Zy50YWchPT01JiZnLnRhZyE9PTYpJiYoZz1udWxsKSk6KGg9bnVsbCxnPXUpLGghPT1nKSl7aWYobT1UeSxTPSJvbk1vdXNlTGVhdmUiLHY9Im9uTW91c2VFbnRlciIseT0ibW91c2UiLCh0PT09InBvaW50ZXJvdXQifHx0PT09InBvaW50ZXJvdmVyIikmJihtPVJ5LFM9Im9uUG9pbnRlckxlYXZlIix2PSJvblBvaW50ZXJFbnRlciIseT0icG9pbnRlciIpLHc9aD09bnVsbD9mOkxsKGgpLF89Zz09bnVsbD9mOkxsKGcpLGY9bmV3IG0oUyx5KyJsZWF2ZSIsaCxuLGMpLGYudGFyZ2V0PXcsZi5yZWxhdGVkVGFyZ2V0PV8sUz1udWxsLFBvKGMpPT09dSYmKG09bmV3IG0odix5KyJlbnRlciIsZyxuLGMpLG0udGFyZ2V0PV8sbS5yZWxhdGVkVGFyZ2V0PXcsUz1tKSx3PVMsaCYmZyl0Ontmb3IobT1oLHY9Zyx5PTAsXz1tO187Xz15bChfKSl5Kys7Zm9yKF89MCxTPXY7UztTPXlsKFMpKV8rKztmb3IoOzA8eS1fOyltPXlsKG0pLHktLTtmb3IoOzA8Xy15Oyl2PXlsKHYpLF8tLTtmb3IoO3ktLTspe2lmKG09PT12fHx2IT09bnVsbCYmbT09PXYuYWx0ZXJuYXRlKWJyZWFrIHQ7bT15bChtKSx2PXlsKHYpfW09bnVsbH1lbHNlIG09bnVsbDtoIT09bnVsbCYmQnkoZCxmLGgsbSwhMSksZyE9PW51bGwmJnchPT1udWxsJiZCeShkLHcsZyxtLCEwKX19ZTp7aWYoZj11P0xsKHUpOndpbmRvdyxoPWYubm9kZU5hbWUmJmYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxoPT09InNlbGVjdCJ8fGg9PT0iaW5wdXQiJiZmLnR5cGU9PT0iZmlsZSIpdmFyIEU9VSQ7ZWxzZSBpZihBeShmKSlpZihDMSlFPUskO2Vsc2V7RT1WJDt2YXIgJD1XJH1lbHNlKGg9Zi5ub2RlTmFtZSkmJmgudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihmLnR5cGU9PT0iY2hlY2tib3gifHxmLnR5cGU9PT0icmFkaW8iKSYmKEU9SCQpO2lmKEUmJihFPUUodCx1KSkpe0UxKGQsRSxuLGMpO2JyZWFrIGV9JCYmJCh0LGYsdSksdD09PSJmb2N1c291dCImJigkPWYuX3dyYXBwZXJTdGF0ZSkmJiQuY29udHJvbGxlZCYmZi50eXBlPT09Im51bWJlciImJnNwKGYsIm51bWJlciIsZi52YWx1ZSl9c3dpdGNoKCQ9dT9MbCh1KTp3aW5kb3csdCl7Y2FzZSJmb2N1c2luIjooQXkoJCl8fCQuY29udGVudEVkaXRhYmxlPT09InRydWUiKSYmKEFsPSQseHA9dSxTYT1udWxsKTticmVhaztjYXNlImZvY3Vzb3V0IjpTYT14cD1BbD1udWxsO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpfcD0hMDticmVhaztjYXNlImNvbnRleHRtZW51IjpjYXNlIm1vdXNldXAiOmNhc2UiZHJhZ2VuZCI6X3A9ITEsankoZCxuLGMpO2JyZWFrO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZihZJClicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOmp5KGQsbixjKX12YXIgQztpZihnZyllOntzd2l0Y2godCl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgTj0ib25Db21wb3NpdGlvblN0YXJ0IjticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOk49Im9uQ29tcG9zaXRpb25FbmQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Tj0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1OPXZvaWQgMH1lbHNlIFBsP3cxKHQsbikmJihOPSJvbkNvbXBvc2l0aW9uRW5kIik6dD09PSJrZXlkb3duIiYmbi5rZXlDb2RlPT09MjI5JiYoTj0ib25Db21wb3NpdGlvblN0YXJ0Iik7TiYmKF8xJiZuLmxvY2FsZSE9PSJrbyImJihQbHx8TiE9PSJvbkNvbXBvc2l0aW9uU3RhcnQiP049PT0ib25Db21wb3NpdGlvbkVuZCImJlBsJiYoQz14MSgpKTooVmk9YyxoZz0idmFsdWUiaW4gVmk/VmkudmFsdWU6VmkudGV4dENvbnRlbnQsUGw9ITApKSwkPWlkKHUsTiksMDwkLmxlbmd0aCYmKE49bmV3IE55KE4sdCxudWxsLG4sYyksZC5wdXNoKHtldmVudDpOLGxpc3RlbmVyczokfSksQz9OLmRhdGE9QzooQz1TMShuKSxDIT09bnVsbCYmKE4uZGF0YT1DKSkpKSwoQz1JJD9qJCh0LG4pOnokKHQsbikpJiYodT1pZCh1LCJvbkJlZm9yZUlucHV0IiksMDx1Lmxlbmd0aCYmKGM9bmV3IE55KCJvbkJlZm9yZUlucHV0IiwiYmVmb3JlaW5wdXQiLG51bGwsbixjKSxkLnB1c2goe2V2ZW50OmMsbGlzdGVuZXJzOnV9KSxjLmRhdGE9QykpfU0xKGQsZSl9KX1mdW5jdGlvbiBZYSh0LGUsbil7cmV0dXJue2luc3RhbmNlOnQsbGlzdGVuZXI6ZSxjdXJyZW50VGFyZ2V0Om59fWZ1bmN0aW9uIGlkKHQsZSl7Zm9yKHZhciBuPWUrIkNhcHR1cmUiLHI9W107dCE9PW51bGw7KXt2YXIgaT10LG89aS5zdGF0ZU5vZGU7aS50YWc9PT01JiZvIT09bnVsbCYmKGk9byxvPVVhKHQsbiksbyE9bnVsbCYmci51bnNoaWZ0KFlhKHQsbyxpKSksbz1VYSh0LGUpLG8hPW51bGwmJnIucHVzaChZYSh0LG8saSkpKSx0PXQucmV0dXJufXJldHVybiByfWZ1bmN0aW9uIHlsKHQpe2lmKHQ9PT1udWxsKXJldHVybiBudWxsO2RvIHQ9dC5yZXR1cm47d2hpbGUodCYmdC50YWchPT01KTtyZXR1cm4gdHx8bnVsbH1mdW5jdGlvbiBCeSh0LGUsbixyLGkpe2Zvcih2YXIgbz1lLl9yZWFjdE5hbWUsbD1bXTtuIT09bnVsbCYmbiE9PXI7KXt2YXIgcz1uLGE9cy5hbHRlcm5hdGUsdT1zLnN0YXRlTm9kZTtpZihhIT09bnVsbCYmYT09PXIpYnJlYWs7cy50YWc9PT01JiZ1IT09bnVsbCYmKHM9dSxpPyhhPVVhKG4sbyksYSE9bnVsbCYmbC51bnNoaWZ0KFlhKG4sYSxzKSkpOml8fChhPVVhKG4sbyksYSE9bnVsbCYmbC5wdXNoKFlhKG4sYSxzKSkpKSxuPW4ucmV0dXJufWwubGVuZ3RoIT09MCYmdC5wdXNoKHtldmVudDplLGxpc3RlbmVyczpsfSl9dmFyIHEkPS9cclxuPy9nLGVUPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gVXkodCl7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90OiIiK3QpLnJlcGxhY2UocSQsYApgKS5yZXBsYWNlKGVULCIiKX1mdW5jdGlvbiBzYyh0LGUsbil7aWYoZT1VeShlKSxVeSh0KSE9PWUmJm4pdGhyb3cgRXJyb3IoVSg0MjUpKX1mdW5jdGlvbiBvZCgpe312YXIgd3A9bnVsbCxTcD1udWxsO2Z1bmN0aW9uIEVwKHQsZSl7cmV0dXJuIHQ9PT0idGV4dGFyZWEifHx0PT09Im5vc2NyaXB0Inx8dHlwZW9mIGUuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgZS5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiBlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT0ib2JqZWN0IiYmZS5kYW5nZXJvdXNseVNldElubmVySFRNTCE9PW51bGwmJmUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIT1udWxsfXZhciBDcD10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0OnZvaWQgMCx0VD10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp2b2lkIDAsV3k9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZTp2b2lkIDAsblQ9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnR5cGVvZiBXeTwidSI/ZnVuY3Rpb24odCl7cmV0dXJuIFd5LnJlc29sdmUobnVsbCkudGhlbih0KS5jYXRjaChyVCl9OkNwO2Z1bmN0aW9uIHJUKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9ZnVuY3Rpb24gd2godCxlKXt2YXIgbj1lLHI9MDtkb3t2YXIgaT1uLm5leHRTaWJsaW5nO2lmKHQucmVtb3ZlQ2hpbGQobiksaSYmaS5ub2RlVHlwZT09PTgpaWYobj1pLmRhdGEsbj09PSIvJCIpe2lmKHI9PT0wKXt0LnJlbW92ZUNoaWxkKGkpLEhhKGUpO3JldHVybn1yLS19ZWxzZSBuIT09IiQiJiZuIT09IiQ/IiYmbiE9PSIkISJ8fHIrKztuPWl9d2hpbGUobik7SGEoZSl9ZnVuY3Rpb24gSmkodCl7Zm9yKDt0IT1udWxsO3Q9dC5uZXh0U2libGluZyl7dmFyIGU9dC5ub2RlVHlwZTtpZihlPT09MXx8ZT09PTMpYnJlYWs7aWYoZT09PTgpe2lmKGU9dC5kYXRhLGU9PT0iJCJ8fGU9PT0iJCEifHxlPT09IiQ/IilicmVhaztpZihlPT09Ii8kIilyZXR1cm4gbnVsbH19cmV0dXJuIHR9ZnVuY3Rpb24gVnkodCl7dD10LnByZXZpb3VzU2libGluZztmb3IodmFyIGU9MDt0Oyl7aWYodC5ub2RlVHlwZT09PTgpe3ZhciBuPXQuZGF0YTtpZihuPT09IiQifHxuPT09IiQhInx8bj09PSIkPyIpe2lmKGU9PT0wKXJldHVybiB0O2UtLX1lbHNlIG49PT0iLyQiJiZlKyt9dD10LnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgQ3M9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksTHI9Il9fcmVhY3RGaWJlciQiK0NzLFhhPSJfX3JlYWN0UHJvcHMkIitDcyxoaT0iX19yZWFjdENvbnRhaW5lciQiK0NzLGtwPSJfX3JlYWN0RXZlbnRzJCIrQ3MsaVQ9Il9fcmVhY3RMaXN0ZW5lcnMkIitDcyxvVD0iX19yZWFjdEhhbmRsZXMkIitDcztmdW5jdGlvbiBQbyh0KXt2YXIgZT10W0xyXTtpZihlKXJldHVybiBlO2Zvcih2YXIgbj10LnBhcmVudE5vZGU7bjspe2lmKGU9bltoaV18fG5bTHJdKXtpZihuPWUuYWx0ZXJuYXRlLGUuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKHQ9VnkodCk7dCE9PW51bGw7KXtpZihuPXRbTHJdKXJldHVybiBuO3Q9VnkodCl9cmV0dXJuIGV9dD1uLG49dC5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIEx1KHQpe3JldHVybiB0PXRbTHJdfHx0W2hpXSwhdHx8dC50YWchPT01JiZ0LnRhZyE9PTYmJnQudGFnIT09MTMmJnQudGFnIT09Mz9udWxsOnR9ZnVuY3Rpb24gTGwodCl7aWYodC50YWc9PT01fHx0LnRhZz09PTYpcmV0dXJuIHQuc3RhdGVOb2RlO3Rocm93IEVycm9yKFUoMzMpKX1mdW5jdGlvbiBjZih0KXtyZXR1cm4gdFtYYV18fG51bGx9dmFyIGJwPVtdLERsPS0xO2Z1bmN0aW9uIF9vKHQpe3JldHVybntjdXJyZW50OnR9fWZ1bmN0aW9uIGl0KHQpezA+RGx8fCh0LmN1cnJlbnQ9YnBbRGxdLGJwW0RsXT1udWxsLERsLS0pfWZ1bmN0aW9uIFhlKHQsZSl7RGwrKyxicFtEbF09dC5jdXJyZW50LHQuY3VycmVudD1lfXZhciBsbz17fSxybj1fbyhsbyksJG49X28oITEpLEhvPWxvO2Z1bmN0aW9uIGxzKHQsZSl7dmFyIG49dC50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gbG87dmFyIHI9dC5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09ZSlyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgaT17fSxvO2ZvcihvIGluIG4paVtvXT1lW29dO3JldHVybiByJiYodD10LnN0YXRlTm9kZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLGl9ZnVuY3Rpb24gVG4odCl7cmV0dXJuIHQ9dC5jaGlsZENvbnRleHRUeXBlcyx0IT1udWxsfWZ1bmN0aW9uIGxkKCl7aXQoJG4pLGl0KHJuKX1mdW5jdGlvbiBIeSh0LGUsbil7aWYocm4uY3VycmVudCE9PWxvKXRocm93IEVycm9yKFUoMTY4KSk7WGUocm4sZSksWGUoJG4sbil9ZnVuY3Rpb24gRDEodCxlLG4pe3ZhciByPXQuc3RhdGVOb2RlO2lmKGU9ZS5jaGlsZENvbnRleHRUeXBlcyx0eXBlb2Ygci5nZXRDaGlsZENvbnRleHQhPSJmdW5jdGlvbiIpcmV0dXJuIG47cj1yLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgaSBpbiByKWlmKCEoaSBpbiBlKSl0aHJvdyBFcnJvcihVKDEwOCxXYih0KXx8IlVua25vd24iLGkpKTtyZXR1cm4gbXQoe30sbixyKX1mdW5jdGlvbiBzZCh0KXtyZXR1cm4gdD0odD10LnN0YXRlTm9kZSkmJnQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fGxvLEhvPXJuLmN1cnJlbnQsWGUocm4sdCksWGUoJG4sJG4uY3VycmVudCksITB9ZnVuY3Rpb24gS3kodCxlLG4pe3ZhciByPXQuc3RhdGVOb2RlO2lmKCFyKXRocm93IEVycm9yKFUoMTY5KSk7bj8odD1EMSh0LGUsSG8pLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9dCxpdCgkbiksaXQocm4pLFhlKHJuLHQpKTppdCgkbiksWGUoJG4sbil9dmFyIG9pPW51bGwsZGY9ITEsU2g9ITE7ZnVuY3Rpb24gSTEodCl7b2k9PT1udWxsP29pPVt0XTpvaS5wdXNoKHQpfWZ1bmN0aW9uIGxUKHQpe2RmPSEwLEkxKHQpfWZ1bmN0aW9uIHdvKCl7aWYoIVNoJiZvaSE9PW51bGwpe1NoPSEwO3ZhciB0PTAsZT1VZTt0cnl7dmFyIG49b2k7Zm9yKFVlPTE7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ZG8gcj1yKCEwKTt3aGlsZShyIT09bnVsbCl9b2k9bnVsbCxkZj0hMX1jYXRjaChpKXt0aHJvdyBvaSE9PW51bGwmJihvaT1vaS5zbGljZSh0KzEpKSxhMSh1Zyx3byksaX1maW5hbGx5e1VlPWUsU2g9ITF9fXJldHVybiBudWxsfXZhciBJbD1bXSxqbD0wLGFkPW51bGwsdWQ9MCxRbj1bXSxxbj0wLEtvPW51bGwsYWk9MSx1aT0iIjtmdW5jdGlvbiBUbyh0LGUpe0lsW2psKytdPXVkLElsW2psKytdPWFkLGFkPXQsdWQ9ZX1mdW5jdGlvbiBqMSh0LGUsbil7UW5bcW4rK109YWksUW5bcW4rK109dWksUW5bcW4rK109S28sS289dDt2YXIgcj1haTt0PXVpO3ZhciBpPTMyLVNyKHIpLTE7ciY9figxPDxpKSxuKz0xO3ZhciBvPTMyLVNyKGUpK2k7aWYoMzA8byl7dmFyIGw9aS1pJTU7bz0ociYoMTw8bCktMSkudG9TdHJpbmcoMzIpLHI+Pj1sLGktPWwsYWk9MTw8MzItU3IoZSkraXxuPDxpfHIsdWk9byt0fWVsc2UgYWk9MTw8b3xuPDxpfHIsdWk9dH1mdW5jdGlvbiB5Zyh0KXt0LnJldHVybiE9PW51bGwmJihUbyh0LDEpLGoxKHQsMSwwKSl9ZnVuY3Rpb24geGcodCl7Zm9yKDt0PT09YWQ7KWFkPUlsWy0tamxdLElsW2psXT1udWxsLHVkPUlsWy0tamxdLElsW2psXT1udWxsO2Zvcig7dD09PUtvOylLbz1RblstLXFuXSxRbltxbl09bnVsbCx1aT1RblstLXFuXSxRbltxbl09bnVsbCxhaT1RblstLXFuXSxRbltxbl09bnVsbH12YXIgRm49bnVsbCx6bj1udWxsLG90PSExLHhyPW51bGw7ZnVuY3Rpb24gejEodCxlKXt2YXIgbj1ucig1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnN0YXRlTm9kZT1lLG4ucmV0dXJuPXQsZT10LmRlbGV0aW9ucyxlPT09bnVsbD8odC5kZWxldGlvbnM9W25dLHQuZmxhZ3N8PTE2KTplLnB1c2gobil9ZnVuY3Rpb24gWnkodCxlKXtzd2l0Y2godC50YWcpe2Nhc2UgNTp2YXIgbj10LnR5cGU7cmV0dXJuIGU9ZS5ub2RlVHlwZSE9PTF8fG4udG9Mb3dlckNhc2UoKSE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOmUsZSE9PW51bGw/KHQuc3RhdGVOb2RlPWUsRm49dCx6bj1KaShlLmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIGU9dC5wZW5kaW5nUHJvcHM9PT0iInx8ZS5ub2RlVHlwZSE9PTM/bnVsbDplLGUhPT1udWxsPyh0LnN0YXRlTm9kZT1lLEZuPXQsem49bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gZT1lLm5vZGVUeXBlIT09OD9udWxsOmUsZSE9PW51bGw/KG49S28hPT1udWxsP3tpZDphaSxvdmVyZmxvdzp1aX06bnVsbCx0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpuLHJldHJ5TGFuZToxMDczNzQxODI0fSxuPW5yKDE4LG51bGwsbnVsbCwwKSxuLnN0YXRlTm9kZT1lLG4ucmV0dXJuPXQsdC5jaGlsZD1uLEZuPXQsem49bnVsbCwhMCk6ITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gJHAodCl7cmV0dXJuKHQubW9kZSYxKSE9PTAmJih0LmZsYWdzJjEyOCk9PT0wfWZ1bmN0aW9uIFRwKHQpe2lmKG90KXt2YXIgZT16bjtpZihlKXt2YXIgbj1lO2lmKCFaeSh0LGUpKXtpZigkcCh0KSl0aHJvdyBFcnJvcihVKDQxOCkpO2U9Smkobi5uZXh0U2libGluZyk7dmFyIHI9Rm47ZSYmWnkodCxlKT96MShyLG4pOih0LmZsYWdzPXQuZmxhZ3MmLTQwOTd8MixvdD0hMSxGbj10KX19ZWxzZXtpZigkcCh0KSl0aHJvdyBFcnJvcihVKDQxOCkpO3QuZmxhZ3M9dC5mbGFncyYtNDA5N3wyLG90PSExLEZuPXR9fX1mdW5jdGlvbiBHeSh0KXtmb3IodD10LnJldHVybjt0IT09bnVsbCYmdC50YWchPT01JiZ0LnRhZyE9PTMmJnQudGFnIT09MTM7KXQ9dC5yZXR1cm47Rm49dH1mdW5jdGlvbiBhYyh0KXtpZih0IT09Rm4pcmV0dXJuITE7aWYoIW90KXJldHVybiBHeSh0KSxvdD0hMCwhMTt2YXIgZTtpZigoZT10LnRhZyE9PTMpJiYhKGU9dC50YWchPT01KSYmKGU9dC50eXBlLGU9ZSE9PSJoZWFkIiYmZSE9PSJib2R5IiYmIUVwKHQudHlwZSx0Lm1lbW9pemVkUHJvcHMpKSxlJiYoZT16bikpe2lmKCRwKHQpKXRocm93IEYxKCksRXJyb3IoVSg0MTgpKTtmb3IoO2U7KXoxKHQsZSksZT1KaShlLm5leHRTaWJsaW5nKX1pZihHeSh0KSx0LnRhZz09PTEzKXtpZih0PXQubWVtb2l6ZWRTdGF0ZSx0PXQhPT1udWxsP3QuZGVoeWRyYXRlZDpudWxsLCF0KXRocm93IEVycm9yKFUoMzE3KSk7ZTp7Zm9yKHQ9dC5uZXh0U2libGluZyxlPTA7dDspe2lmKHQubm9kZVR5cGU9PT04KXt2YXIgbj10LmRhdGE7aWYobj09PSIvJCIpe2lmKGU9PT0wKXt6bj1KaSh0Lm5leHRTaWJsaW5nKTticmVhayBlfWUtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8ZSsrfXQ9dC5uZXh0U2libGluZ316bj1udWxsfX1lbHNlIHpuPUZuP0ppKHQuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIEYxKCl7Zm9yKHZhciB0PXpuO3Q7KXQ9SmkodC5uZXh0U2libGluZyl9ZnVuY3Rpb24gc3MoKXt6bj1Gbj1udWxsLG90PSExfWZ1bmN0aW9uIF9nKHQpe3hyPT09bnVsbD94cj1bdF06eHIucHVzaCh0KX12YXIgc1Q9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gZ3IodCxlKXtpZih0JiZ0LmRlZmF1bHRQcm9wcyl7ZT1tdCh7fSxlKSx0PXQuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiB0KWVbbl09PT12b2lkIDAmJihlW25dPXRbbl0pO3JldHVybiBlfXJldHVybiBlfXZhciBjZD1fbyhudWxsKSxkZD1udWxsLHpsPW51bGwsd2c9bnVsbDtmdW5jdGlvbiBTZygpe3dnPXpsPWRkPW51bGx9ZnVuY3Rpb24gRWcodCl7dmFyIGU9Y2QuY3VycmVudDtpdChjZCksdC5fY3VycmVudFZhbHVlPWV9ZnVuY3Rpb24gTnAodCxlLG4pe2Zvcig7dCE9PW51bGw7KXt2YXIgcj10LmFsdGVybmF0ZTtpZigodC5jaGlsZExhbmVzJmUpIT09ZT8odC5jaGlsZExhbmVzfD1lLHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD1lKSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmZSkhPT1lJiYoci5jaGlsZExhbmVzfD1lKSx0PT09bilicmVhazt0PXQucmV0dXJufX1mdW5jdGlvbiBKbCh0LGUpe2RkPXQsd2c9emw9bnVsbCx0PXQuZGVwZW5kZW5jaWVzLHQhPT1udWxsJiZ0LmZpcnN0Q29udGV4dCE9PW51bGwmJih0LmxhbmVzJmUmJihibj0hMCksdC5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gbHIodCl7dmFyIGU9dC5fY3VycmVudFZhbHVlO2lmKHdnIT09dClpZih0PXtjb250ZXh0OnQsbWVtb2l6ZWRWYWx1ZTplLG5leHQ6bnVsbH0semw9PT1udWxsKXtpZihkZD09PW51bGwpdGhyb3cgRXJyb3IoVSgzMDgpKTt6bD10LGRkLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH19ZWxzZSB6bD16bC5uZXh0PXQ7cmV0dXJuIGV9dmFyIEFvPW51bGw7ZnVuY3Rpb24gQ2codCl7QW89PT1udWxsP0FvPVt0XTpBby5wdXNoKHQpfWZ1bmN0aW9uIEIxKHQsZSxuLHIpe3ZhciBpPWUuaW50ZXJsZWF2ZWQ7cmV0dXJuIGk9PT1udWxsPyhuLm5leHQ9bixDZyhlKSk6KG4ubmV4dD1pLm5leHQsaS5uZXh0PW4pLGUuaW50ZXJsZWF2ZWQ9bixwaSh0LHIpfWZ1bmN0aW9uIHBpKHQsZSl7dC5sYW5lc3w9ZTt2YXIgbj10LmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD1lKSxuPXQsdD10LnJldHVybjt0IT09bnVsbDspdC5jaGlsZExhbmVzfD1lLG49dC5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PWUpLG49dCx0PXQucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgamk9ITE7ZnVuY3Rpb24ga2codCl7dC51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOnQubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBVMSh0LGUpe3Q9dC51cGRhdGVRdWV1ZSxlLnVwZGF0ZVF1ZXVlPT09dCYmKGUudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTp0LmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6dC5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6dC5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6dC5zaGFyZWQsZWZmZWN0czp0LmVmZmVjdHN9KX1mdW5jdGlvbiBjaSh0LGUpe3JldHVybntldmVudFRpbWU6dCxsYW5lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLE1lJjIpe3ZhciBpPXIucGVuZGluZztyZXR1cm4gaT09PW51bGw/ZS5uZXh0PWU6KGUubmV4dD1pLm5leHQsaS5uZXh0PWUpLHIucGVuZGluZz1lLHBpKHQsbil9cmV0dXJuIGk9ci5pbnRlcmxlYXZlZCxpPT09bnVsbD8oZS5uZXh0PWUsQ2cocikpOihlLm5leHQ9aS5uZXh0LGkubmV4dD1lKSxyLmludGVybGVhdmVkPWUscGkodCxuKX1mdW5jdGlvbiBMYyh0LGUsbil7aWYoZT1lLnVwZGF0ZVF1ZXVlLGUhPT1udWxsJiYoZT1lLnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj1lLmxhbmVzO3ImPXQucGVuZGluZ0xhbmVzLG58PXIsZS5sYW5lcz1uLGNnKHQsbil9fWZ1bmN0aW9uIFl5KHQsZSl7dmFyIG49dC51cGRhdGVRdWV1ZSxyPXQuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIGk9bnVsbCxvPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGw9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O289PT1udWxsP2k9bz1sOm89by5uZXh0PWwsbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO289PT1udWxsP2k9bz1lOm89by5uZXh0PWV9ZWxzZSBpPW89ZTtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmksbGFzdEJhc2VVcGRhdGU6byxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LHQudXBkYXRlUXVldWU9bjtyZXR1cm59dD1uLmxhc3RCYXNlVXBkYXRlLHQ9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPWU6dC5uZXh0PWUsbi5sYXN0QmFzZVVwZGF0ZT1lfWZ1bmN0aW9uIGZkKHQsZSxuLHIpe3ZhciBpPXQudXBkYXRlUXVldWU7amk9ITE7dmFyIG89aS5maXJzdEJhc2VVcGRhdGUsbD1pLmxhc3RCYXNlVXBkYXRlLHM9aS5zaGFyZWQucGVuZGluZztpZihzIT09bnVsbCl7aS5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBhPXMsdT1hLm5leHQ7YS5uZXh0PW51bGwsbD09PW51bGw/bz11OmwubmV4dD11LGw9YTt2YXIgYz10LmFsdGVybmF0ZTtjIT09bnVsbCYmKGM9Yy51cGRhdGVRdWV1ZSxzPWMubGFzdEJhc2VVcGRhdGUscyE9PWwmJihzPT09bnVsbD9jLmZpcnN0QmFzZVVwZGF0ZT11OnMubmV4dD11LGMubGFzdEJhc2VVcGRhdGU9YSkpfWlmKG8hPT1udWxsKXt2YXIgZD1pLmJhc2VTdGF0ZTtsPTAsYz11PWE9bnVsbCxzPW87ZG97dmFyIGY9cy5sYW5lLGg9cy5ldmVudFRpbWU7aWYoKHImZik9PT1mKXtjIT09bnVsbCYmKGM9Yy5uZXh0PXtldmVudFRpbWU6aCxsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIGc9dCxtPXM7c3dpdGNoKGY9ZSxoPW4sbS50YWcpe2Nhc2UgMTppZihnPW0ucGF5bG9hZCx0eXBlb2YgZz09ImZ1bmN0aW9uIil7ZD1nLmNhbGwoaCxkLGYpO2JyZWFrIGV9ZD1nO2JyZWFrIGU7Y2FzZSAzOmcuZmxhZ3M9Zy5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihnPW0ucGF5bG9hZCxmPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2cuY2FsbChoLGQsZik6ZyxmPT1udWxsKWJyZWFrIGU7ZD1tdCh7fSxkLGYpO2JyZWFrIGU7Y2FzZSAyOmppPSEwfX1zLmNhbGxiYWNrIT09bnVsbCYmcy5sYW5lIT09MCYmKHQuZmxhZ3N8PTY0LGY9aS5lZmZlY3RzLGY9PT1udWxsP2kuZWZmZWN0cz1bc106Zi5wdXNoKHMpKX1lbHNlIGg9e2V2ZW50VGltZTpoLGxhbmU6Zix0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LGM9PT1udWxsPyh1PWM9aCxhPWQpOmM9Yy5uZXh0PWgsbHw9ZjtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1pLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO2Y9cyxzPWYubmV4dCxmLm5leHQ9bnVsbCxpLmxhc3RCYXNlVXBkYXRlPWYsaS5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYoYz09PW51bGwmJihhPWQpLGkuYmFzZVN0YXRlPWEsaS5maXJzdEJhc2VVcGRhdGU9dSxpLmxhc3RCYXNlVXBkYXRlPWMsZT1pLnNoYXJlZC5pbnRlcmxlYXZlZCxlIT09bnVsbCl7aT1lO2RvIGx8PWkubGFuZSxpPWkubmV4dDt3aGlsZShpIT09ZSl9ZWxzZSBvPT09bnVsbCYmKGkuc2hhcmVkLmxhbmVzPTApO0dvfD1sLHQubGFuZXM9bCx0Lm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gWHkodCxlLG4pe2lmKHQ9ZS5lZmZlY3RzLGUuZWZmZWN0cz1udWxsLHQhPT1udWxsKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0saT1yLmNhbGxiYWNrO2lmKGkhPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTkxLGkpKTtpLmNhbGwocil9fX12YXIgVzE9bmV3IEJfLkNvbXBvbmVudCgpLnJlZnM7ZnVuY3Rpb24gUnAodCxlLG4scil7ZT10Lm1lbW9pemVkU3RhdGUsbj1uKHIsZSksbj1uPT1udWxsP2U6bXQoe30sZSxuKSx0Lm1lbW9pemVkU3RhdGU9bix0LmxhbmVzPT09MCYmKHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciBmZj17aXNNb3VudGVkOmZ1bmN0aW9uKHQpe3JldHVybih0PXQuX3JlYWN0SW50ZXJuYWxzKT9zbCh0KT09PXQ6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbih0LGUsbil7dD10Ll9yZWFjdEludGVybmFsczt2YXIgcj12bigpLGk9ZW8odCksbz1jaShyLGkpO28ucGF5bG9hZD1lLG4hPW51bGwmJihvLmNhbGxiYWNrPW4pLGU9UWkodCxvLGkpLGUhPT1udWxsJiYoRXIoZSx0LGksciksTGMoZSx0LGkpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbih0LGUsbil7dD10Ll9yZWFjdEludGVybmFsczt2YXIgcj12bigpLGk9ZW8odCksbz1jaShyLGkpO28udGFnPTEsby5wYXlsb2FkPWUsbiE9bnVsbCYmKG8uY2FsbGJhY2s9biksZT1RaSh0LG8saSksZSE9PW51bGwmJihFcihlLHQsaSxyKSxMYyhlLHQsaSkpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24odCxlKXt0PXQuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPXZuKCkscj1lbyh0KSxpPWNpKG4scik7aS50YWc9MixlIT1udWxsJiYoaS5jYWxsYmFjaz1lKSxlPVFpKHQsaSxyKSxlIT09bnVsbCYmKEVyKGUsdCxyLG4pLExjKGUsdCxyKSl9fTtmdW5jdGlvbiBKeSh0LGUsbixyLGksbyxsKXtyZXR1cm4gdD10LnN0YXRlTm9kZSx0eXBlb2YgdC5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/dC5zaG91bGRDb21wb25lbnRVcGRhdGUocixvLGwpOmUucHJvdG90eXBlJiZlLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hWmEobixyKXx8IVphKGksbyk6ITB9ZnVuY3Rpb24gVjEodCxlLG4pe3ZhciByPSExLGk9bG8sbz1lLmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsP289bHIobyk6KGk9VG4oZSk/SG86cm4uY3VycmVudCxyPWUuY29udGV4dFR5cGVzLG89KHI9ciE9bnVsbCk/bHModCxpKTpsbyksZT1uZXcgZShuLG8pLHQubWVtb2l6ZWRTdGF0ZT1lLnN0YXRlIT09bnVsbCYmZS5zdGF0ZSE9PXZvaWQgMD9lLnN0YXRlOm51bGwsZS51cGRhdGVyPWZmLHQuc3RhdGVOb2RlPWUsZS5fcmVhY3RJbnRlcm5hbHM9dCxyJiYodD10LnN0YXRlTm9kZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9aSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLGV9ZnVuY3Rpb24gUXkodCxlLG4scil7dD1lLnN0YXRlLHR5cGVvZiBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJmUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksZS5zdGF0ZSE9PXQmJmZmLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpfWZ1bmN0aW9uIE9wKHQsZSxuLHIpe3ZhciBpPXQuc3RhdGVOb2RlO2kucHJvcHM9bixpLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxpLnJlZnM9VzEsa2codCk7dmFyIG89ZS5jb250ZXh0VHlwZTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsP2kuY29udGV4dD1scihvKToobz1UbihlKT9Ibzpybi5jdXJyZW50LGkuY29udGV4dD1scyh0LG8pKSxpLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxvPWUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBvPT0iZnVuY3Rpb24iJiYoUnAodCxlLG8sbiksaS5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KGU9aS5zdGF0ZSx0eXBlb2YgaS5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmkuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksZSE9PWkuc3RhdGUmJmZmLmVucXVldWVSZXBsYWNlU3RhdGUoaSxpLnN0YXRlLG51bGwpLGZkKHQsbixpLHIpLGkuc3RhdGU9dC5tZW1vaXplZFN0YXRlKSx0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIFhzKHQsZSxuKXtpZih0PW4ucmVmLHQhPT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoVSgzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihVKDE0Nyx0KSk7dmFyIGk9cixvPSIiK3Q7cmV0dXJuIGUhPT1udWxsJiZlLnJlZiE9PW51bGwmJnR5cGVvZiBlLnJlZj09ImZ1bmN0aW9uIiYmZS5yZWYuX3N0cmluZ1JlZj09PW8/ZS5yZWY6KGU9ZnVuY3Rpb24obCl7dmFyIHM9aS5yZWZzO3M9PT1XMSYmKHM9aS5yZWZzPXt9KSxsPT09bnVsbD9kZWxldGUgc1tvXTpzW29dPWx9LGUuX3N0cmluZ1JlZj1vLGUpfWlmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBFcnJvcihVKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihVKDI5MCx0KSl9cmV0dXJuIHR9ZnVuY3Rpb24gdWModCxlKXt0aHJvdyB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSxFcnJvcihVKDMxLHQ9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9Ijp0KSl9ZnVuY3Rpb24gcXkodCl7dmFyIGU9dC5faW5pdDtyZXR1cm4gZSh0Ll9wYXlsb2FkKX1mdW5jdGlvbiBIMSh0KXtmdW5jdGlvbiBlKHYseSl7aWYodCl7dmFyIF89di5kZWxldGlvbnM7Xz09PW51bGw/KHYuZGVsZXRpb25zPVt5XSx2LmZsYWdzfD0xNik6Xy5wdXNoKHkpfX1mdW5jdGlvbiBuKHYseSl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKDt5IT09bnVsbDspZSh2LHkpLHk9eS5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIodix5KXtmb3Iodj1uZXcgTWFwO3khPT1udWxsOyl5LmtleSE9PW51bGw/di5zZXQoeS5rZXkseSk6di5zZXQoeS5pbmRleCx5KSx5PXkuc2libGluZztyZXR1cm4gdn1mdW5jdGlvbiBpKHYseSl7cmV0dXJuIHY9dG8odix5KSx2LmluZGV4PTAsdi5zaWJsaW5nPW51bGwsdn1mdW5jdGlvbiBvKHYseSxfKXtyZXR1cm4gdi5pbmRleD1fLHQ/KF89di5hbHRlcm5hdGUsXyE9PW51bGw/KF89Xy5pbmRleCxfPHk/KHYuZmxhZ3N8PTIseSk6Xyk6KHYuZmxhZ3N8PTIseSkpOih2LmZsYWdzfD0xMDQ4NTc2LHkpfWZ1bmN0aW9uIGwodil7cmV0dXJuIHQmJnYuYWx0ZXJuYXRlPT09bnVsbCYmKHYuZmxhZ3N8PTIpLHZ9ZnVuY3Rpb24gcyh2LHksXyxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nj8oeT1OaChfLHYubW9kZSxTKSx5LnJldHVybj12LHkpOih5PWkoeSxfKSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGEodix5LF8sUyl7dmFyIEU9Xy50eXBlO3JldHVybiBFPT09T2w/Yyh2LHksXy5wcm9wcy5jaGlsZHJlbixTLF8ua2V5KTp5IT09bnVsbCYmKHkuZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09SWkmJnF5KEUpPT09eS50eXBlKT8oUz1pKHksXy5wcm9wcyksUy5yZWY9WHModix5LF8pLFMucmV0dXJuPXYsUyk6KFM9QmMoXy50eXBlLF8ua2V5LF8ucHJvcHMsbnVsbCx2Lm1vZGUsUyksUy5yZWY9WHModix5LF8pLFMucmV0dXJuPXYsUyl9ZnVuY3Rpb24gdSh2LHksXyxTKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09NHx8eS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PV8uY29udGFpbmVySW5mb3x8eS5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1fLmltcGxlbWVudGF0aW9uPyh5PVJoKF8sdi5tb2RlLFMpLHkucmV0dXJuPXYseSk6KHk9aSh5LF8uY2hpbGRyZW58fFtdKSx5LnJldHVybj12LHkpfWZ1bmN0aW9uIGModix5LF8sUyxFKXtyZXR1cm4geT09PW51bGx8fHkudGFnIT09Nz8oeT1qbyhfLHYubW9kZSxTLEUpLHkucmV0dXJuPXYseSk6KHk9aSh5LF8pLHkucmV0dXJuPXYseSl9ZnVuY3Rpb24gZCh2LHksXyl7aWYodHlwZW9mIHk9PSJzdHJpbmciJiZ5IT09IiJ8fHR5cGVvZiB5PT0ibnVtYmVyIilyZXR1cm4geT1OaCgiIit5LHYubW9kZSxfKSx5LnJldHVybj12LHk7aWYodHlwZW9mIHk9PSJvYmplY3QiJiZ5IT09bnVsbCl7c3dpdGNoKHkuJCR0eXBlb2Ype2Nhc2UgUXU6cmV0dXJuIF89QmMoeS50eXBlLHkua2V5LHkucHJvcHMsbnVsbCx2Lm1vZGUsXyksXy5yZWY9WHModixudWxsLHkpLF8ucmV0dXJuPXYsXztjYXNlIFJsOnJldHVybiB5PVJoKHksdi5tb2RlLF8pLHkucmV0dXJuPXYseTtjYXNlIElpOnZhciBTPXkuX2luaXQ7cmV0dXJuIGQodixTKHkuX3BheWxvYWQpLF8pfWlmKGRhKHkpfHxIcyh5KSlyZXR1cm4geT1qbyh5LHYubW9kZSxfLG51bGwpLHkucmV0dXJuPXYseTt1Yyh2LHkpfXJldHVybiBudWxsfWZ1bmN0aW9uIGYodix5LF8sUyl7dmFyIEU9eSE9PW51bGw/eS5rZXk6bnVsbDtpZih0eXBlb2YgXz09InN0cmluZyImJl8hPT0iInx8dHlwZW9mIF89PSJudW1iZXIiKXJldHVybiBFIT09bnVsbD9udWxsOnModix5LCIiK18sUyk7aWYodHlwZW9mIF89PSJvYmplY3QiJiZfIT09bnVsbCl7c3dpdGNoKF8uJCR0eXBlb2Ype2Nhc2UgUXU6cmV0dXJuIF8ua2V5PT09RT9hKHYseSxfLFMpOm51bGw7Y2FzZSBSbDpyZXR1cm4gXy5rZXk9PT1FP3Uodix5LF8sUyk6bnVsbDtjYXNlIElpOnJldHVybiBFPV8uX2luaXQsZih2LHksRShfLl9wYXlsb2FkKSxTKX1pZihkYShfKXx8SHMoXykpcmV0dXJuIEUhPT1udWxsP251bGw6Yyh2LHksXyxTLG51bGwpO3VjKHYsXyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaCh2LHksXyxTLEUpe2lmKHR5cGVvZiBTPT0ic3RyaW5nIiYmUyE9PSIifHx0eXBlb2YgUz09Im51bWJlciIpcmV0dXJuIHY9di5nZXQoXyl8fG51bGwscyh5LHYsIiIrUyxFKTtpZih0eXBlb2YgUz09Im9iamVjdCImJlMhPT1udWxsKXtzd2l0Y2goUy4kJHR5cGVvZil7Y2FzZSBRdTpyZXR1cm4gdj12LmdldChTLmtleT09PW51bGw/XzpTLmtleSl8fG51bGwsYSh5LHYsUyxFKTtjYXNlIFJsOnJldHVybiB2PXYuZ2V0KFMua2V5PT09bnVsbD9fOlMua2V5KXx8bnVsbCx1KHksdixTLEUpO2Nhc2UgSWk6dmFyICQ9Uy5faW5pdDtyZXR1cm4gaCh2LHksXywkKFMuX3BheWxvYWQpLEUpfWlmKGRhKFMpfHxIcyhTKSlyZXR1cm4gdj12LmdldChfKXx8bnVsbCxjKHksdixTLEUsbnVsbCk7dWMoeSxTKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBnKHYseSxfLFMpe2Zvcih2YXIgRT1udWxsLCQ9bnVsbCxDPXksTj15PTAsQT1udWxsO0MhPT1udWxsJiZOPF8ubGVuZ3RoO04rKyl7Qy5pbmRleD5OPyhBPUMsQz1udWxsKTpBPUMuc2libGluZzt2YXIgaz1mKHYsQyxfW05dLFMpO2lmKGs9PT1udWxsKXtDPT09bnVsbCYmKEM9QSk7YnJlYWt9dCYmQyYmay5hbHRlcm5hdGU9PT1udWxsJiZlKHYsQykseT1vKGsseSxOKSwkPT09bnVsbD9FPWs6JC5zaWJsaW5nPWssJD1rLEM9QX1pZihOPT09Xy5sZW5ndGgpcmV0dXJuIG4odixDKSxvdCYmVG8odixOKSxFO2lmKEM9PT1udWxsKXtmb3IoO048Xy5sZW5ndGg7TisrKUM9ZCh2LF9bTl0sUyksQyE9PW51bGwmJih5PW8oQyx5LE4pLCQ9PT1udWxsP0U9QzokLnNpYmxpbmc9QywkPUMpO3JldHVybiBvdCYmVG8odixOKSxFfWZvcihDPXIodixDKTtOPF8ubGVuZ3RoO04rKylBPWgoQyx2LE4sX1tOXSxTKSxBIT09bnVsbCYmKHQmJkEuYWx0ZXJuYXRlIT09bnVsbCYmQy5kZWxldGUoQS5rZXk9PT1udWxsP046QS5rZXkpLHk9byhBLHksTiksJD09PW51bGw/RT1BOiQuc2libGluZz1BLCQ9QSk7cmV0dXJuIHQmJkMuZm9yRWFjaChmdW5jdGlvbihNKXtyZXR1cm4gZSh2LE0pfSksb3QmJlRvKHYsTiksRX1mdW5jdGlvbiBtKHYseSxfLFMpe3ZhciBFPUhzKF8pO2lmKHR5cGVvZiBFIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFUoMTUwKSk7aWYoXz1FLmNhbGwoXyksXz09bnVsbCl0aHJvdyBFcnJvcihVKDE1MSkpO2Zvcih2YXIgJD1FPW51bGwsQz15LE49eT0wLEE9bnVsbCxrPV8ubmV4dCgpO0MhPT1udWxsJiYhay5kb25lO04rKyxrPV8ubmV4dCgpKXtDLmluZGV4Pk4/KEE9QyxDPW51bGwpOkE9Qy5zaWJsaW5nO3ZhciBNPWYodixDLGsudmFsdWUsUyk7aWYoTT09PW51bGwpe0M9PT1udWxsJiYoQz1BKTticmVha310JiZDJiZNLmFsdGVybmF0ZT09PW51bGwmJmUodixDKSx5PW8oTSx5LE4pLCQ9PT1udWxsP0U9TTokLnNpYmxpbmc9TSwkPU0sQz1BfWlmKGsuZG9uZSlyZXR1cm4gbih2LEMpLG90JiZUbyh2LE4pLEU7aWYoQz09PW51bGwpe2Zvcig7IWsuZG9uZTtOKyssaz1fLm5leHQoKSlrPWQodixrLnZhbHVlLFMpLGshPT1udWxsJiYoeT1vKGsseSxOKSwkPT09bnVsbD9FPWs6JC5zaWJsaW5nPWssJD1rKTtyZXR1cm4gb3QmJlRvKHYsTiksRX1mb3IoQz1yKHYsQyk7IWsuZG9uZTtOKyssaz1fLm5leHQoKSlrPWgoQyx2LE4say52YWx1ZSxTKSxrIT09bnVsbCYmKHQmJmsuYWx0ZXJuYXRlIT09bnVsbCYmQy5kZWxldGUoay5rZXk9PT1udWxsP046ay5rZXkpLHk9byhrLHksTiksJD09PW51bGw/RT1rOiQuc2libGluZz1rLCQ9ayk7cmV0dXJuIHQmJkMuZm9yRWFjaChmdW5jdGlvbihEKXtyZXR1cm4gZSh2LEQpfSksb3QmJlRvKHYsTiksRX1mdW5jdGlvbiB3KHYseSxfLFMpe2lmKHR5cGVvZiBfPT0ib2JqZWN0IiYmXyE9PW51bGwmJl8udHlwZT09PU9sJiZfLmtleT09PW51bGwmJihfPV8ucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiBfPT0ib2JqZWN0IiYmXyE9PW51bGwpe3N3aXRjaChfLiQkdHlwZW9mKXtjYXNlIFF1OmU6e2Zvcih2YXIgRT1fLmtleSwkPXk7JCE9PW51bGw7KXtpZigkLmtleT09PUUpe2lmKEU9Xy50eXBlLEU9PT1PbCl7aWYoJC50YWc9PT03KXtuKHYsJC5zaWJsaW5nKSx5PWkoJCxfLnByb3BzLmNoaWxkcmVuKSx5LnJldHVybj12LHY9eTticmVhayBlfX1lbHNlIGlmKCQuZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09SWkmJnF5KEUpPT09JC50eXBlKXtuKHYsJC5zaWJsaW5nKSx5PWkoJCxfLnByb3BzKSx5LnJlZj1Ycyh2LCQsXykseS5yZXR1cm49dix2PXk7YnJlYWsgZX1uKHYsJCk7YnJlYWt9ZWxzZSBlKHYsJCk7JD0kLnNpYmxpbmd9Xy50eXBlPT09T2w/KHk9am8oXy5wcm9wcy5jaGlsZHJlbix2Lm1vZGUsUyxfLmtleSkseS5yZXR1cm49dix2PXkpOihTPUJjKF8udHlwZSxfLmtleSxfLnByb3BzLG51bGwsdi5tb2RlLFMpLFMucmVmPVhzKHYseSxfKSxTLnJldHVybj12LHY9Uyl9cmV0dXJuIGwodik7Y2FzZSBSbDplOntmb3IoJD1fLmtleTt5IT09bnVsbDspe2lmKHkua2V5PT09JClpZih5LnRhZz09PTQmJnkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1fLmNvbnRhaW5lckluZm8mJnkuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09Xy5pbXBsZW1lbnRhdGlvbil7bih2LHkuc2libGluZykseT1pKHksXy5jaGlsZHJlbnx8W10pLHkucmV0dXJuPXYsdj15O2JyZWFrIGV9ZWxzZXtuKHYseSk7YnJlYWt9ZWxzZSBlKHYseSk7eT15LnNpYmxpbmd9eT1SaChfLHYubW9kZSxTKSx5LnJldHVybj12LHY9eX1yZXR1cm4gbCh2KTtjYXNlIElpOnJldHVybiAkPV8uX2luaXQsdyh2LHksJChfLl9wYXlsb2FkKSxTKX1pZihkYShfKSlyZXR1cm4gZyh2LHksXyxTKTtpZihIcyhfKSlyZXR1cm4gbSh2LHksXyxTKTt1Yyh2LF8pfXJldHVybiB0eXBlb2YgXz09InN0cmluZyImJl8hPT0iInx8dHlwZW9mIF89PSJudW1iZXIiPyhfPSIiK18seSE9PW51bGwmJnkudGFnPT09Nj8obih2LHkuc2libGluZykseT1pKHksXykseS5yZXR1cm49dix2PXkpOihuKHYseSkseT1OaChfLHYubW9kZSxTKSx5LnJldHVybj12LHY9eSksbCh2KSk6bih2LHkpfXJldHVybiB3fXZhciBhcz1IMSghMCksSzE9SDEoITEpLER1PXt9LEJyPV9vKER1KSxKYT1fbyhEdSksUWE9X28oRHUpO2Z1bmN0aW9uIE1vKHQpe2lmKHQ9PT1EdSl0aHJvdyBFcnJvcihVKDE3NCkpO3JldHVybiB0fWZ1bmN0aW9uIGJnKHQsZSl7c3dpdGNoKFhlKFFhLGUpLFhlKEphLHQpLFhlKEJyLER1KSx0PWUubm9kZVR5cGUsdCl7Y2FzZSA5OmNhc2UgMTE6ZT0oZT1lLmRvY3VtZW50RWxlbWVudCk/ZS5uYW1lc3BhY2VVUkk6dXAobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDp0PXQ9PT04P2UucGFyZW50Tm9kZTplLGU9dC5uYW1lc3BhY2VVUkl8fG51bGwsdD10LnRhZ05hbWUsZT11cChlLHQpfWl0KEJyKSxYZShCcixlKX1mdW5jdGlvbiB1cygpe2l0KEJyKSxpdChKYSksaXQoUWEpfWZ1bmN0aW9uIFoxKHQpe01vKFFhLmN1cnJlbnQpO3ZhciBlPU1vKEJyLmN1cnJlbnQpLG49dXAoZSx0LnR5cGUpO2UhPT1uJiYoWGUoSmEsdCksWGUoQnIsbikpfWZ1bmN0aW9uICRnKHQpe0phLmN1cnJlbnQ9PT10JiYoaXQoQnIpLGl0KEphKSl9dmFyIGR0PV9vKDApO2Z1bmN0aW9uIGhkKHQpe2Zvcih2YXIgZT10O2UhPT1udWxsOyl7aWYoZS50YWc9PT0xMyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiBlfWVsc2UgaWYoZS50YWc9PT0xOSYmZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZihlLmZsYWdzJjEyOClyZXR1cm4gZX1lbHNlIGlmKGUuY2hpbGQhPT1udWxsKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhaztmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClyZXR1cm4gbnVsbDtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIEVoPVtdO2Z1bmN0aW9uIFRnKCl7Zm9yKHZhciB0PTA7dDxFaC5sZW5ndGg7dCsrKUVoW3RdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7RWgubGVuZ3RoPTB9dmFyIERjPV9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsQ2g9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsWm89MCxodD1udWxsLFJ0PW51bGwsRHQ9bnVsbCxwZD0hMSxFYT0hMSxxYT0wLGFUPTA7ZnVuY3Rpb24gWXQoKXt0aHJvdyBFcnJvcihVKDMyMSkpfWZ1bmN0aW9uIE5nKHQsZSl7aWYoZT09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aCYmbjx0Lmxlbmd0aDtuKyspaWYoIWJyKHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gUmcodCxlLG4scixpLG8pe2lmKFpvPW8saHQ9ZSxlLm1lbW9pemVkU3RhdGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGwsZS5sYW5lcz0wLERjLmN1cnJlbnQ9dD09PW51bGx8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGw/ZlQ6aFQsdD1uKHIsaSksRWEpe289MDtkb3tpZihFYT0hMSxxYT0wLDI1PD1vKXRocm93IEVycm9yKFUoMzAxKSk7bys9MSxEdD1SdD1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxEYy5jdXJyZW50PXBULHQ9bihyLGkpfXdoaWxlKEVhKX1pZihEYy5jdXJyZW50PW1kLGU9UnQhPT1udWxsJiZSdC5uZXh0IT09bnVsbCxabz0wLER0PVJ0PWh0PW51bGwscGQ9ITEsZSl0aHJvdyBFcnJvcihVKDMwMCkpO3JldHVybiB0fWZ1bmN0aW9uIE9nKCl7dmFyIHQ9cWEhPT0wO3JldHVybiBxYT0wLHR9ZnVuY3Rpb24gQXIoKXt2YXIgdD17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gRHQ9PT1udWxsP2h0Lm1lbW9pemVkU3RhdGU9RHQ9dDpEdD1EdC5uZXh0PXQsRHR9ZnVuY3Rpb24gc3IoKXtpZihSdD09PW51bGwpe3ZhciB0PWh0LmFsdGVybmF0ZTt0PXQhPT1udWxsP3QubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgdD1SdC5uZXh0O3ZhciBlPUR0PT09bnVsbD9odC5tZW1vaXplZFN0YXRlOkR0Lm5leHQ7aWYoZSE9PW51bGwpRHQ9ZSxSdD10O2Vsc2V7aWYodD09PW51bGwpdGhyb3cgRXJyb3IoVSgzMTApKTtSdD10LHQ9e21lbW9pemVkU3RhdGU6UnQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6UnQuYmFzZVN0YXRlLGJhc2VRdWV1ZTpSdC5iYXNlUXVldWUscXVldWU6UnQucXVldWUsbmV4dDpudWxsfSxEdD09PW51bGw/aHQubWVtb2l6ZWRTdGF0ZT1EdD10OkR0PUR0Lm5leHQ9dH1yZXR1cm4gRHR9ZnVuY3Rpb24gZXUodCxlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIGtoKHQpe3ZhciBlPXNyKCksbj1lLnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPXQ7dmFyIHI9UnQsaT1yLmJhc2VRdWV1ZSxvPW4ucGVuZGluZztpZihvIT09bnVsbCl7aWYoaSE9PW51bGwpe3ZhciBsPWkubmV4dDtpLm5leHQ9by5uZXh0LG8ubmV4dD1sfXIuYmFzZVF1ZXVlPWk9byxuLnBlbmRpbmc9bnVsbH1pZihpIT09bnVsbCl7bz1pLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1sPW51bGwsYT1udWxsLHU9bztkb3t2YXIgYz11LmxhbmU7aWYoKFpvJmMpPT09YylhIT09bnVsbCYmKGE9YS5uZXh0PXtsYW5lOjAsYWN0aW9uOnUuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6dS5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6dS5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9dS5oYXNFYWdlclN0YXRlP3UuZWFnZXJTdGF0ZTp0KHIsdS5hY3Rpb24pO2Vsc2V7dmFyIGQ9e2xhbmU6YyxhY3Rpb246dS5hY3Rpb24saGFzRWFnZXJTdGF0ZTp1Lmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTp1LmVhZ2VyU3RhdGUsbmV4dDpudWxsfTthPT09bnVsbD8ocz1hPWQsbD1yKTphPWEubmV4dD1kLGh0LmxhbmVzfD1jLEdvfD1jfXU9dS5uZXh0fXdoaWxlKHUhPT1udWxsJiZ1IT09byk7YT09PW51bGw/bD1yOmEubmV4dD1zLGJyKHIsZS5tZW1vaXplZFN0YXRlKXx8KGJuPSEwKSxlLm1lbW9pemVkU3RhdGU9cixlLmJhc2VTdGF0ZT1sLGUuYmFzZVF1ZXVlPWEsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKHQ9bi5pbnRlcmxlYXZlZCx0IT09bnVsbCl7aT10O2RvIG89aS5sYW5lLGh0LmxhbmVzfD1vLEdvfD1vLGk9aS5uZXh0O3doaWxlKGkhPT10KX1lbHNlIGk9PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bZS5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIGJoKHQpe3ZhciBlPXNyKCksbj1lLnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFUoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPXQ7dmFyIHI9bi5kaXNwYXRjaCxpPW4ucGVuZGluZyxvPWUubWVtb2l6ZWRTdGF0ZTtpZihpIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGw9aT1pLm5leHQ7ZG8gbz10KG8sbC5hY3Rpb24pLGw9bC5uZXh0O3doaWxlKGwhPT1pKTticihvLGUubWVtb2l6ZWRTdGF0ZSl8fChibj0hMCksZS5tZW1vaXplZFN0YXRlPW8sZS5iYXNlUXVldWU9PT1udWxsJiYoZS5iYXNlU3RhdGU9byksbi5sYXN0UmVuZGVyZWRTdGF0ZT1vfXJldHVybltvLHJdfWZ1bmN0aW9uIEcxKCl7fWZ1bmN0aW9uIFkxKHQsZSl7dmFyIG49aHQscj1zcigpLGk9ZSgpLG89IWJyKHIubWVtb2l6ZWRTdGF0ZSxpKTtpZihvJiYoci5tZW1vaXplZFN0YXRlPWksYm49ITApLHI9ci5xdWV1ZSxQZyhRMS5iaW5kKG51bGwsbixyLHQpLFt0XSksci5nZXRTbmFwc2hvdCE9PWV8fG98fER0IT09bnVsbCYmRHQubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCx0dSg5LEoxLmJpbmQobnVsbCxuLHIsaSxlKSx2b2lkIDAsbnVsbCksQnQ9PT1udWxsKXRocm93IEVycm9yKFUoMzQ5KSk7Wm8mMzB8fFgxKG4sZSxpKX1yZXR1cm4gaX1mdW5jdGlvbiBYMSh0LGUsbil7dC5mbGFnc3w9MTYzODQsdD17Z2V0U25hcHNob3Q6ZSx2YWx1ZTpufSxlPWh0LnVwZGF0ZVF1ZXVlLGU9PT1udWxsPyhlPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LGh0LnVwZGF0ZVF1ZXVlPWUsZS5zdG9yZXM9W3RdKToobj1lLnN0b3JlcyxuPT09bnVsbD9lLnN0b3Jlcz1bdF06bi5wdXNoKHQpKX1mdW5jdGlvbiBKMSh0LGUsbixyKXtlLnZhbHVlPW4sZS5nZXRTbmFwc2hvdD1yLHExKGUpJiZldyh0KX1mdW5jdGlvbiBRMSh0LGUsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtxMShlKSYmZXcodCl9KX1mdW5jdGlvbiBxMSh0KXt2YXIgZT10LmdldFNuYXBzaG90O3Q9dC52YWx1ZTt0cnl7dmFyIG49ZSgpO3JldHVybiFicih0LG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBldyh0KXt2YXIgZT1waSh0LDEpO2UhPT1udWxsJiZFcihlLHQsMSwtMSl9ZnVuY3Rpb24gZTAodCl7dmFyIGU9QXIoKTtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiImJih0PXQoKSksZS5tZW1vaXplZFN0YXRlPWUuYmFzZVN0YXRlPXQsdD17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZXUsbGFzdFJlbmRlcmVkU3RhdGU6dH0sZS5xdWV1ZT10LHQ9dC5kaXNwYXRjaD1kVC5iaW5kKG51bGwsaHQsdCksW2UubWVtb2l6ZWRTdGF0ZSx0XX1mdW5jdGlvbiB0dSh0LGUsbixyKXtyZXR1cm4gdD17dGFnOnQsY3JlYXRlOmUsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LGU9aHQudXBkYXRlUXVldWUsZT09PW51bGw/KGU9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0saHQudXBkYXRlUXVldWU9ZSxlLmxhc3RFZmZlY3Q9dC5uZXh0PXQpOihuPWUubGFzdEVmZmVjdCxuPT09bnVsbD9lLmxhc3RFZmZlY3Q9dC5uZXh0PXQ6KHI9bi5uZXh0LG4ubmV4dD10LHQubmV4dD1yLGUubGFzdEVmZmVjdD10KSksdH1mdW5jdGlvbiB0dygpe3JldHVybiBzcigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gSWModCxlLG4scil7dmFyIGk9QXIoKTtodC5mbGFnc3w9dCxpLm1lbW9pemVkU3RhdGU9dHUoMXxlLG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiBoZih0LGUsbixyKXt2YXIgaT1zcigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIG89dm9pZCAwO2lmKFJ0IT09bnVsbCl7dmFyIGw9UnQubWVtb2l6ZWRTdGF0ZTtpZihvPWwuZGVzdHJveSxyIT09bnVsbCYmTmcocixsLmRlcHMpKXtpLm1lbW9pemVkU3RhdGU9dHUoZSxuLG8scik7cmV0dXJufX1odC5mbGFnc3w9dCxpLm1lbW9pemVkU3RhdGU9dHUoMXxlLG4sbyxyKX1mdW5jdGlvbiB0MCh0LGUpe3JldHVybiBJYyg4MzkwNjU2LDgsdCxlKX1mdW5jdGlvbiBQZyh0LGUpe3JldHVybiBoZigyMDQ4LDgsdCxlKX1mdW5jdGlvbiBudyh0LGUpe3JldHVybiBoZig0LDIsdCxlKX1mdW5jdGlvbiBydyh0LGUpe3JldHVybiBoZig0LDQsdCxlKX1mdW5jdGlvbiBpdyh0LGUpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiB0PXQoKSxlKHQpLGZ1bmN0aW9uKCl7ZShudWxsKX07aWYoZSE9bnVsbClyZXR1cm4gdD10KCksZS5jdXJyZW50PXQsZnVuY3Rpb24oKXtlLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gb3codCxlLG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW3RdKTpudWxsLGhmKDQsNCxpdy5iaW5kKG51bGwsZSx0KSxuKX1mdW5jdGlvbiBBZygpe31mdW5jdGlvbiBsdyh0LGUpe3ZhciBuPXNyKCk7ZT1lPT09dm9pZCAwP251bGw6ZTt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZlIT09bnVsbCYmTmcoZSxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W3QsZV0sdCl9ZnVuY3Rpb24gc3codCxlKXt2YXIgbj1zcigpO2U9ZT09PXZvaWQgMD9udWxsOmU7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmZSE9PW51bGwmJk5nKGUsclsxXSk/clswXToodD10KCksbi5tZW1vaXplZFN0YXRlPVt0LGVdLHQpfWZ1bmN0aW9uIGF3KHQsZSxuKXtyZXR1cm4gWm8mMjE/KGJyKG4sZSl8fChuPWQxKCksaHQubGFuZXN8PW4sR298PW4sdC5iYXNlU3RhdGU9ITApLGUpOih0LmJhc2VTdGF0ZSYmKHQuYmFzZVN0YXRlPSExLGJuPSEwKSx0Lm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gdVQodCxlKXt2YXIgbj1VZTtVZT1uIT09MCYmND5uP246NCx0KCEwKTt2YXIgcj1DaC50cmFuc2l0aW9uO0NoLnRyYW5zaXRpb249e307dHJ5e3QoITEpLGUoKX1maW5hbGx5e1VlPW4sQ2gudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiB1dygpe3JldHVybiBzcigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gY1QodCxlLG4pe3ZhciByPWVvKHQpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LGN3KHQpKWR3KGUsbik7ZWxzZSBpZihuPUIxKHQsZSxuLHIpLG4hPT1udWxsKXt2YXIgaT12bigpO0VyKG4sdCxyLGkpLGZ3KG4sZSxyKX19ZnVuY3Rpb24gZFQodCxlLG4pe3ZhciByPWVvKHQpLGk9e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKGN3KHQpKWR3KGUsaSk7ZWxzZXt2YXIgbz10LmFsdGVybmF0ZTtpZih0LmxhbmVzPT09MCYmKG89PT1udWxsfHxvLmxhbmVzPT09MCkmJihvPWUubGFzdFJlbmRlcmVkUmVkdWNlcixvIT09bnVsbCkpdHJ5e3ZhciBsPWUubGFzdFJlbmRlcmVkU3RhdGUscz1vKGwsbik7aWYoaS5oYXNFYWdlclN0YXRlPSEwLGkuZWFnZXJTdGF0ZT1zLGJyKHMsbCkpe3ZhciBhPWUuaW50ZXJsZWF2ZWQ7YT09PW51bGw/KGkubmV4dD1pLENnKGUpKTooaS5uZXh0PWEubmV4dCxhLm5leHQ9aSksZS5pbnRlcmxlYXZlZD1pO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49QjEodCxlLGksciksbiE9PW51bGwmJihpPXZuKCksRXIobix0LHIsaSksZncobixlLHIpKX19ZnVuY3Rpb24gY3codCl7dmFyIGU9dC5hbHRlcm5hdGU7cmV0dXJuIHQ9PT1odHx8ZSE9PW51bGwmJmU9PT1odH1mdW5jdGlvbiBkdyh0LGUpe0VhPXBkPSEwO3ZhciBuPXQucGVuZGluZztuPT09bnVsbD9lLm5leHQ9ZTooZS5uZXh0PW4ubmV4dCxuLm5leHQ9ZSksdC5wZW5kaW5nPWV9ZnVuY3Rpb24gZncodCxlLG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9ZS5sYW5lcztyJj10LnBlbmRpbmdMYW5lcyxufD1yLGUubGFuZXM9bixjZyh0LG4pfX12YXIgbWQ9e3JlYWRDb250ZXh0OmxyLHVzZUNhbGxiYWNrOll0LHVzZUNvbnRleHQ6WXQsdXNlRWZmZWN0Oll0LHVzZUltcGVyYXRpdmVIYW5kbGU6WXQsdXNlSW5zZXJ0aW9uRWZmZWN0Oll0LHVzZUxheW91dEVmZmVjdDpZdCx1c2VNZW1vOll0LHVzZVJlZHVjZXI6WXQsdXNlUmVmOll0LHVzZVN0YXRlOll0LHVzZURlYnVnVmFsdWU6WXQsdXNlRGVmZXJyZWRWYWx1ZTpZdCx1c2VUcmFuc2l0aW9uOll0LHVzZU11dGFibGVTb3VyY2U6WXQsdXNlU3luY0V4dGVybmFsU3RvcmU6WXQsdXNlSWQ6WXQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSxmVD17cmVhZENvbnRleHQ6bHIsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXIoKS5tZW1vaXplZFN0YXRlPVt0LGU9PT12b2lkIDA/bnVsbDplXSx0fSx1c2VDb250ZXh0OmxyLHVzZUVmZmVjdDp0MCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFt0XSk6bnVsbCxJYyg0MTk0MzA4LDQsaXcuYmluZChudWxsLGUsdCksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBJYyg0MTk0MzA4LDQsdCxlKX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEljKDQsMix0LGUpfSx1c2VNZW1vOmZ1bmN0aW9uKHQsZSl7dmFyIG49QXIoKTtyZXR1cm4gZT1lPT09dm9pZCAwP251bGw6ZSx0PXQoKSxuLm1lbW9pemVkU3RhdGU9W3QsZV0sdH0sdXNlUmVkdWNlcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9QXIoKTtyZXR1cm4gZT1uIT09dm9pZCAwP24oZSk6ZSxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9ZSx0PXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjp0LGxhc3RSZW5kZXJlZFN0YXRlOmV9LHIucXVldWU9dCx0PXQuZGlzcGF0Y2g9Y1QuYmluZChudWxsLGh0LHQpLFtyLm1lbW9pemVkU3RhdGUsdF19LHVzZVJlZjpmdW5jdGlvbih0KXt2YXIgZT1BcigpO3JldHVybiB0PXtjdXJyZW50OnR9LGUubWVtb2l6ZWRTdGF0ZT10fSx1c2VTdGF0ZTplMCx1c2VEZWJ1Z1ZhbHVlOkFnLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEFyKCkubWVtb2l6ZWRTdGF0ZT10fSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9ZTAoITEpLGU9dFswXTtyZXR1cm4gdD11VC5iaW5kKG51bGwsdFsxXSksQXIoKS5tZW1vaXplZFN0YXRlPXQsW2UsdF19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1odCxpPUFyKCk7aWYob3Qpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoVSg0MDcpKTtuPW4oKX1lbHNle2lmKG49ZSgpLEJ0PT09bnVsbCl0aHJvdyBFcnJvcihVKDM0OSkpO1pvJjMwfHxYMShyLGUsbil9aS5tZW1vaXplZFN0YXRlPW47dmFyIG89e3ZhbHVlOm4sZ2V0U25hcHNob3Q6ZX07cmV0dXJuIGkucXVldWU9byx0MChRMS5iaW5kKG51bGwscixvLHQpLFt0XSksci5mbGFnc3w9MjA0OCx0dSg5LEoxLmJpbmQobnVsbCxyLG8sbixlKSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgdD1BcigpLGU9QnQuaWRlbnRpZmllclByZWZpeDtpZihvdCl7dmFyIG49dWkscj1haTtuPShyJn4oMTw8MzItU3IociktMSkpLnRvU3RyaW5nKDMyKStuLGU9IjoiK2UrIlIiK24sbj1xYSsrLDA8biYmKGUrPSJIIituLnRvU3RyaW5nKDMyKSksZSs9IjoifWVsc2Ugbj1hVCsrLGU9IjoiK2UrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gdC5tZW1vaXplZFN0YXRlPWV9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0saFQ9e3JlYWRDb250ZXh0OmxyLHVzZUNhbGxiYWNrOmx3LHVzZUNvbnRleHQ6bHIsdXNlRWZmZWN0OlBnLHVzZUltcGVyYXRpdmVIYW5kbGU6b3csdXNlSW5zZXJ0aW9uRWZmZWN0Om53LHVzZUxheW91dEVmZmVjdDpydyx1c2VNZW1vOnN3LHVzZVJlZHVjZXI6a2gsdXNlUmVmOnR3LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGtoKGV1KX0sdXNlRGVidWdWYWx1ZTpBZyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXNyKCk7cmV0dXJuIGF3KGUsUnQubWVtb2l6ZWRTdGF0ZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PWtoKGV1KVswXSxlPXNyKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdCxlXX0sdXNlTXV0YWJsZVNvdXJjZTpHMSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpZMSx1c2VJZDp1dyx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LHBUPXtyZWFkQ29udGV4dDpscix1c2VDYWxsYmFjazpsdyx1c2VDb250ZXh0OmxyLHVzZUVmZmVjdDpQZyx1c2VJbXBlcmF0aXZlSGFuZGxlOm93LHVzZUluc2VydGlvbkVmZmVjdDpudyx1c2VMYXlvdXRFZmZlY3Q6cncsdXNlTWVtbzpzdyx1c2VSZWR1Y2VyOmJoLHVzZVJlZjp0dyx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBiaChldSl9LHVzZURlYnVnVmFsdWU6QWcsdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1zcigpO3JldHVybiBSdD09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXQ6YXcoZSxSdC5tZW1vaXplZFN0YXRlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9YmgoZXUpWzBdLGU9c3IoKS5tZW1vaXplZFN0YXRlO3JldHVyblt0LGVdfSx1c2VNdXRhYmxlU291cmNlOkcxLHVzZVN5bmNFeHRlcm5hbFN0b3JlOlkxLHVzZUlkOnV3LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gY3ModCxlKXt0cnl7dmFyIG49IiIscj1lO2RvIG4rPVViKHIpLHI9ci5yZXR1cm47d2hpbGUocik7dmFyIGk9bn1jYXRjaChvKXtpPWAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtvLm1lc3NhZ2UrYApgK28uc3RhY2t9cmV0dXJue3ZhbHVlOnQsc291cmNlOmUsc3RhY2s6aSxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gJGgodCxlLG4pe3JldHVybnt2YWx1ZTp0LHNvdXJjZTpudWxsLHN0YWNrOm4/P251bGwsZGlnZXN0OmU/P251bGx9fWZ1bmN0aW9uIFBwKHQsZSl7dHJ5e2NvbnNvbGUuZXJyb3IoZS52YWx1ZSl9Y2F0Y2gobil7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX19dmFyIG1UPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIGh3KHQsZSxuKXtuPWNpKC0xLG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPWUudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXt2ZHx8KHZkPSEwLFVwPXIpLFBwKHQsZSl9LG59ZnVuY3Rpb24gcHcodCxlLG4pe249Y2koLTEsbiksbi50YWc9Mzt2YXIgcj10LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgaT1lLnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKGkpfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7UHAodCxlKX19dmFyIG89dC5zdGF0ZU5vZGU7cmV0dXJuIG8hPT1udWxsJiZ0eXBlb2Ygby5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtQcCh0LGUpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiYocWk9PT1udWxsP3FpPW5ldyBTZXQoW3RoaXNdKTpxaS5hZGQodGhpcykpO3ZhciBsPWUuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChlLnZhbHVlLHtjb21wb25lbnRTdGFjazpsIT09bnVsbD9sOiIifSl9KSxufWZ1bmN0aW9uIG4wKHQsZSxuKXt2YXIgcj10LnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj10LnBpbmdDYWNoZT1uZXcgbVQ7dmFyIGk9bmV3IFNldDtyLnNldChlLGkpfWVsc2UgaT1yLmdldChlKSxpPT09dm9pZCAwJiYoaT1uZXcgU2V0LHIuc2V0KGUsaSkpO2kuaGFzKG4pfHwoaS5hZGQobiksdD1OVC5iaW5kKG51bGwsdCxlLG4pLGUudGhlbih0LHQpKX1mdW5jdGlvbiByMCh0KXtkb3t2YXIgZTtpZigoZT10LnRhZz09PTEzKSYmKGU9dC5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkIT09bnVsbDohMCksZSlyZXR1cm4gdDt0PXQucmV0dXJufXdoaWxlKHQhPT1udWxsKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBpMCh0LGUsbixyLGkpe3JldHVybiB0Lm1vZGUmMT8odC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1pLHQpOih0PT09ZT90LmZsYWdzfD02NTUzNjoodC5mbGFnc3w9MTI4LG4uZmxhZ3N8PTEzMTA3MixuLmZsYWdzJj0tNTI4MDUsbi50YWc9PT0xJiYobi5hbHRlcm5hdGU9PT1udWxsP24udGFnPTE3OihlPWNpKC0xLDEpLGUudGFnPTIsUWkobixlLDEpKSksbi5sYW5lc3w9MSksdCl9dmFyIGdUPV9pLlJlYWN0Q3VycmVudE93bmVyLGJuPSExO2Z1bmN0aW9uIHVuKHQsZSxuLHIpe2UuY2hpbGQ9dD09PW51bGw/SzEoZSxudWxsLG4scik6YXMoZSx0LmNoaWxkLG4scil9ZnVuY3Rpb24gbzAodCxlLG4scixpKXtuPW4ucmVuZGVyO3ZhciBvPWUucmVmO3JldHVybiBKbChlLGkpLHI9UmcodCxlLG4scixvLGkpLG49T2coKSx0IT09bnVsbCYmIWJuPyhlLnVwZGF0ZVF1ZXVlPXQudXBkYXRlUXVldWUsZS5mbGFncyY9LTIwNTMsdC5sYW5lcyY9fmksbWkodCxlLGkpKToob3QmJm4mJnlnKGUpLGUuZmxhZ3N8PTEsdW4odCxlLHIsaSksZS5jaGlsZCl9ZnVuY3Rpb24gbDAodCxlLG4scixpKXtpZih0PT09bnVsbCl7dmFyIG89bi50eXBlO3JldHVybiB0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmIUJnKG8pJiZvLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KGUudGFnPTE1LGUudHlwZT1vLG13KHQsZSxvLHIsaSkpOih0PUJjKG4udHlwZSxudWxsLHIsZSxlLm1vZGUsaSksdC5yZWY9ZS5yZWYsdC5yZXR1cm49ZSxlLmNoaWxkPXQpfWlmKG89dC5jaGlsZCwhKHQubGFuZXMmaSkpe3ZhciBsPW8ubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246WmEsbihsLHIpJiZ0LnJlZj09PWUucmVmKXJldHVybiBtaSh0LGUsaSl9cmV0dXJuIGUuZmxhZ3N8PTEsdD10byhvLHIpLHQucmVmPWUucmVmLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIG13KHQsZSxuLHIsaSl7aWYodCE9PW51bGwpe3ZhciBvPXQubWVtb2l6ZWRQcm9wcztpZihaYShvLHIpJiZ0LnJlZj09PWUucmVmKWlmKGJuPSExLGUucGVuZGluZ1Byb3BzPXI9bywodC5sYW5lcyZpKSE9PTApdC5mbGFncyYxMzEwNzImJihibj0hMCk7ZWxzZSByZXR1cm4gZS5sYW5lcz10LmxhbmVzLG1pKHQsZSxpKX1yZXR1cm4gQXAodCxlLG4scixpKX1mdW5jdGlvbiBndyh0LGUsbil7dmFyIHI9ZS5wZW5kaW5nUHJvcHMsaT1yLmNoaWxkcmVuLG89dCE9PW51bGw/dC5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoIShlLm1vZGUmMSkpZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxYZShCbCxEbiksRG58PW47ZWxzZXtpZighKG4mMTA3Mzc0MTgyNCkpcmV0dXJuIHQ9byE9PW51bGw/by5iYXNlTGFuZXN8bjpuLGUubGFuZXM9ZS5jaGlsZExhbmVzPTEwNzM3NDE4MjQsZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6dCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxlLnVwZGF0ZVF1ZXVlPW51bGwsWGUoQmwsRG4pLERufD10LG51bGw7ZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxyPW8hPT1udWxsP28uYmFzZUxhbmVzOm4sWGUoQmwsRG4pLERufD1yfWVsc2UgbyE9PW51bGw/KHI9by5iYXNlTGFuZXN8bixlLm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLFhlKEJsLERuKSxEbnw9cjtyZXR1cm4gdW4odCxlLGksbiksZS5jaGlsZH1mdW5jdGlvbiB2dyh0LGUpe3ZhciBuPWUucmVmOyh0PT09bnVsbCYmbiE9PW51bGx8fHQhPT1udWxsJiZ0LnJlZiE9PW4pJiYoZS5mbGFnc3w9NTEyLGUuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIEFwKHQsZSxuLHIsaSl7dmFyIG89VG4obik/SG86cm4uY3VycmVudDtyZXR1cm4gbz1scyhlLG8pLEpsKGUsaSksbj1SZyh0LGUsbixyLG8saSkscj1PZygpLHQhPT1udWxsJiYhYm4/KGUudXBkYXRlUXVldWU9dC51cGRhdGVRdWV1ZSxlLmZsYWdzJj0tMjA1Myx0LmxhbmVzJj1+aSxtaSh0LGUsaSkpOihvdCYmciYmeWcoZSksZS5mbGFnc3w9MSx1bih0LGUsbixpKSxlLmNoaWxkKX1mdW5jdGlvbiBzMCh0LGUsbixyLGkpe2lmKFRuKG4pKXt2YXIgbz0hMDtzZChlKX1lbHNlIG89ITE7aWYoSmwoZSxpKSxlLnN0YXRlTm9kZT09PW51bGwpamModCxlKSxWMShlLG4sciksT3AoZSxuLHIsaSkscj0hMDtlbHNlIGlmKHQ9PT1udWxsKXt2YXIgbD1lLnN0YXRlTm9kZSxzPWUubWVtb2l6ZWRQcm9wcztsLnByb3BzPXM7dmFyIGE9bC5jb250ZXh0LHU9bi5jb250ZXh0VHlwZTt0eXBlb2YgdT09Im9iamVjdCImJnUhPT1udWxsP3U9bHIodSk6KHU9VG4obik/SG86cm4uY3VycmVudCx1PWxzKGUsdSkpO3ZhciBjPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGQ9dHlwZW9mIGM9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iO2R8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PXJ8fGEhPT11KSYmUXkoZSxsLHIsdSksamk9ITE7dmFyIGY9ZS5tZW1vaXplZFN0YXRlO2wuc3RhdGU9ZixmZChlLHIsbCxpKSxhPWUubWVtb2l6ZWRTdGF0ZSxzIT09cnx8ZiE9PWF8fCRuLmN1cnJlbnR8fGppPyh0eXBlb2YgYz09ImZ1bmN0aW9uIiYmKFJwKGUsbixjLHIpLGE9ZS5tZW1vaXplZFN0YXRlKSwocz1qaXx8SnkoZSxuLHMscixmLGEsdSkpPyhkfHx0eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmwuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NDE5NDMwOCkpOih0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpLGUubWVtb2l6ZWRQcm9wcz1yLGUubWVtb2l6ZWRTdGF0ZT1hKSxsLnByb3BzPXIsbC5zdGF0ZT1hLGwuY29udGV4dD11LHI9cyk6KHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtsPWUuc3RhdGVOb2RlLFUxKHQsZSkscz1lLm1lbW9pemVkUHJvcHMsdT1lLnR5cGU9PT1lLmVsZW1lbnRUeXBlP3M6Z3IoZS50eXBlLHMpLGwucHJvcHM9dSxkPWUucGVuZGluZ1Byb3BzLGY9bC5jb250ZXh0LGE9bi5jb250ZXh0VHlwZSx0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP2E9bHIoYSk6KGE9VG4obik/SG86cm4uY3VycmVudCxhPWxzKGUsYSkpO3ZhciBoPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyhjPXR5cGVvZiBoPT0iZnVuY3Rpb24ifHx0eXBlb2YgbC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIil8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PWR8fGYhPT1hKSYmUXkoZSxsLHIsYSksamk9ITEsZj1lLm1lbW9pemVkU3RhdGUsbC5zdGF0ZT1mLGZkKGUscixsLGkpO3ZhciBnPWUubWVtb2l6ZWRTdGF0ZTtzIT09ZHx8ZiE9PWd8fCRuLmN1cnJlbnR8fGppPyh0eXBlb2YgaD09ImZ1bmN0aW9uIiYmKFJwKGUsbixoLHIpLGc9ZS5tZW1vaXplZFN0YXRlKSwodT1qaXx8SnkoZSxuLHUscixmLGcsYSl8fCExKT8oY3x8dHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLmNvbXBvbmVudFdpbGxVcGRhdGUocixnLGEpLHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIsZyxhKSksdHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJihlLmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBsLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PXQubWVtb2l6ZWRQcm9wcyYmZj09PXQubWVtb2l6ZWRTdGF0ZXx8KGUuZmxhZ3N8PTQpLHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09dC5tZW1vaXplZFByb3BzJiZmPT09dC5tZW1vaXplZFN0YXRlfHwoZS5mbGFnc3w9MTAyNCksZS5tZW1vaXplZFByb3BzPXIsZS5tZW1vaXplZFN0YXRlPWcpLGwucHJvcHM9cixsLnN0YXRlPWcsbC5jb250ZXh0PWEscj11KToodHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09dC5tZW1vaXplZFByb3BzJiZmPT09dC5tZW1vaXplZFN0YXRlfHwoZS5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT10Lm1lbW9pemVkUHJvcHMmJmY9PT10Lm1lbW9pemVkU3RhdGV8fChlLmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gTXAodCxlLG4scixvLGkpfWZ1bmN0aW9uIE1wKHQsZSxuLHIsaSxvKXt2dyh0LGUpO3ZhciBsPShlLmZsYWdzJjEyOCkhPT0wO2lmKCFyJiYhbClyZXR1cm4gaSYmS3koZSxuLCExKSxtaSh0LGUsbyk7cj1lLnN0YXRlTm9kZSxnVC5jdXJyZW50PWU7dmFyIHM9bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gZS5mbGFnc3w9MSx0IT09bnVsbCYmbD8oZS5jaGlsZD1hcyhlLHQuY2hpbGQsbnVsbCxvKSxlLmNoaWxkPWFzKGUsbnVsbCxzLG8pKTp1bih0LGUscyxvKSxlLm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxpJiZLeShlLG4sITApLGUuY2hpbGR9ZnVuY3Rpb24geXcodCl7dmFyIGU9dC5zdGF0ZU5vZGU7ZS5wZW5kaW5nQ29udGV4dD9IeSh0LGUucGVuZGluZ0NvbnRleHQsZS5wZW5kaW5nQ29udGV4dCE9PWUuY29udGV4dCk6ZS5jb250ZXh0JiZIeSh0LGUuY29udGV4dCwhMSksYmcodCxlLmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIGEwKHQsZSxuLHIsaSl7cmV0dXJuIHNzKCksX2coaSksZS5mbGFnc3w9MjU2LHVuKHQsZSxuLHIpLGUuY2hpbGR9dmFyIExwPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MH07ZnVuY3Rpb24gRHAodCl7cmV0dXJue2Jhc2VMYW5lczp0LGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9fWZ1bmN0aW9uIHh3KHQsZSxuKXt2YXIgcj1lLnBlbmRpbmdQcm9wcyxpPWR0LmN1cnJlbnQsbz0hMSxsPShlLmZsYWdzJjEyOCkhPT0wLHM7aWYoKHM9bCl8fChzPXQhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihpJjIpIT09MCkscz8obz0hMCxlLmZsYWdzJj0tMTI5KToodD09PW51bGx8fHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYoaXw9MSksWGUoZHQsaSYxKSx0PT09bnVsbClyZXR1cm4gVHAoZSksdD1lLm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJih0PXQuZGVoeWRyYXRlZCx0IT09bnVsbCk/KGUubW9kZSYxP3QuZGF0YT09PSIkISI/ZS5sYW5lcz04OmUubGFuZXM9MTA3Mzc0MTgyNDplLmxhbmVzPTEsbnVsbCk6KGw9ci5jaGlsZHJlbix0PXIuZmFsbGJhY2ssbz8ocj1lLm1vZGUsbz1lLmNoaWxkLGw9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46bH0sIShyJjEpJiZvIT09bnVsbD8oby5jaGlsZExhbmVzPTAsby5wZW5kaW5nUHJvcHM9bCk6bz1nZihsLHIsMCxudWxsKSx0PWpvKHQscixuLG51bGwpLG8ucmV0dXJuPWUsdC5yZXR1cm49ZSxvLnNpYmxpbmc9dCxlLmNoaWxkPW8sZS5jaGlsZC5tZW1vaXplZFN0YXRlPURwKG4pLGUubWVtb2l6ZWRTdGF0ZT1McCx0KTpNZyhlLGwpKTtpZihpPXQubWVtb2l6ZWRTdGF0ZSxpIT09bnVsbCYmKHM9aS5kZWh5ZHJhdGVkLHMhPT1udWxsKSlyZXR1cm4gdlQodCxlLGwscixzLGksbik7aWYobyl7bz1yLmZhbGxiYWNrLGw9ZS5tb2RlLGk9dC5jaGlsZCxzPWkuc2libGluZzt2YXIgYT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpyLmNoaWxkcmVufTtyZXR1cm4hKGwmMSkmJmUuY2hpbGQhPT1pPyhyPWUuY2hpbGQsci5jaGlsZExhbmVzPTAsci5wZW5kaW5nUHJvcHM9YSxlLmRlbGV0aW9ucz1udWxsKToocj10byhpLGEpLHIuc3VidHJlZUZsYWdzPWkuc3VidHJlZUZsYWdzJjE0NjgwMDY0KSxzIT09bnVsbD9vPXRvKHMsbyk6KG89am8obyxsLG4sbnVsbCksby5mbGFnc3w9Miksby5yZXR1cm49ZSxyLnJldHVybj1lLHIuc2libGluZz1vLGUuY2hpbGQ9cixyPW8sbz1lLmNoaWxkLGw9dC5jaGlsZC5tZW1vaXplZFN0YXRlLGw9bD09PW51bGw/RHAobik6e2Jhc2VMYW5lczpsLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LG8ubWVtb2l6ZWRTdGF0ZT1sLG8uY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMmfm4sZS5tZW1vaXplZFN0YXRlPUxwLHJ9cmV0dXJuIG89dC5jaGlsZCx0PW8uc2libGluZyxyPXRvKG8se21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59KSwhKGUubW9kZSYxKSYmKHIubGFuZXM9biksci5yZXR1cm49ZSxyLnNpYmxpbmc9bnVsbCx0IT09bnVsbCYmKG49ZS5kZWxldGlvbnMsbj09PW51bGw/KGUuZGVsZXRpb25zPVt0XSxlLmZsYWdzfD0xNik6bi5wdXNoKHQpKSxlLmNoaWxkPXIsZS5tZW1vaXplZFN0YXRlPW51bGwscn1mdW5jdGlvbiBNZyh0LGUpe3JldHVybiBlPWdmKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjplfSx0Lm1vZGUsMCxudWxsKSxlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiBjYyh0LGUsbixyKXtyZXR1cm4gciE9PW51bGwmJl9nKHIpLGFzKGUsdC5jaGlsZCxudWxsLG4pLHQ9TWcoZSxlLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksdC5mbGFnc3w9MixlLm1lbW9pemVkU3RhdGU9bnVsbCx0fWZ1bmN0aW9uIHZUKHQsZSxuLHIsaSxvLGwpe2lmKG4pcmV0dXJuIGUuZmxhZ3MmMjU2PyhlLmZsYWdzJj0tMjU3LHI9JGgoRXJyb3IoVSg0MjIpKSksY2ModCxlLGwscikpOmUubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KGUuY2hpbGQ9dC5jaGlsZCxlLmZsYWdzfD0xMjgsbnVsbCk6KG89ci5mYWxsYmFjayxpPWUubW9kZSxyPWdmKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSxpLDAsbnVsbCksbz1qbyhvLGksbCxudWxsKSxvLmZsYWdzfD0yLHIucmV0dXJuPWUsby5yZXR1cm49ZSxyLnNpYmxpbmc9byxlLmNoaWxkPXIsZS5tb2RlJjEmJmFzKGUsdC5jaGlsZCxudWxsLGwpLGUuY2hpbGQubWVtb2l6ZWRTdGF0ZT1EcChsKSxlLm1lbW9pemVkU3RhdGU9THAsbyk7aWYoIShlLm1vZGUmMSkpcmV0dXJuIGNjKHQsZSxsLG51bGwpO2lmKGkuZGF0YT09PSIkISIpe2lmKHI9aS5uZXh0U2libGluZyYmaS5uZXh0U2libGluZy5kYXRhc2V0LHIpdmFyIHM9ci5kZ3N0O3JldHVybiByPXMsbz1FcnJvcihVKDQxOSkpLHI9JGgobyxyLHZvaWQgMCksY2ModCxlLGwscil9aWYocz0obCZ0LmNoaWxkTGFuZXMpIT09MCxibnx8cyl7aWYocj1CdCxyIT09bnVsbCl7c3dpdGNoKGwmLWwpe2Nhc2UgNDppPTI7YnJlYWs7Y2FzZSAxNjppPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Omk9MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6aT0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDppPTB9aT1pJihyLnN1c3BlbmRlZExhbmVzfGwpPzA6aSxpIT09MCYmaSE9PW8ucmV0cnlMYW5lJiYoby5yZXRyeUxhbmU9aSxwaSh0LGkpLEVyKHIsdCxpLC0xKSl9cmV0dXJuIEZnKCkscj0kaChFcnJvcihVKDQyMSkpKSxjYyh0LGUsbCxyKX1yZXR1cm4gaS5kYXRhPT09IiQ/Ij8oZS5mbGFnc3w9MTI4LGUuY2hpbGQ9dC5jaGlsZCxlPVJULmJpbmQobnVsbCx0KSxpLl9yZWFjdFJldHJ5PWUsbnVsbCk6KHQ9by50cmVlQ29udGV4dCx6bj1KaShpLm5leHRTaWJsaW5nKSxGbj1lLG90PSEwLHhyPW51bGwsdCE9PW51bGwmJihRbltxbisrXT1haSxRbltxbisrXT11aSxRbltxbisrXT1LbyxhaT10LmlkLHVpPXQub3ZlcmZsb3csS289ZSksZT1NZyhlLHIuY2hpbGRyZW4pLGUuZmxhZ3N8PTQwOTYsZSl9ZnVuY3Rpb24gdTAodCxlLG4pe3QubGFuZXN8PWU7dmFyIHI9dC5hbHRlcm5hdGU7ciE9PW51bGwmJihyLmxhbmVzfD1lKSxOcCh0LnJldHVybixlLG4pfWZ1bmN0aW9uIFRoKHQsZSxuLHIsaSl7dmFyIG89dC5tZW1vaXplZFN0YXRlO289PT1udWxsP3QubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6ZSxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOml9OihvLmlzQmFja3dhcmRzPWUsby5yZW5kZXJpbmc9bnVsbCxvLnJlbmRlcmluZ1N0YXJ0VGltZT0wLG8ubGFzdD1yLG8udGFpbD1uLG8udGFpbE1vZGU9aSl9ZnVuY3Rpb24gX3codCxlLG4pe3ZhciByPWUucGVuZGluZ1Byb3BzLGk9ci5yZXZlYWxPcmRlcixvPXIudGFpbDtpZih1bih0LGUsci5jaGlsZHJlbixuKSxyPWR0LmN1cnJlbnQsciYyKXI9ciYxfDIsZS5mbGFnc3w9MTI4O2Vsc2V7aWYodCE9PW51bGwmJnQuZmxhZ3MmMTI4KWU6Zm9yKHQ9ZS5jaGlsZDt0IT09bnVsbDspe2lmKHQudGFnPT09MTMpdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdTAodCxuLGUpO2Vsc2UgaWYodC50YWc9PT0xOSl1MCh0LG4sZSk7ZWxzZSBpZih0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWsgZTtmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlicmVhayBlO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yJj0xfWlmKFhlKGR0LHIpLCEoZS5tb2RlJjEpKWUubWVtb2l6ZWRTdGF0ZT1udWxsO2Vsc2Ugc3dpdGNoKGkpe2Nhc2UiZm9yd2FyZHMiOmZvcihuPWUuY2hpbGQsaT1udWxsO24hPT1udWxsOyl0PW4uYWx0ZXJuYXRlLHQhPT1udWxsJiZoZCh0KT09PW51bGwmJihpPW4pLG49bi5zaWJsaW5nO249aSxuPT09bnVsbD8oaT1lLmNoaWxkLGUuY2hpbGQ9bnVsbCk6KGk9bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxUaChlLCExLGksbixvKTticmVhaztjYXNlImJhY2t3YXJkcyI6Zm9yKG49bnVsbCxpPWUuY2hpbGQsZS5jaGlsZD1udWxsO2khPT1udWxsOyl7aWYodD1pLmFsdGVybmF0ZSx0IT09bnVsbCYmaGQodCk9PT1udWxsKXtlLmNoaWxkPWk7YnJlYWt9dD1pLnNpYmxpbmcsaS5zaWJsaW5nPW4sbj1pLGk9dH1UaChlLCEwLG4sbnVsbCxvKTticmVhaztjYXNlInRvZ2V0aGVyIjpUaChlLCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6ZS5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIGUuY2hpbGR9ZnVuY3Rpb24gamModCxlKXshKGUubW9kZSYxKSYmdCE9PW51bGwmJih0LmFsdGVybmF0ZT1udWxsLGUuYWx0ZXJuYXRlPW51bGwsZS5mbGFnc3w9Mil9ZnVuY3Rpb24gbWkodCxlLG4pe2lmKHQhPT1udWxsJiYoZS5kZXBlbmRlbmNpZXM9dC5kZXBlbmRlbmNpZXMpLEdvfD1lLmxhbmVzLCEobiZlLmNoaWxkTGFuZXMpKXJldHVybiBudWxsO2lmKHQhPT1udWxsJiZlLmNoaWxkIT09dC5jaGlsZCl0aHJvdyBFcnJvcihVKDE1MykpO2lmKGUuY2hpbGQhPT1udWxsKXtmb3IodD1lLmNoaWxkLG49dG8odCx0LnBlbmRpbmdQcm9wcyksZS5jaGlsZD1uLG4ucmV0dXJuPWU7dC5zaWJsaW5nIT09bnVsbDspdD10LnNpYmxpbmcsbj1uLnNpYmxpbmc9dG8odCx0LnBlbmRpbmdQcm9wcyksbi5yZXR1cm49ZTtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gZS5jaGlsZH1mdW5jdGlvbiB5VCh0LGUsbil7c3dpdGNoKGUudGFnKXtjYXNlIDM6eXcoZSksc3MoKTticmVhaztjYXNlIDU6WjEoZSk7YnJlYWs7Y2FzZSAxOlRuKGUudHlwZSkmJnNkKGUpO2JyZWFrO2Nhc2UgNDpiZyhlLGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIHI9ZS50eXBlLl9jb250ZXh0LGk9ZS5tZW1vaXplZFByb3BzLnZhbHVlO1hlKGNkLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPWk7YnJlYWs7Y2FzZSAxMzppZihyPWUubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkIT09bnVsbD8oWGUoZHQsZHQuY3VycmVudCYxKSxlLmZsYWdzfD0xMjgsbnVsbCk6biZlLmNoaWxkLmNoaWxkTGFuZXM/eHcodCxlLG4pOihYZShkdCxkdC5jdXJyZW50JjEpLHQ9bWkodCxlLG4pLHQhPT1udWxsP3Quc2libGluZzpudWxsKTtYZShkdCxkdC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6aWYocj0obiZlLmNoaWxkTGFuZXMpIT09MCx0LmZsYWdzJjEyOCl7aWYocilyZXR1cm4gX3codCxlLG4pO2UuZmxhZ3N8PTEyOH1pZihpPWUubWVtb2l6ZWRTdGF0ZSxpIT09bnVsbCYmKGkucmVuZGVyaW5nPW51bGwsaS50YWlsPW51bGwsaS5sYXN0RWZmZWN0PW51bGwpLFhlKGR0LGR0LmN1cnJlbnQpLHIpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBlLmxhbmVzPTAsZ3codCxlLG4pfXJldHVybiBtaSh0LGUsbil9dmFyIHd3LElwLFN3LEV3O3d3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUuY2hpbGQ7biE9PW51bGw7KXtpZihuLnRhZz09PTV8fG4udGFnPT09Nil0LmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKG4udGFnIT09NCYmbi5jaGlsZCE9PW51bGwpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bi5zaWJsaW5nPT09bnVsbDspe2lmKG4ucmV0dXJuPT09bnVsbHx8bi5yZXR1cm49PT1lKXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fTtJcD1mdW5jdGlvbigpe307U3c9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5tZW1vaXplZFByb3BzO2lmKGkhPT1yKXt0PWUuc3RhdGVOb2RlLE1vKEJyLmN1cnJlbnQpO3ZhciBvPW51bGw7c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOmk9b3AodCxpKSxyPW9wKHQsciksbz1bXTticmVhaztjYXNlInNlbGVjdCI6aT1tdCh7fSxpLHt2YWx1ZTp2b2lkIDB9KSxyPW10KHt9LHIse3ZhbHVlOnZvaWQgMH0pLG89W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6aT1hcCh0LGkpLHI9YXAodCxyKSxvPVtdO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIGkub25DbGljayE9ImZ1bmN0aW9uIiYmdHlwZW9mIHIub25DbGljaz09ImZ1bmN0aW9uIiYmKHQub25jbGljaz1vZCl9Y3AobixyKTt2YXIgbDtuPW51bGw7Zm9yKHUgaW4gaSlpZighci5oYXNPd25Qcm9wZXJ0eSh1KSYmaS5oYXNPd25Qcm9wZXJ0eSh1KSYmaVt1XSE9bnVsbClpZih1PT09InN0eWxlIil7dmFyIHM9aVt1XTtmb3IobCBpbiBzKXMuaGFzT3duUHJvcGVydHkobCkmJihufHwobj17fSksbltsXT0iIil9ZWxzZSB1IT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiYmdSE9PSJjaGlsZHJlbiImJnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZ1IT09ImF1dG9Gb2N1cyImJihGYS5oYXNPd25Qcm9wZXJ0eSh1KT9vfHwobz1bXSk6KG89b3x8W10pLnB1c2godSxudWxsKSk7Zm9yKHUgaW4gcil7dmFyIGE9clt1XTtpZihzPWkhPW51bGw/aVt1XTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eSh1KSYmYSE9PXMmJihhIT1udWxsfHxzIT1udWxsKSlpZih1PT09InN0eWxlIilpZihzKXtmb3IobCBpbiBzKSFzLmhhc093blByb3BlcnR5KGwpfHxhJiZhLmhhc093blByb3BlcnR5KGwpfHwobnx8KG49e30pLG5bbF09IiIpO2ZvcihsIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShsKSYmc1tsXSE9PWFbbF0mJihufHwobj17fSksbltsXT1hW2xdKX1lbHNlIG58fChvfHwobz1bXSksby5wdXNoKHUsbikpLG49YTtlbHNlIHU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhhPWE/YS5fX2h0bWw6dm9pZCAwLHM9cz9zLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmcyE9PWEmJihvPW98fFtdKS5wdXNoKHUsYSkpOnU9PT0iY2hpbGRyZW4iP3R5cGVvZiBhIT0ic3RyaW5nIiYmdHlwZW9mIGEhPSJudW1iZXIifHwobz1vfHxbXSkucHVzaCh1LCIiK2EpOnUhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmdSE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYoRmEuaGFzT3duUHJvcGVydHkodSk/KGEhPW51bGwmJnU9PT0ib25TY3JvbGwiJiZldCgic2Nyb2xsIix0KSxvfHxzPT09YXx8KG89W10pKToobz1vfHxbXSkucHVzaCh1LGEpKX1uJiYobz1vfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciB1PW87KGUudXBkYXRlUXVldWU9dSkmJihlLmZsYWdzfD00KX19O0V3PWZ1bmN0aW9uKHQsZSxuLHIpe24hPT1yJiYoZS5mbGFnc3w9NCl9O2Z1bmN0aW9uIEpzKHQsZSl7aWYoIW90KXN3aXRjaCh0LnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6ZT10LnRhaWw7Zm9yKHZhciBuPW51bGw7ZSE9PW51bGw7KWUuYWx0ZXJuYXRlIT09bnVsbCYmKG49ZSksZT1lLnNpYmxpbmc7bj09PW51bGw/dC50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49dC50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP2V8fHQudGFpbD09PW51bGw/dC50YWlsPW51bGw6dC50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gWHQodCl7dmFyIGU9dC5hbHRlcm5hdGUhPT1udWxsJiZ0LmFsdGVybmF0ZS5jaGlsZD09PXQuY2hpbGQsbj0wLHI9MDtpZihlKWZvcih2YXIgaT10LmNoaWxkO2khPT1udWxsOylufD1pLmxhbmVzfGkuY2hpbGRMYW5lcyxyfD1pLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1pLmZsYWdzJjE0NjgwMDY0LGkucmV0dXJuPXQsaT1pLnNpYmxpbmc7ZWxzZSBmb3IoaT10LmNoaWxkO2khPT1udWxsOylufD1pLmxhbmVzfGkuY2hpbGRMYW5lcyxyfD1pLnN1YnRyZWVGbGFncyxyfD1pLmZsYWdzLGkucmV0dXJuPXQsaT1pLnNpYmxpbmc7cmV0dXJuIHQuc3VidHJlZUZsYWdzfD1yLHQuY2hpbGRMYW5lcz1uLGV9ZnVuY3Rpb24geFQodCxlLG4pe3ZhciByPWUucGVuZGluZ1Byb3BzO3N3aXRjaCh4ZyhlKSxlLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIFh0KGUpLG51bGw7Y2FzZSAxOnJldHVybiBUbihlLnR5cGUpJiZsZCgpLFh0KGUpLG51bGw7Y2FzZSAzOnJldHVybiByPWUuc3RhdGVOb2RlLHVzKCksaXQoJG4pLGl0KHJuKSxUZygpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLCh0PT09bnVsbHx8dC5jaGlsZD09PW51bGwpJiYoYWMoZSk/ZS5mbGFnc3w9NDp0PT09bnVsbHx8dC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmIShlLmZsYWdzJjI1Nil8fChlLmZsYWdzfD0xMDI0LHhyIT09bnVsbCYmKEhwKHhyKSx4cj1udWxsKSkpLElwKHQsZSksWHQoZSksbnVsbDtjYXNlIDU6JGcoZSk7dmFyIGk9TW8oUWEuY3VycmVudCk7aWYobj1lLnR5cGUsdCE9PW51bGwmJmUuc3RhdGVOb2RlIT1udWxsKVN3KHQsZSxuLHIsaSksdC5yZWYhPT1lLnJlZiYmKGUuZmxhZ3N8PTUxMixlLmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZihlLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjYpKTtyZXR1cm4gWHQoZSksbnVsbH1pZih0PU1vKEJyLmN1cnJlbnQpLGFjKGUpKXtyPWUuc3RhdGVOb2RlLG49ZS50eXBlO3ZhciBvPWUubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltMcl09ZSxyW1hhXT1vLHQ9KGUubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOmV0KCJjYW5jZWwiLHIpLGV0KCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpldCgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGk9MDtpPGhhLmxlbmd0aDtpKyspZXQoaGFbaV0scik7YnJlYWs7Y2FzZSJzb3VyY2UiOmV0KCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6ZXQoImVycm9yIixyKSxldCgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjpldCgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0Ijp5eShyLG8pLGV0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIW8ubXVsdGlwbGV9LGV0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjpfeShyLG8pLGV0KCJpbnZhbGlkIixyKX1jcChuLG8pLGk9bnVsbDtmb3IodmFyIGwgaW4gbylpZihvLmhhc093blByb3BlcnR5KGwpKXt2YXIgcz1vW2xdO2w9PT0iY2hpbGRyZW4iP3R5cGVvZiBzPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09cyYmKG8uc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJnNjKHIudGV4dENvbnRlbnQscyx0KSxpPVsiY2hpbGRyZW4iLHNdKTp0eXBlb2Ygcz09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIitzJiYoby5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmc2Moci50ZXh0Q29udGVudCxzLHQpLGk9WyJjaGlsZHJlbiIsIiIrc10pOkZhLmhhc093blByb3BlcnR5KGwpJiZzIT1udWxsJiZsPT09Im9uU2Nyb2xsIiYmZXQoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnF1KHIpLHh5KHIsbywhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cXUociksd3kocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBvLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9b2QpfXI9aSxlLnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJihlLmZsYWdzfD00KX1lbHNle2w9aS5ub2RlVHlwZT09PTk/aTppLm93bmVyRG9jdW1lbnQsdD09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKHQ9WF8obikpLHQ9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyh0PWwuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsdD10LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj90PWwuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KHQ9bC5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGw9dCxyLm11bHRpcGxlP2wubXVsdGlwbGU9ITA6ci5zaXplJiYobC5zaXplPXIuc2l6ZSkpKTp0PWwuY3JlYXRlRWxlbWVudE5TKHQsbiksdFtMcl09ZSx0W1hhXT1yLHd3KHQsZSwhMSwhMSksZS5zdGF0ZU5vZGU9dDtlOntzd2l0Y2gobD1kcChuLHIpLG4pe2Nhc2UiZGlhbG9nIjpldCgiY2FuY2VsIix0KSxldCgiY2xvc2UiLHQpLGk9cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOmV0KCJsb2FkIix0KSxpPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGk9MDtpPGhhLmxlbmd0aDtpKyspZXQoaGFbaV0sdCk7aT1yO2JyZWFrO2Nhc2Uic291cmNlIjpldCgiZXJyb3IiLHQpLGk9cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpldCgiZXJyb3IiLHQpLGV0KCJsb2FkIix0KSxpPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjpldCgidG9nZ2xlIix0KSxpPXI7YnJlYWs7Y2FzZSJpbnB1dCI6eXkodCxyKSxpPW9wKHQsciksZXQoImludmFsaWQiLHQpO2JyZWFrO2Nhc2Uib3B0aW9uIjppPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOnQuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxpPW10KHt9LHIse3ZhbHVlOnZvaWQgMH0pLGV0KCJpbnZhbGlkIix0KTticmVhaztjYXNlInRleHRhcmVhIjpfeSh0LHIpLGk9YXAodCxyKSxldCgiaW52YWxpZCIsdCk7YnJlYWs7ZGVmYXVsdDppPXJ9Y3AobixpKSxzPWk7Zm9yKG8gaW4gcylpZihzLmhhc093blByb3BlcnR5KG8pKXt2YXIgYT1zW29dO289PT0ic3R5bGUiP3FfKHQsYSk6bz09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGE9YT9hLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmSl8odCxhKSk6bz09PSJjaGlsZHJlbiI/dHlwZW9mIGE9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8YSE9PSIiKSYmQmEodCxhKTp0eXBlb2YgYT09Im51bWJlciImJkJhKHQsIiIrYSk6byE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZvIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJm8hPT0iYXV0b0ZvY3VzIiYmKEZhLmhhc093blByb3BlcnR5KG8pP2EhPW51bGwmJm89PT0ib25TY3JvbGwiJiZldCgic2Nyb2xsIix0KTphIT1udWxsJiZpZyh0LG8sYSxsKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnF1KHQpLHh5KHQsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cXUodCksd3kodCk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrb28oci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0Lm11bHRpcGxlPSEhci5tdWx0aXBsZSxvPXIudmFsdWUsbyE9bnVsbD9abCh0LCEhci5tdWx0aXBsZSxvLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmWmwodCwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIGkub25DbGljaz09ImZ1bmN0aW9uIiYmKHQub25jbGljaz1vZCl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJihlLmZsYWdzfD00KX1lLnJlZiE9PW51bGwmJihlLmZsYWdzfD01MTIsZS5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIFh0KGUpLG51bGw7Y2FzZSA2OmlmKHQmJmUuc3RhdGVOb2RlIT1udWxsKUV3KHQsZSx0Lm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJmUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2NikpO2lmKG49TW8oUWEuY3VycmVudCksTW8oQnIuY3VycmVudCksYWMoZSkpe2lmKHI9ZS5zdGF0ZU5vZGUsbj1lLm1lbW9pemVkUHJvcHMscltMcl09ZSwobz1yLm5vZGVWYWx1ZSE9PW4pJiYodD1Gbix0IT09bnVsbCkpc3dpdGNoKHQudGFnKXtjYXNlIDM6c2Moci5ub2RlVmFsdWUsbiwodC5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OnQubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmc2Moci5ub2RlVmFsdWUsbiwodC5tb2RlJjEpIT09MCl9byYmKGUuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbTHJdPWUsZS5zdGF0ZU5vZGU9cn1yZXR1cm4gWHQoZSksbnVsbDtjYXNlIDEzOmlmKGl0KGR0KSxyPWUubWVtb2l6ZWRTdGF0ZSx0PT09bnVsbHx8dC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihvdCYmem4hPT1udWxsJiZlLm1vZGUmMSYmIShlLmZsYWdzJjEyOCkpRjEoKSxzcygpLGUuZmxhZ3N8PTk4NTYwLG89ITE7ZWxzZSBpZihvPWFjKGUpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih0PT09bnVsbCl7aWYoIW8pdGhyb3cgRXJyb3IoVSgzMTgpKTtpZihvPWUubWVtb2l6ZWRTdGF0ZSxvPW8hPT1udWxsP28uZGVoeWRyYXRlZDpudWxsLCFvKXRocm93IEVycm9yKFUoMzE3KSk7b1tMcl09ZX1lbHNlIHNzKCksIShlLmZsYWdzJjEyOCkmJihlLm1lbW9pemVkU3RhdGU9bnVsbCksZS5mbGFnc3w9NDtYdChlKSxvPSExfWVsc2UgeHIhPT1udWxsJiYoSHAoeHIpLHhyPW51bGwpLG89ITA7aWYoIW8pcmV0dXJuIGUuZmxhZ3MmNjU1MzY/ZTpudWxsfXJldHVybiBlLmZsYWdzJjEyOD8oZS5sYW5lcz1uLGUpOihyPXIhPT1udWxsLHIhPT0odCE9PW51bGwmJnQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYoZS5jaGlsZC5mbGFnc3w9ODE5MixlLm1vZGUmMSYmKHQ9PT1udWxsfHxkdC5jdXJyZW50JjE/UHQ9PT0wJiYoUHQ9Myk6RmcoKSkpLGUudXBkYXRlUXVldWUhPT1udWxsJiYoZS5mbGFnc3w9NCksWHQoZSksbnVsbCk7Y2FzZSA0OnJldHVybiB1cygpLElwKHQsZSksdD09PW51bGwmJkdhKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFh0KGUpLG51bGw7Y2FzZSAxMDpyZXR1cm4gRWcoZS50eXBlLl9jb250ZXh0KSxYdChlKSxudWxsO2Nhc2UgMTc6cmV0dXJuIFRuKGUudHlwZSkmJmxkKCksWHQoZSksbnVsbDtjYXNlIDE5OmlmKGl0KGR0KSxvPWUubWVtb2l6ZWRTdGF0ZSxvPT09bnVsbClyZXR1cm4gWHQoZSksbnVsbDtpZihyPShlLmZsYWdzJjEyOCkhPT0wLGw9by5yZW5kZXJpbmcsbD09PW51bGwpaWYocilKcyhvLCExKTtlbHNle2lmKFB0IT09MHx8dCE9PW51bGwmJnQuZmxhZ3MmMTI4KWZvcih0PWUuY2hpbGQ7dCE9PW51bGw7KXtpZihsPWhkKHQpLGwhPT1udWxsKXtmb3IoZS5mbGFnc3w9MTI4LEpzKG8sITEpLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKGUudXBkYXRlUXVldWU9cixlLmZsYWdzfD00KSxlLnN1YnRyZWVGbGFncz0wLHI9bixuPWUuY2hpbGQ7biE9PW51bGw7KW89bix0PXIsby5mbGFncyY9MTQ2ODAwNjYsbD1vLmFsdGVybmF0ZSxsPT09bnVsbD8oby5jaGlsZExhbmVzPTAsby5sYW5lcz10LG8uY2hpbGQ9bnVsbCxvLnN1YnRyZWVGbGFncz0wLG8ubWVtb2l6ZWRQcm9wcz1udWxsLG8ubWVtb2l6ZWRTdGF0ZT1udWxsLG8udXBkYXRlUXVldWU9bnVsbCxvLmRlcGVuZGVuY2llcz1udWxsLG8uc3RhdGVOb2RlPW51bGwpOihvLmNoaWxkTGFuZXM9bC5jaGlsZExhbmVzLG8ubGFuZXM9bC5sYW5lcyxvLmNoaWxkPWwuY2hpbGQsby5zdWJ0cmVlRmxhZ3M9MCxvLmRlbGV0aW9ucz1udWxsLG8ubWVtb2l6ZWRQcm9wcz1sLm1lbW9pemVkUHJvcHMsby5tZW1vaXplZFN0YXRlPWwubWVtb2l6ZWRTdGF0ZSxvLnVwZGF0ZVF1ZXVlPWwudXBkYXRlUXVldWUsby50eXBlPWwudHlwZSx0PWwuZGVwZW5kZW5jaWVzLG8uZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIFhlKGR0LGR0LmN1cnJlbnQmMXwyKSxlLmNoaWxkfXQ9dC5zaWJsaW5nfW8udGFpbCE9PW51bGwmJkN0KCk+ZHMmJihlLmZsYWdzfD0xMjgscj0hMCxKcyhvLCExKSxlLmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYodD1oZChsKSx0IT09bnVsbCl7aWYoZS5mbGFnc3w9MTI4LHI9ITAsbj10LnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYoZS51cGRhdGVRdWV1ZT1uLGUuZmxhZ3N8PTQpLEpzKG8sITApLG8udGFpbD09PW51bGwmJm8udGFpbE1vZGU9PT0iaGlkZGVuIiYmIWwuYWx0ZXJuYXRlJiYhb3QpcmV0dXJuIFh0KGUpLG51bGx9ZWxzZSAyKkN0KCktby5yZW5kZXJpbmdTdGFydFRpbWU+ZHMmJm4hPT0xMDczNzQxODI0JiYoZS5mbGFnc3w9MTI4LHI9ITAsSnMobywhMSksZS5sYW5lcz00MTk0MzA0KTtvLmlzQmFja3dhcmRzPyhsLnNpYmxpbmc9ZS5jaGlsZCxlLmNoaWxkPWwpOihuPW8ubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9bDplLmNoaWxkPWwsby5sYXN0PWwpfXJldHVybiBvLnRhaWwhPT1udWxsPyhlPW8udGFpbCxvLnJlbmRlcmluZz1lLG8udGFpbD1lLnNpYmxpbmcsby5yZW5kZXJpbmdTdGFydFRpbWU9Q3QoKSxlLnNpYmxpbmc9bnVsbCxuPWR0LmN1cnJlbnQsWGUoZHQscj9uJjF8MjpuJjEpLGUpOihYdChlKSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHpnKCkscj1lLm1lbW9pemVkU3RhdGUhPT1udWxsLHQhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKGUuZmxhZ3N8PTgxOTIpLHImJmUubW9kZSYxP0RuJjEwNzM3NDE4MjQmJihYdChlKSxlLnN1YnRyZWVGbGFncyY2JiYoZS5mbGFnc3w9ODE5MikpOlh0KGUpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKFUoMTU2LGUudGFnKSl9ZnVuY3Rpb24gX1QodCxlKXtzd2l0Y2goeGcoZSksZS50YWcpe2Nhc2UgMTpyZXR1cm4gVG4oZS50eXBlKSYmbGQoKSx0PWUuZmxhZ3MsdCY2NTUzNj8oZS5mbGFncz10Ji02NTUzN3wxMjgsZSk6bnVsbDtjYXNlIDM6cmV0dXJuIHVzKCksaXQoJG4pLGl0KHJuKSxUZygpLHQ9ZS5mbGFncyx0JjY1NTM2JiYhKHQmMTI4KT8oZS5mbGFncz10Ji02NTUzN3wxMjgsZSk6bnVsbDtjYXNlIDU6cmV0dXJuICRnKGUpLG51bGw7Y2FzZSAxMzppZihpdChkdCksdD1lLm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJnQuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGUuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihVKDM0MCkpO3NzKCl9cmV0dXJuIHQ9ZS5mbGFncyx0JjY1NTM2PyhlLmZsYWdzPXQmLTY1NTM3fDEyOCxlKTpudWxsO2Nhc2UgMTk6cmV0dXJuIGl0KGR0KSxudWxsO2Nhc2UgNDpyZXR1cm4gdXMoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIEVnKGUudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIHpnKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBkYz0hMSxRdD0hMSx3VD10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCxlZT1udWxsO2Z1bmN0aW9uIEZsKHQsZSl7dmFyIG49dC5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7dnQodCxlLHIpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24ganAodCxlLG4pe3RyeXtuKCl9Y2F0Y2gocil7dnQodCxlLHIpfX12YXIgYzA9ITE7ZnVuY3Rpb24gU1QodCxlKXtpZih3cD1uZCx0PSQxKCksdmcodCkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiB0KXZhciBuPXtzdGFydDp0LnNlbGVjdGlvblN0YXJ0LGVuZDp0LnNlbGVjdGlvbkVuZH07ZWxzZSBlOntuPShuPXQub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgcj1uLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiZyLnJhbmdlQ291bnQhPT0wKXtuPXIuYW5jaG9yTm9kZTt2YXIgaT1yLmFuY2hvck9mZnNldCxvPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7bi5ub2RlVHlwZSxvLm5vZGVUeXBlfWNhdGNoe249bnVsbDticmVhayBlfXZhciBsPTAscz0tMSxhPS0xLHU9MCxjPTAsZD10LGY9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBoO2QhPT1ufHxpIT09MCYmZC5ub2RlVHlwZSE9PTN8fChzPWwraSksZCE9PW98fHIhPT0wJiZkLm5vZGVUeXBlIT09M3x8KGE9bCtyKSxkLm5vZGVUeXBlPT09MyYmKGwrPWQubm9kZVZhbHVlLmxlbmd0aCksKGg9ZC5maXJzdENoaWxkKSE9PW51bGw7KWY9ZCxkPWg7Zm9yKDs7KXtpZihkPT09dClicmVhayB0O2lmKGY9PT1uJiYrK3U9PT1pJiYocz1sKSxmPT09byYmKytjPT09ciYmKGE9bCksKGg9ZC5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO2Q9ZixmPWQucGFyZW50Tm9kZX1kPWh9bj1zPT09LTF8fGE9PT0tMT9udWxsOntzdGFydDpzLGVuZDphfX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoU3A9e2ZvY3VzZWRFbGVtOnQsc2VsZWN0aW9uUmFuZ2U6bn0sbmQ9ITEsZWU9ZTtlZSE9PW51bGw7KWlmKGU9ZWUsdD1lLmNoaWxkLChlLnN1YnRyZWVGbGFncyYxMDI4KSE9PTAmJnQhPT1udWxsKXQucmV0dXJuPWUsZWU9dDtlbHNlIGZvcig7ZWUhPT1udWxsOyl7ZT1lZTt0cnl7dmFyIGc9ZS5hbHRlcm5hdGU7aWYoZS5mbGFncyYxMDI0KXN3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYoZyE9PW51bGwpe3ZhciBtPWcubWVtb2l6ZWRQcm9wcyx3PWcubWVtb2l6ZWRTdGF0ZSx2PWUuc3RhdGVOb2RlLHk9di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShlLmVsZW1lbnRUeXBlPT09ZS50eXBlP206Z3IoZS50eXBlLG0pLHcpO3YuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9eX1icmVhaztjYXNlIDM6dmFyIF89ZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztfLm5vZGVUeXBlPT09MT9fLnRleHRDb250ZW50PSIiOl8ubm9kZVR5cGU9PT05JiZfLmRvY3VtZW50RWxlbWVudCYmXy5yZW1vdmVDaGlsZChfLmRvY3VtZW50RWxlbWVudCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMTYzKSl9fWNhdGNoKFMpe3Z0KGUsZS5yZXR1cm4sUyl9aWYodD1lLnNpYmxpbmcsdCE9PW51bGwpe3QucmV0dXJuPWUucmV0dXJuLGVlPXQ7YnJlYWt9ZWU9ZS5yZXR1cm59cmV0dXJuIGc9YzAsYzA9ITEsZ31mdW5jdGlvbiBDYSh0LGUsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgaT1yPXIubmV4dDtkb3tpZigoaS50YWcmdCk9PT10KXt2YXIgbz1pLmRlc3Ryb3k7aS5kZXN0cm95PXZvaWQgMCxvIT09dm9pZCAwJiZqcChlLG4sbyl9aT1pLm5leHR9d2hpbGUoaSE9PXIpfX1mdW5jdGlvbiBwZih0LGUpe2lmKGU9ZS51cGRhdGVRdWV1ZSxlPWUhPT1udWxsP2UubGFzdEVmZmVjdDpudWxsLGUhPT1udWxsKXt2YXIgbj1lPWUubmV4dDtkb3tpZigobi50YWcmdCk9PT10KXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT1lKX19ZnVuY3Rpb24genAodCl7dmFyIGU9dC5yZWY7aWYoZSE9PW51bGwpe3ZhciBuPXQuc3RhdGVOb2RlO3N3aXRjaCh0LnRhZyl7Y2FzZSA1OnQ9bjticmVhaztkZWZhdWx0OnQ9bn10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmUuY3VycmVudD10fX1mdW5jdGlvbiBDdyh0KXt2YXIgZT10LmFsdGVybmF0ZTtlIT09bnVsbCYmKHQuYWx0ZXJuYXRlPW51bGwsQ3coZSkpLHQuY2hpbGQ9bnVsbCx0LmRlbGV0aW9ucz1udWxsLHQuc2libGluZz1udWxsLHQudGFnPT09NSYmKGU9dC5zdGF0ZU5vZGUsZSE9PW51bGwmJihkZWxldGUgZVtMcl0sZGVsZXRlIGVbWGFdLGRlbGV0ZSBlW2twXSxkZWxldGUgZVtpVF0sZGVsZXRlIGVbb1RdKSksdC5zdGF0ZU5vZGU9bnVsbCx0LnJldHVybj1udWxsLHQuZGVwZW5kZW5jaWVzPW51bGwsdC5tZW1vaXplZFByb3BzPW51bGwsdC5tZW1vaXplZFN0YXRlPW51bGwsdC5wZW5kaW5nUHJvcHM9bnVsbCx0LnN0YXRlTm9kZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBrdyh0KXtyZXR1cm4gdC50YWc9PT01fHx0LnRhZz09PTN8fHQudGFnPT09NH1mdW5jdGlvbiBkMCh0KXtlOmZvcig7Oyl7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHxrdyh0LnJldHVybikpcmV0dXJuIG51bGw7dD10LnJldHVybn1mb3IodC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZzt0LnRhZyE9PTUmJnQudGFnIT09NiYmdC50YWchPT0xODspe2lmKHQuZmxhZ3MmMnx8dC5jaGlsZD09PW51bGx8fHQudGFnPT09NCljb250aW51ZSBlO3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkfWlmKCEodC5mbGFncyYyKSlyZXR1cm4gdC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIEZwKHQsZSxuKXt2YXIgcj10LnRhZztpZihyPT09NXx8cj09PTYpdD10LnN0YXRlTm9kZSxlP24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlKTpuLmluc2VydEJlZm9yZSh0LGUpOihuLm5vZGVUeXBlPT09OD8oZT1uLnBhcmVudE5vZGUsZS5pbnNlcnRCZWZvcmUodCxuKSk6KGU9bixlLmFwcGVuZENoaWxkKHQpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHxlLm9uY2xpY2shPT1udWxsfHwoZS5vbmNsaWNrPW9kKSk7ZWxzZSBpZihyIT09NCYmKHQ9dC5jaGlsZCx0IT09bnVsbCkpZm9yKEZwKHQsZSxuKSx0PXQuc2libGluZzt0IT09bnVsbDspRnAodCxlLG4pLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIEJwKHQsZSxuKXt2YXIgcj10LnRhZztpZihyPT09NXx8cj09PTYpdD10LnN0YXRlTm9kZSxlP24uaW5zZXJ0QmVmb3JlKHQsZSk6bi5hcHBlbmRDaGlsZCh0KTtlbHNlIGlmKHIhPT00JiYodD10LmNoaWxkLHQhPT1udWxsKSlmb3IoQnAodCxlLG4pLHQ9dC5zaWJsaW5nO3QhPT1udWxsOylCcCh0LGUsbiksdD10LnNpYmxpbmd9dmFyIEh0PW51bGwsdnI9ITE7ZnVuY3Rpb24gUmkodCxlLG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KWJ3KHQsZSxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBidyh0LGUsbil7aWYoRnImJnR5cGVvZiBGci5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7RnIub25Db21taXRGaWJlclVubW91bnQobGYsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OlF0fHxGbChuLGUpO2Nhc2UgNjp2YXIgcj1IdCxpPXZyO0h0PW51bGwsUmkodCxlLG4pLEh0PXIsdnI9aSxIdCE9PW51bGwmJih2cj8odD1IdCxuPW4uc3RhdGVOb2RlLHQubm9kZVR5cGU9PT04P3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTp0LnJlbW92ZUNoaWxkKG4pKTpIdC5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6SHQhPT1udWxsJiYodnI/KHQ9SHQsbj1uLnN0YXRlTm9kZSx0Lm5vZGVUeXBlPT09OD93aCh0LnBhcmVudE5vZGUsbik6dC5ub2RlVHlwZT09PTEmJndoKHQsbiksSGEodCkpOndoKEh0LG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9SHQsaT12cixIdD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHZyPSEwLFJpKHQsZSxuKSxIdD1yLHZyPWk7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFRdCYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe2k9cj1yLm5leHQ7ZG97dmFyIG89aSxsPW8uZGVzdHJveTtvPW8udGFnLGwhPT12b2lkIDAmJihvJjJ8fG8mNCkmJmpwKG4sZSxsKSxpPWkubmV4dH13aGlsZShpIT09cil9UmkodCxlLG4pO2JyZWFrO2Nhc2UgMTppZighUXQmJihGbChuLGUpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gocyl7dnQobixlLHMpfVJpKHQsZSxuKTticmVhaztjYXNlIDIxOlJpKHQsZSxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhRdD0ocj1RdCl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsUmkodCxlLG4pLFF0PXIpOlJpKHQsZSxuKTticmVhaztkZWZhdWx0OlJpKHQsZSxuKX19ZnVuY3Rpb24gZjAodCl7dmFyIGU9dC51cGRhdGVRdWV1ZTtpZihlIT09bnVsbCl7dC51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPXQuc3RhdGVOb2RlO249PT1udWxsJiYobj10LnN0YXRlTm9kZT1uZXcgd1QpLGUuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1PVC5iaW5kKG51bGwsdCxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihpLGkpKX0pfX1mdW5jdGlvbiBmcih0LGUpe3ZhciBuPWUuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO3RyeXt2YXIgbz10LGw9ZSxzPWw7ZTpmb3IoO3MhPT1udWxsOyl7c3dpdGNoKHMudGFnKXtjYXNlIDU6SHQ9cy5zdGF0ZU5vZGUsdnI9ITE7YnJlYWsgZTtjYXNlIDM6SHQ9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx2cj0hMDticmVhayBlO2Nhc2UgNDpIdD1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHZyPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihIdD09PW51bGwpdGhyb3cgRXJyb3IoVSgxNjApKTtidyhvLGwsaSksSHQ9bnVsbCx2cj0hMTt2YXIgYT1pLmFsdGVybmF0ZTthIT09bnVsbCYmKGEucmV0dXJuPW51bGwpLGkucmV0dXJuPW51bGx9Y2F0Y2godSl7dnQoaSxlLHUpfX1pZihlLnN1YnRyZWVGbGFncyYxMjg1NClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOykkdyhlLHQpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uICR3KHQsZSl7dmFyIG49dC5hbHRlcm5hdGUscj10LmZsYWdzO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKGZyKGUsdCksUHIodCksciY0KXt0cnl7Q2EoMyx0LHQucmV0dXJuKSxwZigzLHQpfWNhdGNoKG0pe3Z0KHQsdC5yZXR1cm4sbSl9dHJ5e0NhKDUsdCx0LnJldHVybil9Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19YnJlYWs7Y2FzZSAxOmZyKGUsdCksUHIodCksciY1MTImJm4hPT1udWxsJiZGbChuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoZnIoZSx0KSxQcih0KSxyJjUxMiYmbiE9PW51bGwmJkZsKG4sbi5yZXR1cm4pLHQuZmxhZ3MmMzIpe3ZhciBpPXQuc3RhdGVOb2RlO3RyeXtCYShpLCIiKX1jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfX1pZihyJjQmJihpPXQuc3RhdGVOb2RlLGkhPW51bGwpKXt2YXIgbz10Lm1lbW9pemVkUHJvcHMsbD1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6byxzPXQudHlwZSxhPXQudXBkYXRlUXVldWU7aWYodC51cGRhdGVRdWV1ZT1udWxsLGEhPT1udWxsKXRyeXtzPT09ImlucHV0IiYmby50eXBlPT09InJhZGlvIiYmby5uYW1lIT1udWxsJiZHXyhpLG8pLGRwKHMsbCk7dmFyIHU9ZHAocyxvKTtmb3IobD0wO2w8YS5sZW5ndGg7bCs9Mil7dmFyIGM9YVtsXSxkPWFbbCsxXTtjPT09InN0eWxlIj9xXyhpLGQpOmM9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0pfKGksZCk6Yz09PSJjaGlsZHJlbiI/QmEoaSxkKTppZyhpLGMsZCx1KX1zd2l0Y2gocyl7Y2FzZSJpbnB1dCI6bHAoaSxvKTticmVhaztjYXNlInRleHRhcmVhIjpZXyhpLG8pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgZj1pLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7aS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhby5tdWx0aXBsZTt2YXIgaD1vLnZhbHVlO2ghPW51bGw/WmwoaSwhIW8ubXVsdGlwbGUsaCwhMSk6ZiE9PSEhby5tdWx0aXBsZSYmKG8uZGVmYXVsdFZhbHVlIT1udWxsP1psKGksISFvLm11bHRpcGxlLG8uZGVmYXVsdFZhbHVlLCEwKTpabChpLCEhby5tdWx0aXBsZSxvLm11bHRpcGxlP1tdOiIiLCExKSl9aVtYYV09b31jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfX1icmVhaztjYXNlIDY6aWYoZnIoZSx0KSxQcih0KSxyJjQpe2lmKHQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihVKDE2MikpO2k9dC5zdGF0ZU5vZGUsbz10Lm1lbW9pemVkUHJvcHM7dHJ5e2kubm9kZVZhbHVlPW99Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19YnJlYWs7Y2FzZSAzOmlmKGZyKGUsdCksUHIodCksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7SGEoZS5jb250YWluZXJJbmZvKX1jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfWJyZWFrO2Nhc2UgNDpmcihlLHQpLFByKHQpO2JyZWFrO2Nhc2UgMTM6ZnIoZSx0KSxQcih0KSxpPXQuY2hpbGQsaS5mbGFncyY4MTkyJiYobz1pLm1lbW9pemVkU3RhdGUhPT1udWxsLGkuc3RhdGVOb2RlLmlzSGlkZGVuPW8sIW98fGkuYWx0ZXJuYXRlIT09bnVsbCYmaS5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fChJZz1DdCgpKSksciY0JiZmMCh0KTticmVhaztjYXNlIDIyOmlmKGM9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsdC5tb2RlJjE/KFF0PSh1PVF0KXx8YyxmcihlLHQpLFF0PXUpOmZyKGUsdCksUHIodCksciY4MTkyKXtpZih1PXQubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKHQuc3RhdGVOb2RlLmlzSGlkZGVuPXUpJiYhYyYmdC5tb2RlJjEpZm9yKGVlPXQsYz10LmNoaWxkO2MhPT1udWxsOyl7Zm9yKGQ9ZWU9YztlZSE9PW51bGw7KXtzd2l0Y2goZj1lZSxoPWYuY2hpbGQsZi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpDYSg0LGYsZi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpGbChmLGYucmV0dXJuKTt2YXIgZz1mLnN0YXRlTm9kZTtpZih0eXBlb2YgZy5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1mLG49Zi5yZXR1cm47dHJ5e2U9cixnLnByb3BzPWUubWVtb2l6ZWRQcm9wcyxnLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxnLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobSl7dnQocixuLG0pfX1icmVhaztjYXNlIDU6RmwoZixmLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihmLm1lbW9pemVkU3RhdGUhPT1udWxsKXtwMChkKTtjb250aW51ZX19aCE9PW51bGw/KGgucmV0dXJuPWYsZWU9aCk6cDAoZCl9Yz1jLnNpYmxpbmd9ZTpmb3IoYz1udWxsLGQ9dDs7KXtpZihkLnRhZz09PTUpe2lmKGM9PT1udWxsKXtjPWQ7dHJ5e2k9ZC5zdGF0ZU5vZGUsdT8obz1pLnN0eWxlLHR5cGVvZiBvLnNldFByb3BlcnR5PT0iZnVuY3Rpb24iP28uc2V0UHJvcGVydHkoImRpc3BsYXkiLCJub25lIiwiaW1wb3J0YW50Iik6by5kaXNwbGF5PSJub25lIik6KHM9ZC5zdGF0ZU5vZGUsYT1kLm1lbW9pemVkUHJvcHMuc3R5bGUsbD1hIT1udWxsJiZhLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/YS5kaXNwbGF5Om51bGwscy5zdHlsZS5kaXNwbGF5PVFfKCJkaXNwbGF5IixsKSl9Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19fWVsc2UgaWYoZC50YWc9PT02KXtpZihjPT09bnVsbCl0cnl7ZC5zdGF0ZU5vZGUubm9kZVZhbHVlPXU/IiI6ZC5tZW1vaXplZFByb3BzfWNhdGNoKG0pe3Z0KHQsdC5yZXR1cm4sbSl9fWVsc2UgaWYoKGQudGFnIT09MjImJmQudGFnIT09MjN8fGQubWVtb2l6ZWRTdGF0ZT09PW51bGx8fGQ9PT10KSYmZC5jaGlsZCE9PW51bGwpe2QuY2hpbGQucmV0dXJuPWQsZD1kLmNoaWxkO2NvbnRpbnVlfWlmKGQ9PT10KWJyZWFrIGU7Zm9yKDtkLnNpYmxpbmc9PT1udWxsOyl7aWYoZC5yZXR1cm49PT1udWxsfHxkLnJldHVybj09PXQpYnJlYWsgZTtjPT09ZCYmKGM9bnVsbCksZD1kLnJldHVybn1jPT09ZCYmKGM9bnVsbCksZC5zaWJsaW5nLnJldHVybj1kLnJldHVybixkPWQuc2libGluZ319YnJlYWs7Y2FzZSAxOTpmcihlLHQpLFByKHQpLHImNCYmZjAodCk7YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OmZyKGUsdCksUHIodCl9fWZ1bmN0aW9uIFByKHQpe3ZhciBlPXQuZmxhZ3M7aWYoZSYyKXt0cnl7ZTp7Zm9yKHZhciBuPXQucmV0dXJuO24hPT1udWxsOyl7aWYoa3cobikpe3ZhciByPW47YnJlYWsgZX1uPW4ucmV0dXJufXRocm93IEVycm9yKFUoMTYwKSl9c3dpdGNoKHIudGFnKXtjYXNlIDU6dmFyIGk9ci5zdGF0ZU5vZGU7ci5mbGFncyYzMiYmKEJhKGksIiIpLHIuZmxhZ3MmPS0zMyk7dmFyIG89ZDAodCk7QnAodCxvLGkpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIGw9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxzPWQwKHQpO0ZwKHQscyxsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMTYxKSl9fWNhdGNoKGEpe3Z0KHQsdC5yZXR1cm4sYSl9dC5mbGFncyY9LTN9ZSY0MDk2JiYodC5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIEVUKHQsZSxuKXtlZT10LFR3KHQpfWZ1bmN0aW9uIFR3KHQsZSxuKXtmb3IodmFyIHI9KHQubW9kZSYxKSE9PTA7ZWUhPT1udWxsOyl7dmFyIGk9ZWUsbz1pLmNoaWxkO2lmKGkudGFnPT09MjImJnIpe3ZhciBsPWkubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fGRjO2lmKCFsKXt2YXIgcz1pLmFsdGVybmF0ZSxhPXMhPT1udWxsJiZzLm1lbW9pemVkU3RhdGUhPT1udWxsfHxRdDtzPWRjO3ZhciB1PVF0O2lmKGRjPWwsKFF0PWEpJiYhdSlmb3IoZWU9aTtlZSE9PW51bGw7KWw9ZWUsYT1sLmNoaWxkLGwudGFnPT09MjImJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGw/bTAoaSk6YSE9PW51bGw/KGEucmV0dXJuPWwsZWU9YSk6bTAoaSk7Zm9yKDtvIT09bnVsbDspZWU9byxUdyhvKSxvPW8uc2libGluZztlZT1pLGRjPXMsUXQ9dX1oMCh0KX1lbHNlIGkuc3VidHJlZUZsYWdzJjg3NzImJm8hPT1udWxsPyhvLnJldHVybj1pLGVlPW8pOmgwKHQpfX1mdW5jdGlvbiBoMCh0KXtmb3IoO2VlIT09bnVsbDspe3ZhciBlPWVlO2lmKGUuZmxhZ3MmODc3Mil7dmFyIG49ZS5hbHRlcm5hdGU7dHJ5e2lmKGUuZmxhZ3MmODc3Milzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6UXR8fHBmKDUsZSk7YnJlYWs7Y2FzZSAxOnZhciByPWUuc3RhdGVOb2RlO2lmKGUuZmxhZ3MmNCYmIVF0KWlmKG49PT1udWxsKXIuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBpPWUuZWxlbWVudFR5cGU9PT1lLnR5cGU/bi5tZW1vaXplZFByb3BzOmdyKGUudHlwZSxuLm1lbW9pemVkUHJvcHMpO3IuY29tcG9uZW50RGlkVXBkYXRlKGksbi5tZW1vaXplZFN0YXRlLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBvPWUudXBkYXRlUXVldWU7byE9PW51bGwmJlh5KGUsbyxyKTticmVhaztjYXNlIDM6dmFyIGw9ZS51cGRhdGVRdWV1ZTtpZihsIT09bnVsbCl7aWYobj1udWxsLGUuY2hpbGQhPT1udWxsKXN3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1Om49ZS5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOm49ZS5jaGlsZC5zdGF0ZU5vZGV9WHkoZSxsLG4pfWJyZWFrO2Nhc2UgNTp2YXIgcz1lLnN0YXRlTm9kZTtpZihuPT09bnVsbCYmZS5mbGFncyY0KXtuPXM7dmFyIGE9ZS5tZW1vaXplZFByb3BzO3N3aXRjaChlLnR5cGUpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6YS5hdXRvRm9jdXMmJm4uZm9jdXMoKTticmVhaztjYXNlImltZyI6YS5zcmMmJihuLnNyYz1hLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe3ZhciB1PWUuYWx0ZXJuYXRlO2lmKHUhPT1udWxsKXt2YXIgYz11Lm1lbW9pemVkU3RhdGU7aWYoYyE9PW51bGwpe3ZhciBkPWMuZGVoeWRyYXRlZDtkIT09bnVsbCYmSGEoZCl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFUoMTYzKSl9UXR8fGUuZmxhZ3MmNTEyJiZ6cChlKX1jYXRjaChmKXt2dChlLGUucmV0dXJuLGYpfX1pZihlPT09dCl7ZWU9bnVsbDticmVha31pZihuPWUuc2libGluZyxuIT09bnVsbCl7bi5yZXR1cm49ZS5yZXR1cm4sZWU9bjticmVha31lZT1lLnJldHVybn19ZnVuY3Rpb24gcDAodCl7Zm9yKDtlZSE9PW51bGw7KXt2YXIgZT1lZTtpZihlPT09dCl7ZWU9bnVsbDticmVha312YXIgbj1lLnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPWUucmV0dXJuLGVlPW47YnJlYWt9ZWU9ZS5yZXR1cm59fWZ1bmN0aW9uIG0wKHQpe2Zvcig7ZWUhPT1udWxsOyl7dmFyIGU9ZWU7dHJ5e3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgbj1lLnJldHVybjt0cnl7cGYoNCxlKX1jYXRjaChhKXt2dChlLG4sYSl9YnJlYWs7Y2FzZSAxOnZhciByPWUuc3RhdGVOb2RlO2lmKHR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iKXt2YXIgaT1lLnJldHVybjt0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGEpe3Z0KGUsaSxhKX19dmFyIG89ZS5yZXR1cm47dHJ5e3pwKGUpfWNhdGNoKGEpe3Z0KGUsbyxhKX1icmVhaztjYXNlIDU6dmFyIGw9ZS5yZXR1cm47dHJ5e3pwKGUpfWNhdGNoKGEpe3Z0KGUsbCxhKX19fWNhdGNoKGEpe3Z0KGUsZS5yZXR1cm4sYSl9aWYoZT09PXQpe2VlPW51bGw7YnJlYWt9dmFyIHM9ZS5zaWJsaW5nO2lmKHMhPT1udWxsKXtzLnJldHVybj1lLnJldHVybixlZT1zO2JyZWFrfWVlPWUucmV0dXJufX12YXIgQ1Q9TWF0aC5jZWlsLGdkPV9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsTGc9X2kuUmVhY3RDdXJyZW50T3duZXIsb3I9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsTWU9MCxCdD1udWxsLGJ0PW51bGwsWnQ9MCxEbj0wLEJsPV9vKDApLFB0PTAsbnU9bnVsbCxHbz0wLG1mPTAsRGc9MCxrYT1udWxsLGtuPW51bGwsSWc9MCxkcz0xLzAsbmk9bnVsbCx2ZD0hMSxVcD1udWxsLHFpPW51bGwsZmM9ITEsSGk9bnVsbCx5ZD0wLGJhPTAsV3A9bnVsbCx6Yz0tMSxGYz0wO2Z1bmN0aW9uIHZuKCl7cmV0dXJuIE1lJjY/Q3QoKTp6YyE9PS0xP3pjOnpjPUN0KCl9ZnVuY3Rpb24gZW8odCl7cmV0dXJuIHQubW9kZSYxP01lJjImJlp0IT09MD9adCYtWnQ6c1QudHJhbnNpdGlvbiE9PW51bGw/KEZjPT09MCYmKEZjPWQxKCkpLEZjKToodD1VZSx0IT09MHx8KHQ9d2luZG93LmV2ZW50LHQ9dD09PXZvaWQgMD8xNjp5MSh0LnR5cGUpKSx0KToxfWZ1bmN0aW9uIEVyKHQsZSxuLHIpe2lmKDUwPGJhKXRocm93IGJhPTAsV3A9bnVsbCxFcnJvcihVKDE4NSkpO0F1KHQsbixyKSwoIShNZSYyKXx8dCE9PUJ0KSYmKHQ9PT1CdCYmKCEoTWUmMikmJihtZnw9biksUHQ9PT00JiZCaSh0LFp0KSksTm4odCxyKSxuPT09MSYmTWU9PT0wJiYhKGUubW9kZSYxKSYmKGRzPUN0KCkrNTAwLGRmJiZ3bygpKSl9ZnVuY3Rpb24gTm4odCxlKXt2YXIgbj10LmNhbGxiYWNrTm9kZTtzJCh0LGUpO3ZhciByPXRkKHQsdD09PUJ0P1p0OjApO2lmKHI9PT0wKW4hPT1udWxsJiZDeShuKSx0LmNhbGxiYWNrTm9kZT1udWxsLHQuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYoZT1yJi1yLHQuY2FsbGJhY2tQcmlvcml0eSE9PWUpe2lmKG4hPW51bGwmJkN5KG4pLGU9PT0xKXQudGFnPT09MD9sVChnMC5iaW5kKG51bGwsdCkpOkkxKGcwLmJpbmQobnVsbCx0KSksblQoZnVuY3Rpb24oKXshKE1lJjYpJiZ3bygpfSksbj1udWxsO2Vsc2V7c3dpdGNoKGYxKHIpKXtjYXNlIDE6bj11ZzticmVhaztjYXNlIDQ6bj11MTticmVhaztjYXNlIDE2Om49ZWQ7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj1jMTticmVhaztkZWZhdWx0Om49ZWR9bj1EdyhuLE53LmJpbmQobnVsbCx0KSl9dC5jYWxsYmFja1ByaW9yaXR5PWUsdC5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gTncodCxlKXtpZih6Yz0tMSxGYz0wLE1lJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTt2YXIgbj10LmNhbGxiYWNrTm9kZTtpZihRbCgpJiZ0LmNhbGxiYWNrTm9kZSE9PW4pcmV0dXJuIG51bGw7dmFyIHI9dGQodCx0PT09QnQ/WnQ6MCk7aWYocj09PTApcmV0dXJuIG51bGw7aWYociYzMHx8ciZ0LmV4cGlyZWRMYW5lc3x8ZSllPXhkKHQscik7ZWxzZXtlPXI7dmFyIGk9TWU7TWV8PTI7dmFyIG89T3coKTsoQnQhPT10fHxadCE9PWUpJiYobmk9bnVsbCxkcz1DdCgpKzUwMCxJbyh0LGUpKTtkbyB0cnl7JFQoKTticmVha31jYXRjaChzKXtSdyh0LHMpfXdoaWxlKCEwKTtTZygpLGdkLmN1cnJlbnQ9byxNZT1pLGJ0IT09bnVsbD9lPTA6KEJ0PW51bGwsWnQ9MCxlPVB0KX1pZihlIT09MCl7aWYoZT09PTImJihpPWdwKHQpLGkhPT0wJiYocj1pLGU9VnAodCxpKSkpLGU9PT0xKXRocm93IG49bnUsSW8odCwwKSxCaSh0LHIpLE5uKHQsQ3QoKSksbjtpZihlPT09NilCaSh0LHIpO2Vsc2V7aWYoaT10LmN1cnJlbnQuYWx0ZXJuYXRlLCEociYzMCkmJiFrVChpKSYmKGU9eGQodCxyKSxlPT09MiYmKG89Z3AodCksbyE9PTAmJihyPW8sZT1WcCh0LG8pKSksZT09PTEpKXRocm93IG49bnUsSW8odCwwKSxCaSh0LHIpLE5uKHQsQ3QoKSksbjtzd2l0Y2godC5maW5pc2hlZFdvcms9aSx0LmZpbmlzaGVkTGFuZXM9cixlKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKFUoMzQ1KSk7Y2FzZSAyOk5vKHQsa24sbmkpO2JyZWFrO2Nhc2UgMzppZihCaSh0LHIpLChyJjEzMDAyMzQyNCk9PT1yJiYoZT1JZys1MDAtQ3QoKSwxMDxlKSl7aWYodGQodCwwKSE9PTApYnJlYWs7aWYoaT10LnN1c3BlbmRlZExhbmVzLChpJnIpIT09cil7dm4oKSx0LnBpbmdlZExhbmVzfD10LnN1c3BlbmRlZExhbmVzJmk7YnJlYWt9dC50aW1lb3V0SGFuZGxlPUNwKE5vLmJpbmQobnVsbCx0LGtuLG5pKSxlKTticmVha31Obyh0LGtuLG5pKTticmVhaztjYXNlIDQ6aWYoQmkodCxyKSwociY0MTk0MjQwKT09PXIpYnJlYWs7Zm9yKGU9dC5ldmVudFRpbWVzLGk9LTE7MDxyOyl7dmFyIGw9MzEtU3Iocik7bz0xPDxsLGw9ZVtsXSxsPmkmJihpPWwpLHImPX5vfWlmKHI9aSxyPUN0KCktcixyPSgxMjA+cj8xMjA6NDgwPnI/NDgwOjEwODA+cj8xMDgwOjE5MjA+cj8xOTIwOjNlMz5yPzNlMzo0MzIwPnI/NDMyMDoxOTYwKkNUKHIvMTk2MCkpLXIsMTA8cil7dC50aW1lb3V0SGFuZGxlPUNwKE5vLmJpbmQobnVsbCx0LGtuLG5pKSxyKTticmVha31Obyh0LGtuLG5pKTticmVhaztjYXNlIDU6Tm8odCxrbixuaSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihVKDMyOSkpfX19cmV0dXJuIE5uKHQsQ3QoKSksdC5jYWxsYmFja05vZGU9PT1uP053LmJpbmQobnVsbCx0KTpudWxsfWZ1bmN0aW9uIFZwKHQsZSl7dmFyIG49a2E7cmV0dXJuIHQuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKElvKHQsZSkuZmxhZ3N8PTI1NiksdD14ZCh0LGUpLHQhPT0yJiYoZT1rbixrbj1uLGUhPT1udWxsJiZIcChlKSksdH1mdW5jdGlvbiBIcCh0KXtrbj09PW51bGw/a249dDprbi5wdXNoLmFwcGx5KGtuLHQpfWZ1bmN0aW9uIGtUKHQpe2Zvcih2YXIgZT10Ozspe2lmKGUuZmxhZ3MmMTYzODQpe3ZhciBuPWUudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxvPWkuZ2V0U25hcHNob3Q7aT1pLnZhbHVlO3RyeXtpZighYnIobygpLGkpKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj1lLmNoaWxkLGUuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj1lLGU9bjtlbHNle2lmKGU9PT10KWJyZWFrO2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8ZS5yZXR1cm49PT10KXJldHVybiEwO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gQmkodCxlKXtmb3IoZSY9fkRnLGUmPX5tZix0LnN1c3BlbmRlZExhbmVzfD1lLHQucGluZ2VkTGFuZXMmPX5lLHQ9dC5leHBpcmF0aW9uVGltZXM7MDxlOyl7dmFyIG49MzEtU3IoZSkscj0xPDxuO3Rbbl09LTEsZSY9fnJ9fWZ1bmN0aW9uIGcwKHQpe2lmKE1lJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTtRbCgpO3ZhciBlPXRkKHQsMCk7aWYoIShlJjEpKXJldHVybiBObih0LEN0KCkpLG51bGw7dmFyIG49eGQodCxlKTtpZih0LnRhZyE9PTAmJm49PT0yKXt2YXIgcj1ncCh0KTtyIT09MCYmKGU9cixuPVZwKHQscikpfWlmKG49PT0xKXRocm93IG49bnUsSW8odCwwKSxCaSh0LGUpLE5uKHQsQ3QoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihVKDM0NSkpO3JldHVybiB0LmZpbmlzaGVkV29yaz10LmN1cnJlbnQuYWx0ZXJuYXRlLHQuZmluaXNoZWRMYW5lcz1lLE5vKHQsa24sbmkpLE5uKHQsQ3QoKSksbnVsbH1mdW5jdGlvbiBqZyh0LGUpe3ZhciBuPU1lO01lfD0xO3RyeXtyZXR1cm4gdChlKX1maW5hbGx5e01lPW4sTWU9PT0wJiYoZHM9Q3QoKSs1MDAsZGYmJndvKCkpfX1mdW5jdGlvbiBZbyh0KXtIaSE9PW51bGwmJkhpLnRhZz09PTAmJiEoTWUmNikmJlFsKCk7dmFyIGU9TWU7TWV8PTE7dmFyIG49b3IudHJhbnNpdGlvbixyPVVlO3RyeXtpZihvci50cmFuc2l0aW9uPW51bGwsVWU9MSx0KXJldHVybiB0KCl9ZmluYWxseXtVZT1yLG9yLnRyYW5zaXRpb249bixNZT1lLCEoTWUmNikmJndvKCl9fWZ1bmN0aW9uIHpnKCl7RG49QmwuY3VycmVudCxpdChCbCl9ZnVuY3Rpb24gSW8odCxlKXt0LmZpbmlzaGVkV29yaz1udWxsLHQuZmluaXNoZWRMYW5lcz0wO3ZhciBuPXQudGltZW91dEhhbmRsZTtpZihuIT09LTEmJih0LnRpbWVvdXRIYW5kbGU9LTEsdFQobikpLGJ0IT09bnVsbClmb3Iobj1idC5yZXR1cm47biE9PW51bGw7KXt2YXIgcj1uO3N3aXRjaCh4ZyhyKSxyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJmxkKCk7YnJlYWs7Y2FzZSAzOnVzKCksaXQoJG4pLGl0KHJuKSxUZygpO2JyZWFrO2Nhc2UgNTokZyhyKTticmVhaztjYXNlIDQ6dXMoKTticmVhaztjYXNlIDEzOml0KGR0KTticmVhaztjYXNlIDE5Oml0KGR0KTticmVhaztjYXNlIDEwOkVnKHIudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOnpnKCl9bj1uLnJldHVybn1pZihCdD10LGJ0PXQ9dG8odC5jdXJyZW50LG51bGwpLFp0PURuPWUsUHQ9MCxudT1udWxsLERnPW1mPUdvPTAsa249a2E9bnVsbCxBbyE9PW51bGwpe2ZvcihlPTA7ZTxBby5sZW5ndGg7ZSsrKWlmKG49QW9bZV0scj1uLmludGVybGVhdmVkLHIhPT1udWxsKXtuLmludGVybGVhdmVkPW51bGw7dmFyIGk9ci5uZXh0LG89bi5wZW5kaW5nO2lmKG8hPT1udWxsKXt2YXIgbD1vLm5leHQ7by5uZXh0PWksci5uZXh0PWx9bi5wZW5kaW5nPXJ9QW89bnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBSdyh0LGUpe2Rve3ZhciBuPWJ0O3RyeXtpZihTZygpLERjLmN1cnJlbnQ9bWQscGQpe2Zvcih2YXIgcj1odC5tZW1vaXplZFN0YXRlO3IhPT1udWxsOyl7dmFyIGk9ci5xdWV1ZTtpIT09bnVsbCYmKGkucGVuZGluZz1udWxsKSxyPXIubmV4dH1wZD0hMX1pZihabz0wLER0PVJ0PWh0PW51bGwsRWE9ITEscWE9MCxMZy5jdXJyZW50PW51bGwsbj09PW51bGx8fG4ucmV0dXJuPT09bnVsbCl7UHQ9MSxudT1lLGJ0PW51bGw7YnJlYWt9ZTp7dmFyIG89dCxsPW4ucmV0dXJuLHM9bixhPWU7aWYoZT1adCxzLmZsYWdzfD0zMjc2OCxhIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgYS50aGVuPT0iZnVuY3Rpb24iKXt2YXIgdT1hLGM9cyxkPWMudGFnO2lmKCEoYy5tb2RlJjEpJiYoZD09PTB8fGQ9PT0xMXx8ZD09PTE1KSl7dmFyIGY9Yy5hbHRlcm5hdGU7Zj8oYy51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLGMubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsYy5sYW5lcz1mLmxhbmVzKTooYy51cGRhdGVRdWV1ZT1udWxsLGMubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgaD1yMChsKTtpZihoIT09bnVsbCl7aC5mbGFncyY9LTI1NyxpMChoLGwscyxvLGUpLGgubW9kZSYxJiZuMChvLHUsZSksZT1oLGE9dTt2YXIgZz1lLnVwZGF0ZVF1ZXVlO2lmKGc9PT1udWxsKXt2YXIgbT1uZXcgU2V0O20uYWRkKGEpLGUudXBkYXRlUXVldWU9bX1lbHNlIGcuYWRkKGEpO2JyZWFrIGV9ZWxzZXtpZighKGUmMSkpe24wKG8sdSxlKSxGZygpO2JyZWFrIGV9YT1FcnJvcihVKDQyNikpfX1lbHNlIGlmKG90JiZzLm1vZGUmMSl7dmFyIHc9cjAobCk7aWYodyE9PW51bGwpeyEody5mbGFncyY2NTUzNikmJih3LmZsYWdzfD0yNTYpLGkwKHcsbCxzLG8sZSksX2coY3MoYSxzKSk7YnJlYWsgZX19bz1hPWNzKGEscyksUHQhPT00JiYoUHQ9Miksa2E9PT1udWxsP2thPVtvXTprYS5wdXNoKG8pLG89bDtkb3tzd2l0Y2goby50YWcpe2Nhc2UgMzpvLmZsYWdzfD02NTUzNixlJj0tZSxvLmxhbmVzfD1lO3ZhciB2PWh3KG8sYSxlKTtZeShvLHYpO2JyZWFrIGU7Y2FzZSAxOnM9YTt2YXIgeT1vLnR5cGUsXz1vLnN0YXRlTm9kZTtpZighKG8uZmxhZ3MmMTI4KSYmKHR5cGVvZiB5LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8XyE9PW51bGwmJnR5cGVvZiBfLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYocWk9PT1udWxsfHwhcWkuaGFzKF8pKSkpe28uZmxhZ3N8PTY1NTM2LGUmPS1lLG8ubGFuZXN8PWU7dmFyIFM9cHcobyxzLGUpO1l5KG8sUyk7YnJlYWsgZX19bz1vLnJldHVybn13aGlsZShvIT09bnVsbCl9QXcobil9Y2F0Y2goRSl7ZT1FLGJ0PT09biYmbiE9PW51bGwmJihidD1uPW4ucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSghMCl9ZnVuY3Rpb24gT3coKXt2YXIgdD1nZC5jdXJyZW50O3JldHVybiBnZC5jdXJyZW50PW1kLHQ9PT1udWxsP21kOnR9ZnVuY3Rpb24gRmcoKXsoUHQ9PT0wfHxQdD09PTN8fFB0PT09MikmJihQdD00KSxCdD09PW51bGx8fCEoR28mMjY4NDM1NDU1KSYmIShtZiYyNjg0MzU0NTUpfHxCaShCdCxadCl9ZnVuY3Rpb24geGQodCxlKXt2YXIgbj1NZTtNZXw9Mjt2YXIgcj1PdygpOyhCdCE9PXR8fFp0IT09ZSkmJihuaT1udWxsLElvKHQsZSkpO2RvIHRyeXtiVCgpO2JyZWFrfWNhdGNoKGkpe1J3KHQsaSl9d2hpbGUoITApO2lmKFNnKCksTWU9bixnZC5jdXJyZW50PXIsYnQhPT1udWxsKXRocm93IEVycm9yKFUoMjYxKSk7cmV0dXJuIEJ0PW51bGwsWnQ9MCxQdH1mdW5jdGlvbiBiVCgpe2Zvcig7YnQhPT1udWxsOylQdyhidCl9ZnVuY3Rpb24gJFQoKXtmb3IoO2J0IT09bnVsbCYmIVFiKCk7KVB3KGJ0KX1mdW5jdGlvbiBQdyh0KXt2YXIgZT1Mdyh0LmFsdGVybmF0ZSx0LERuKTt0Lm1lbW9pemVkUHJvcHM9dC5wZW5kaW5nUHJvcHMsZT09PW51bGw/QXcodCk6YnQ9ZSxMZy5jdXJyZW50PW51bGx9ZnVuY3Rpb24gQXcodCl7dmFyIGU9dDtkb3t2YXIgbj1lLmFsdGVybmF0ZTtpZih0PWUucmV0dXJuLGUuZmxhZ3MmMzI3Njgpe2lmKG49X1QobixlKSxuIT09bnVsbCl7bi5mbGFncyY9MzI3NjcsYnQ9bjtyZXR1cm59aWYodCE9PW51bGwpdC5mbGFnc3w9MzI3NjgsdC5zdWJ0cmVlRmxhZ3M9MCx0LmRlbGV0aW9ucz1udWxsO2Vsc2V7UHQ9NixidD1udWxsO3JldHVybn19ZWxzZSBpZihuPXhUKG4sZSxEbiksbiE9PW51bGwpe2J0PW47cmV0dXJufWlmKGU9ZS5zaWJsaW5nLGUhPT1udWxsKXtidD1lO3JldHVybn1idD1lPXR9d2hpbGUoZSE9PW51bGwpO1B0PT09MCYmKFB0PTUpfWZ1bmN0aW9uIE5vKHQsZSxuKXt2YXIgcj1VZSxpPW9yLnRyYW5zaXRpb247dHJ5e29yLnRyYW5zaXRpb249bnVsbCxVZT0xLFRUKHQsZSxuLHIpfWZpbmFsbHl7b3IudHJhbnNpdGlvbj1pLFVlPXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gVFQodCxlLG4scil7ZG8gUWwoKTt3aGlsZShIaSE9PW51bGwpO2lmKE1lJjYpdGhyb3cgRXJyb3IoVSgzMjcpKTtuPXQuZmluaXNoZWRXb3JrO3ZhciBpPXQuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZih0LmZpbmlzaGVkV29yaz1udWxsLHQuZmluaXNoZWRMYW5lcz0wLG49PT10LmN1cnJlbnQpdGhyb3cgRXJyb3IoVSgxNzcpKTt0LmNhbGxiYWNrTm9kZT1udWxsLHQuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBvPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKGEkKHQsbyksdD09PUJ0JiYoYnQ9QnQ9bnVsbCxadD0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fGZjfHwoZmM9ITAsRHcoZWQsZnVuY3Rpb24oKXtyZXR1cm4gUWwoKSxudWxsfSkpLG89KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8byl7bz1vci50cmFuc2l0aW9uLG9yLnRyYW5zaXRpb249bnVsbDt2YXIgbD1VZTtVZT0xO3ZhciBzPU1lO01lfD00LExnLmN1cnJlbnQ9bnVsbCxTVCh0LG4pLCR3KG4sdCksRyQoU3ApLG5kPSEhd3AsU3A9d3A9bnVsbCx0LmN1cnJlbnQ9bixFVChuKSxxYigpLE1lPXMsVWU9bCxvci50cmFuc2l0aW9uPW99ZWxzZSB0LmN1cnJlbnQ9bjtpZihmYyYmKGZjPSExLEhpPXQseWQ9aSksbz10LnBlbmRpbmdMYW5lcyxvPT09MCYmKHFpPW51bGwpLG4kKG4uc3RhdGVOb2RlKSxObih0LEN0KCkpLGUhPT1udWxsKWZvcihyPXQub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPGUubGVuZ3RoO24rKylpPWVbbl0scihpLnZhbHVlLHtjb21wb25lbnRTdGFjazppLnN0YWNrLGRpZ2VzdDppLmRpZ2VzdH0pO2lmKHZkKXRocm93IHZkPSExLHQ9VXAsVXA9bnVsbCx0O3JldHVybiB5ZCYxJiZ0LnRhZyE9PTAmJlFsKCksbz10LnBlbmRpbmdMYW5lcyxvJjE/dD09PVdwP2JhKys6KGJhPTAsV3A9dCk6YmE9MCx3bygpLG51bGx9ZnVuY3Rpb24gUWwoKXtpZihIaSE9PW51bGwpe3ZhciB0PWYxKHlkKSxlPW9yLnRyYW5zaXRpb24sbj1VZTt0cnl7aWYob3IudHJhbnNpdGlvbj1udWxsLFVlPTE2PnQ/MTY6dCxIaT09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZih0PUhpLEhpPW51bGwseWQ9MCxNZSY2KXRocm93IEVycm9yKFUoMzMxKSk7dmFyIGk9TWU7Zm9yKE1lfD00LGVlPXQuY3VycmVudDtlZSE9PW51bGw7KXt2YXIgbz1lZSxsPW8uY2hpbGQ7aWYoZWUuZmxhZ3MmMTYpe3ZhciBzPW8uZGVsZXRpb25zO2lmKHMhPT1udWxsKXtmb3IodmFyIGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIHU9c1thXTtmb3IoZWU9dTtlZSE9PW51bGw7KXt2YXIgYz1lZTtzd2l0Y2goYy50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Q2EoOCxjLG8pfXZhciBkPWMuY2hpbGQ7aWYoZCE9PW51bGwpZC5yZXR1cm49YyxlZT1kO2Vsc2UgZm9yKDtlZSE9PW51bGw7KXtjPWVlO3ZhciBmPWMuc2libGluZyxoPWMucmV0dXJuO2lmKEN3KGMpLGM9PT11KXtlZT1udWxsO2JyZWFrfWlmKGYhPT1udWxsKXtmLnJldHVybj1oLGVlPWY7YnJlYWt9ZWU9aH19fXZhciBnPW8uYWx0ZXJuYXRlO2lmKGchPT1udWxsKXt2YXIgbT1nLmNoaWxkO2lmKG0hPT1udWxsKXtnLmNoaWxkPW51bGw7ZG97dmFyIHc9bS5zaWJsaW5nO20uc2libGluZz1udWxsLG09d313aGlsZShtIT09bnVsbCl9fWVlPW99fWlmKG8uc3VidHJlZUZsYWdzJjIwNjQmJmwhPT1udWxsKWwucmV0dXJuPW8sZWU9bDtlbHNlIGU6Zm9yKDtlZSE9PW51bGw7KXtpZihvPWVlLG8uZmxhZ3MmMjA0OClzd2l0Y2goby50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Q2EoOSxvLG8ucmV0dXJuKX12YXIgdj1vLnNpYmxpbmc7aWYodiE9PW51bGwpe3YucmV0dXJuPW8ucmV0dXJuLGVlPXY7YnJlYWsgZX1lZT1vLnJldHVybn19dmFyIHk9dC5jdXJyZW50O2ZvcihlZT15O2VlIT09bnVsbDspe2w9ZWU7dmFyIF89bC5jaGlsZDtpZihsLnN1YnRyZWVGbGFncyYyMDY0JiZfIT09bnVsbClfLnJldHVybj1sLGVlPV87ZWxzZSBlOmZvcihsPXk7ZWUhPT1udWxsOyl7aWYocz1lZSxzLmZsYWdzJjIwNDgpdHJ5e3N3aXRjaChzLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpwZig5LHMpfX1jYXRjaChFKXt2dChzLHMucmV0dXJuLEUpfWlmKHM9PT1sKXtlZT1udWxsO2JyZWFrIGV9dmFyIFM9cy5zaWJsaW5nO2lmKFMhPT1udWxsKXtTLnJldHVybj1zLnJldHVybixlZT1TO2JyZWFrIGV9ZWU9cy5yZXR1cm59fWlmKE1lPWksd28oKSxGciYmdHlwZW9mIEZyLm9uUG9zdENvbW1pdEZpYmVyUm9vdD09ImZ1bmN0aW9uIil0cnl7RnIub25Qb3N0Q29tbWl0RmliZXJSb290KGxmLHQpfWNhdGNoe31yPSEwfXJldHVybiByfWZpbmFsbHl7VWU9bixvci50cmFuc2l0aW9uPWV9fXJldHVybiExfWZ1bmN0aW9uIHYwKHQsZSxuKXtlPWNzKG4sZSksZT1odyh0LGUsMSksdD1RaSh0LGUsMSksZT12bigpLHQhPT1udWxsJiYoQXUodCwxLGUpLE5uKHQsZSkpfWZ1bmN0aW9uIHZ0KHQsZSxuKXtpZih0LnRhZz09PTMpdjAodCx0LG4pO2Vsc2UgZm9yKDtlIT09bnVsbDspe2lmKGUudGFnPT09Myl7djAoZSx0LG4pO2JyZWFrfWVsc2UgaWYoZS50YWc9PT0xKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0eXBlb2YgZS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIHIuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihxaT09PW51bGx8fCFxaS5oYXMocikpKXt0PWNzKG4sdCksdD1wdyhlLHQsMSksZT1RaShlLHQsMSksdD12bigpLGUhPT1udWxsJiYoQXUoZSwxLHQpLE5uKGUsdCkpO2JyZWFrfX1lPWUucmV0dXJufX1mdW5jdGlvbiBOVCh0LGUsbil7dmFyIHI9dC5waW5nQ2FjaGU7ciE9PW51bGwmJnIuZGVsZXRlKGUpLGU9dm4oKSx0LnBpbmdlZExhbmVzfD10LnN1c3BlbmRlZExhbmVzJm4sQnQ9PT10JiYoWnQmbik9PT1uJiYoUHQ9PT00fHxQdD09PTMmJihadCYxMzAwMjM0MjQpPT09WnQmJjUwMD5DdCgpLUlnP0lvKHQsMCk6RGd8PW4pLE5uKHQsZSl9ZnVuY3Rpb24gTXcodCxlKXtlPT09MCYmKHQubW9kZSYxPyhlPW5jLG5jPDw9MSwhKG5jJjEzMDAyMzQyNCkmJihuYz00MTk0MzA0KSk6ZT0xKTt2YXIgbj12bigpO3Q9cGkodCxlKSx0IT09bnVsbCYmKEF1KHQsZSxuKSxObih0LG4pKX1mdW5jdGlvbiBSVCh0KXt2YXIgZT10Lm1lbW9pemVkU3RhdGUsbj0wO2UhPT1udWxsJiYobj1lLnJldHJ5TGFuZSksTXcodCxuKX1mdW5jdGlvbiBPVCh0LGUpe3ZhciBuPTA7c3dpdGNoKHQudGFnKXtjYXNlIDEzOnZhciByPXQuc3RhdGVOb2RlLGk9dC5tZW1vaXplZFN0YXRlO2khPT1udWxsJiYobj1pLnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTpyPXQuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoVSgzMTQpKX1yIT09bnVsbCYmci5kZWxldGUoZSksTXcodCxuKX12YXIgTHc7THc9ZnVuY3Rpb24odCxlLG4pe2lmKHQhPT1udWxsKWlmKHQubWVtb2l6ZWRQcm9wcyE9PWUucGVuZGluZ1Byb3BzfHwkbi5jdXJyZW50KWJuPSEwO2Vsc2V7aWYoISh0LmxhbmVzJm4pJiYhKGUuZmxhZ3MmMTI4KSlyZXR1cm4gYm49ITEseVQodCxlLG4pO2JuPSEhKHQuZmxhZ3MmMTMxMDcyKX1lbHNlIGJuPSExLG90JiZlLmZsYWdzJjEwNDg1NzYmJmoxKGUsdWQsZS5pbmRleCk7c3dpdGNoKGUubGFuZXM9MCxlLnRhZyl7Y2FzZSAyOnZhciByPWUudHlwZTtqYyh0LGUpLHQ9ZS5wZW5kaW5nUHJvcHM7dmFyIGk9bHMoZSxybi5jdXJyZW50KTtKbChlLG4pLGk9UmcobnVsbCxlLHIsdCxpLG4pO3ZhciBvPU9nKCk7cmV0dXJuIGUuZmxhZ3N8PTEsdHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbCYmdHlwZW9mIGkucmVuZGVyPT0iZnVuY3Rpb24iJiZpLiQkdHlwZW9mPT09dm9pZCAwPyhlLnRhZz0xLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxUbihyKT8obz0hMCxzZChlKSk6bz0hMSxlLm1lbW9pemVkU3RhdGU9aS5zdGF0ZSE9PW51bGwmJmkuc3RhdGUhPT12b2lkIDA/aS5zdGF0ZTpudWxsLGtnKGUpLGkudXBkYXRlcj1mZixlLnN0YXRlTm9kZT1pLGkuX3JlYWN0SW50ZXJuYWxzPWUsT3AoZSxyLHQsbiksZT1NcChudWxsLGUsciwhMCxvLG4pKTooZS50YWc9MCxvdCYmbyYmeWcoZSksdW4obnVsbCxlLGksbiksZT1lLmNoaWxkKSxlO2Nhc2UgMTY6cj1lLmVsZW1lbnRUeXBlO2U6e3N3aXRjaChqYyh0LGUpLHQ9ZS5wZW5kaW5nUHJvcHMsaT1yLl9pbml0LHI9aShyLl9wYXlsb2FkKSxlLnR5cGU9cixpPWUudGFnPUFUKHIpLHQ9Z3Iocix0KSxpKXtjYXNlIDA6ZT1BcChudWxsLGUscix0LG4pO2JyZWFrIGU7Y2FzZSAxOmU9czAobnVsbCxlLHIsdCxuKTticmVhayBlO2Nhc2UgMTE6ZT1vMChudWxsLGUscix0LG4pO2JyZWFrIGU7Y2FzZSAxNDplPWwwKG51bGwsZSxyLGdyKHIudHlwZSx0KSxuKTticmVhayBlfXRocm93IEVycm9yKFUoMzA2LHIsIiIpKX1yZXR1cm4gZTtjYXNlIDA6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksQXAodCxlLHIsaSxuKTtjYXNlIDE6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksczAodCxlLHIsaSxuKTtjYXNlIDM6ZTp7aWYoeXcoZSksdD09PW51bGwpdGhyb3cgRXJyb3IoVSgzODcpKTtyPWUucGVuZGluZ1Byb3BzLG89ZS5tZW1vaXplZFN0YXRlLGk9by5lbGVtZW50LFUxKHQsZSksZmQoZSxyLG51bGwsbik7dmFyIGw9ZS5tZW1vaXplZFN0YXRlO2lmKHI9bC5lbGVtZW50LG8uaXNEZWh5ZHJhdGVkKWlmKG89e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6bC5jYWNoZSxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOmwucGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyx0cmFuc2l0aW9uczpsLnRyYW5zaXRpb25zfSxlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1vLGUubWVtb2l6ZWRTdGF0ZT1vLGUuZmxhZ3MmMjU2KXtpPWNzKEVycm9yKFUoNDIzKSksZSksZT1hMCh0LGUscixuLGkpO2JyZWFrIGV9ZWxzZSBpZihyIT09aSl7aT1jcyhFcnJvcihVKDQyNCkpLGUpLGU9YTAodCxlLHIsbixpKTticmVhayBlfWVsc2UgZm9yKHpuPUppKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCksRm49ZSxvdD0hMCx4cj1udWxsLG49SzEoZSxudWxsLHIsbiksZS5jaGlsZD1uO247KW4uZmxhZ3M9bi5mbGFncyYtM3w0MDk2LG49bi5zaWJsaW5nO2Vsc2V7aWYoc3MoKSxyPT09aSl7ZT1taSh0LGUsbik7YnJlYWsgZX11bih0LGUscixuKX1lPWUuY2hpbGR9cmV0dXJuIGU7Y2FzZSA1OnJldHVybiBaMShlKSx0PT09bnVsbCYmVHAoZSkscj1lLnR5cGUsaT1lLnBlbmRpbmdQcm9wcyxvPXQhPT1udWxsP3QubWVtb2l6ZWRQcm9wczpudWxsLGw9aS5jaGlsZHJlbixFcChyLGkpP2w9bnVsbDpvIT09bnVsbCYmRXAocixvKSYmKGUuZmxhZ3N8PTMyKSx2dyh0LGUpLHVuKHQsZSxsLG4pLGUuY2hpbGQ7Y2FzZSA2OnJldHVybiB0PT09bnVsbCYmVHAoZSksbnVsbDtjYXNlIDEzOnJldHVybiB4dyh0LGUsbik7Y2FzZSA0OnJldHVybiBiZyhlLGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/ZS5jaGlsZD1hcyhlLG51bGwscixuKTp1bih0LGUscixuKSxlLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksbzAodCxlLHIsaSxuKTtjYXNlIDc6cmV0dXJuIHVuKHQsZSxlLnBlbmRpbmdQcm9wcyxuKSxlLmNoaWxkO2Nhc2UgODpyZXR1cm4gdW4odCxlLGUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLGUuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gdW4odCxlLGUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLGUuY2hpbGQ7Y2FzZSAxMDplOntpZihyPWUudHlwZS5fY29udGV4dCxpPWUucGVuZGluZ1Byb3BzLG89ZS5tZW1vaXplZFByb3BzLGw9aS52YWx1ZSxYZShjZCxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1sLG8hPT1udWxsKWlmKGJyKG8udmFsdWUsbCkpe2lmKG8uY2hpbGRyZW49PT1pLmNoaWxkcmVuJiYhJG4uY3VycmVudCl7ZT1taSh0LGUsbik7YnJlYWsgZX19ZWxzZSBmb3Iobz1lLmNoaWxkLG8hPT1udWxsJiYoby5yZXR1cm49ZSk7byE9PW51bGw7KXt2YXIgcz1vLmRlcGVuZGVuY2llcztpZihzIT09bnVsbCl7bD1vLmNoaWxkO2Zvcih2YXIgYT1zLmZpcnN0Q29udGV4dDthIT09bnVsbDspe2lmKGEuY29udGV4dD09PXIpe2lmKG8udGFnPT09MSl7YT1jaSgtMSxuJi1uKSxhLnRhZz0yO3ZhciB1PW8udXBkYXRlUXVldWU7aWYodSE9PW51bGwpe3U9dS5zaGFyZWQ7dmFyIGM9dS5wZW5kaW5nO2M9PT1udWxsP2EubmV4dD1hOihhLm5leHQ9Yy5uZXh0LGMubmV4dD1hKSx1LnBlbmRpbmc9YX19by5sYW5lc3w9bixhPW8uYWx0ZXJuYXRlLGEhPT1udWxsJiYoYS5sYW5lc3w9biksTnAoby5yZXR1cm4sbixlKSxzLmxhbmVzfD1uO2JyZWFrfWE9YS5uZXh0fX1lbHNlIGlmKG8udGFnPT09MTApbD1vLnR5cGU9PT1lLnR5cGU/bnVsbDpvLmNoaWxkO2Vsc2UgaWYoby50YWc9PT0xOCl7aWYobD1vLnJldHVybixsPT09bnVsbCl0aHJvdyBFcnJvcihVKDM0MSkpO2wubGFuZXN8PW4scz1sLmFsdGVybmF0ZSxzIT09bnVsbCYmKHMubGFuZXN8PW4pLE5wKGwsbixlKSxsPW8uc2libGluZ31lbHNlIGw9by5jaGlsZDtpZihsIT09bnVsbClsLnJldHVybj1vO2Vsc2UgZm9yKGw9bztsIT09bnVsbDspe2lmKGw9PT1lKXtsPW51bGw7YnJlYWt9aWYobz1sLnNpYmxpbmcsbyE9PW51bGwpe28ucmV0dXJuPWwucmV0dXJuLGw9bzticmVha31sPWwucmV0dXJufW89bH11bih0LGUsaS5jaGlsZHJlbixuKSxlPWUuY2hpbGR9cmV0dXJuIGU7Y2FzZSA5OnJldHVybiBpPWUudHlwZSxyPWUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLEpsKGUsbiksaT1scihpKSxyPXIoaSksZS5mbGFnc3w9MSx1bih0LGUscixuKSxlLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHI9ZS50eXBlLGk9Z3IocixlLnBlbmRpbmdQcm9wcyksaT1ncihyLnR5cGUsaSksbDAodCxlLHIsaSxuKTtjYXNlIDE1OnJldHVybiBtdyh0LGUsZS50eXBlLGUucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTc6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksamModCxlKSxlLnRhZz0xLFRuKHIpPyh0PSEwLHNkKGUpKTp0PSExLEpsKGUsbiksVjEoZSxyLGkpLE9wKGUscixpLG4pLE1wKG51bGwsZSxyLCEwLHQsbik7Y2FzZSAxOTpyZXR1cm4gX3codCxlLG4pO2Nhc2UgMjI6cmV0dXJuIGd3KHQsZSxuKX10aHJvdyBFcnJvcihVKDE1NixlLnRhZykpfTtmdW5jdGlvbiBEdyh0LGUpe3JldHVybiBhMSh0LGUpfWZ1bmN0aW9uIFBUKHQsZSxuLHIpe3RoaXMudGFnPXQsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPWUsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5yKHQsZSxuLHIpe3JldHVybiBuZXcgUFQodCxlLG4scil9ZnVuY3Rpb24gQmcodCl7cmV0dXJuIHQ9dC5wcm90b3R5cGUsISghdHx8IXQuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gQVQodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIEJnKHQpPzE6MDtpZih0IT1udWxsKXtpZih0PXQuJCR0eXBlb2YsdD09PWxnKXJldHVybiAxMTtpZih0PT09c2cpcmV0dXJuIDE0fXJldHVybiAyfWZ1bmN0aW9uIHRvKHQsZSl7dmFyIG49dC5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhuPW5yKHQudGFnLGUsdC5rZXksdC5tb2RlKSxuLmVsZW1lbnRUeXBlPXQuZWxlbWVudFR5cGUsbi50eXBlPXQudHlwZSxuLnN0YXRlTm9kZT10LnN0YXRlTm9kZSxuLmFsdGVybmF0ZT10LHQuYWx0ZXJuYXRlPW4pOihuLnBlbmRpbmdQcm9wcz1lLG4udHlwZT10LnR5cGUsbi5mbGFncz0wLG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksbi5mbGFncz10LmZsYWdzJjE0NjgwMDY0LG4uY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMsbi5sYW5lcz10LmxhbmVzLG4uY2hpbGQ9dC5jaGlsZCxuLm1lbW9pemVkUHJvcHM9dC5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT10Lm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT10LnVwZGF0ZVF1ZXVlLGU9dC5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9ZT09PW51bGw/bnVsbDp7bGFuZXM6ZS5sYW5lcyxmaXJzdENvbnRleHQ6ZS5maXJzdENvbnRleHR9LG4uc2libGluZz10LnNpYmxpbmcsbi5pbmRleD10LmluZGV4LG4ucmVmPXQucmVmLG59ZnVuY3Rpb24gQmModCxlLG4scixpLG8pe3ZhciBsPTI7aWYocj10LHR5cGVvZiB0PT0iZnVuY3Rpb24iKUJnKHQpJiYobD0xKTtlbHNlIGlmKHR5cGVvZiB0PT0ic3RyaW5nIilsPTU7ZWxzZSBlOnN3aXRjaCh0KXtjYXNlIE9sOnJldHVybiBqbyhuLmNoaWxkcmVuLGksbyxlKTtjYXNlIG9nOmw9OCxpfD04O2JyZWFrO2Nhc2UgdHA6cmV0dXJuIHQ9bnIoMTIsbixlLGl8MiksdC5lbGVtZW50VHlwZT10cCx0LmxhbmVzPW8sdDtjYXNlIG5wOnJldHVybiB0PW5yKDEzLG4sZSxpKSx0LmVsZW1lbnRUeXBlPW5wLHQubGFuZXM9byx0O2Nhc2UgcnA6cmV0dXJuIHQ9bnIoMTksbixlLGkpLHQuZWxlbWVudFR5cGU9cnAsdC5sYW5lcz1vLHQ7Y2FzZSBIXzpyZXR1cm4gZ2YobixpLG8sZSk7ZGVmYXVsdDppZih0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsKXN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIFdfOmw9MTA7YnJlYWsgZTtjYXNlIFZfOmw9OTticmVhayBlO2Nhc2UgbGc6bD0xMTticmVhayBlO2Nhc2Ugc2c6bD0xNDticmVhayBlO2Nhc2UgSWk6bD0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihVKDEzMCx0PT1udWxsP3Q6dHlwZW9mIHQsIiIpKX1yZXR1cm4gZT1ucihsLG4sZSxpKSxlLmVsZW1lbnRUeXBlPXQsZS50eXBlPXIsZS5sYW5lcz1vLGV9ZnVuY3Rpb24gam8odCxlLG4scil7cmV0dXJuIHQ9bnIoNyx0LHIsZSksdC5sYW5lcz1uLHR9ZnVuY3Rpb24gZ2YodCxlLG4scil7cmV0dXJuIHQ9bnIoMjIsdCxyLGUpLHQuZWxlbWVudFR5cGU9SF8sdC5sYW5lcz1uLHQuc3RhdGVOb2RlPXtpc0hpZGRlbjohMX0sdH1mdW5jdGlvbiBOaCh0LGUsbil7cmV0dXJuIHQ9bnIoNix0LG51bGwsZSksdC5sYW5lcz1uLHR9ZnVuY3Rpb24gUmgodCxlLG4pe3JldHVybiBlPW5yKDQsdC5jaGlsZHJlbiE9PW51bGw/dC5jaGlsZHJlbjpbXSx0LmtleSxlKSxlLmxhbmVzPW4sZS5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86dC5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOnQuaW1wbGVtZW50YXRpb259LGV9ZnVuY3Rpb24gTVQodCxlLG4scixpKXt0aGlzLnRhZz1lLHRoaXMuY29udGFpbmVySW5mbz10LHRoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXZlbnRUaW1lcz1jaCgwKSx0aGlzLmV4cGlyYXRpb25UaW1lcz1jaCgtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wLHRoaXMuZW50YW5nbGVtZW50cz1jaCgwKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uUmVjb3ZlcmFibGVFcnJvcj1pLHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfWZ1bmN0aW9uIFVnKHQsZSxuLHIsaSxvLGwscyxhKXtyZXR1cm4gdD1uZXcgTVQodCxlLG4scyxhKSxlPT09MT8oZT0xLG89PT0hMCYmKGV8PTgpKTplPTAsbz1ucigzLG51bGwsbnVsbCxlKSx0LmN1cnJlbnQ9byxvLnN0YXRlTm9kZT10LG8ubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9LGtnKG8pLHR9ZnVuY3Rpb24gTFQodCxlLG4pe3ZhciByPTM8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO3JldHVybnskJHR5cGVvZjpSbCxrZXk6cj09bnVsbD9udWxsOiIiK3IsY2hpbGRyZW46dCxjb250YWluZXJJbmZvOmUsaW1wbGVtZW50YXRpb246bn19ZnVuY3Rpb24gSXcodCl7aWYoIXQpcmV0dXJuIGxvO3Q9dC5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYoc2wodCkhPT10fHx0LnRhZyE9PTEpdGhyb3cgRXJyb3IoVSgxNzApKTt2YXIgZT10O2Rve3N3aXRjaChlLnRhZyl7Y2FzZSAzOmU9ZS5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZihUbihlLnR5cGUpKXtlPWUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fWU9ZS5yZXR1cm59d2hpbGUoZSE9PW51bGwpO3Rocm93IEVycm9yKFUoMTcxKSl9aWYodC50YWc9PT0xKXt2YXIgbj10LnR5cGU7aWYoVG4obikpcmV0dXJuIEQxKHQsbixlKX1yZXR1cm4gZX1mdW5jdGlvbiBqdyh0LGUsbixyLGksbyxsLHMsYSl7cmV0dXJuIHQ9VWcobixyLCEwLHQsaSxvLGwscyxhKSx0LmNvbnRleHQ9SXcobnVsbCksbj10LmN1cnJlbnQscj12bigpLGk9ZW8obiksbz1jaShyLGkpLG8uY2FsbGJhY2s9ZT8/bnVsbCxRaShuLG8saSksdC5jdXJyZW50LmxhbmVzPWksQXUodCxpLHIpLE5uKHQsciksdH1mdW5jdGlvbiB2Zih0LGUsbixyKXt2YXIgaT1lLmN1cnJlbnQsbz12bigpLGw9ZW8oaSk7cmV0dXJuIG49SXcobiksZS5jb250ZXh0PT09bnVsbD9lLmNvbnRleHQ9bjplLnBlbmRpbmdDb250ZXh0PW4sZT1jaShvLGwpLGUucGF5bG9hZD17ZWxlbWVudDp0fSxyPXI9PT12b2lkIDA/bnVsbDpyLHIhPT1udWxsJiYoZS5jYWxsYmFjaz1yKSx0PVFpKGksZSxsKSx0IT09bnVsbCYmKEVyKHQsaSxsLG8pLExjKHQsaSxsKSksbH1mdW5jdGlvbiBfZCh0KXtpZih0PXQuY3VycmVudCwhdC5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2godC5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gdC5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gdC5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIHkwKHQsZSl7aWYodD10Lm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJnQuZGVoeWRyYXRlZCE9PW51bGwpe3ZhciBuPXQucmV0cnlMYW5lO3QucmV0cnlMYW5lPW4hPT0wJiZuPGU/bjplfX1mdW5jdGlvbiBXZyh0LGUpe3kwKHQsZSksKHQ9dC5hbHRlcm5hdGUpJiZ5MCh0LGUpfWZ1bmN0aW9uIERUKCl7cmV0dXJuIG51bGx9dmFyIHp3PXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbih0KXtjb25zb2xlLmVycm9yKHQpfTtmdW5jdGlvbiBWZyh0KXt0aGlzLl9pbnRlcm5hbFJvb3Q9dH15Zi5wcm90b3R5cGUucmVuZGVyPVZnLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGU9PT1udWxsKXRocm93IEVycm9yKFUoNDA5KSk7dmYodCxlLG51bGwsbnVsbCl9O3lmLnByb3RvdHlwZS51bm1vdW50PVZnLnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgZT10LmNvbnRhaW5lckluZm87WW8oZnVuY3Rpb24oKXt2ZihudWxsLHQsbnVsbCxudWxsKX0pLGVbaGldPW51bGx9fTtmdW5jdGlvbiB5Zih0KXt0aGlzLl9pbnRlcm5hbFJvb3Q9dH15Zi5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9bTEoKTt0PXtibG9ja2VkT246bnVsbCx0YXJnZXQ6dCxwcmlvcml0eTplfTtmb3IodmFyIG49MDtuPEZpLmxlbmd0aCYmZSE9PTAmJmU8Rmlbbl0ucHJpb3JpdHk7bisrKTtGaS5zcGxpY2UobiwwLHQpLG49PT0wJiZ2MSh0KX19O2Z1bmN0aW9uIEhnKHQpe3JldHVybiEoIXR8fHQubm9kZVR5cGUhPT0xJiZ0Lm5vZGVUeXBlIT09OSYmdC5ub2RlVHlwZSE9PTExKX1mdW5jdGlvbiB4Zih0KXtyZXR1cm4hKCF0fHx0Lm5vZGVUeXBlIT09MSYmdC5ub2RlVHlwZSE9PTkmJnQubm9kZVR5cGUhPT0xMSYmKHQubm9kZVR5cGUhPT04fHx0Lm5vZGVWYWx1ZSE9PSIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIikpfWZ1bmN0aW9uIHgwKCl7fWZ1bmN0aW9uIElUKHQsZSxuLHIsaSl7aWYoaSl7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBvPXI7cj1mdW5jdGlvbigpe3ZhciB1PV9kKGwpO28uY2FsbCh1KX19dmFyIGw9ancoZSxyLHQsMCxudWxsLCExLCExLCIiLHgwKTtyZXR1cm4gdC5fcmVhY3RSb290Q29udGFpbmVyPWwsdFtoaV09bC5jdXJyZW50LEdhKHQubm9kZVR5cGU9PT04P3QucGFyZW50Tm9kZTp0KSxZbygpLGx9Zm9yKDtpPXQubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKGkpO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgcz1yO3I9ZnVuY3Rpb24oKXt2YXIgdT1fZChhKTtzLmNhbGwodSl9fXZhciBhPVVnKHQsMCwhMSxudWxsLG51bGwsITEsITEsIiIseDApO3JldHVybiB0Ll9yZWFjdFJvb3RDb250YWluZXI9YSx0W2hpXT1hLmN1cnJlbnQsR2EodC5ub2RlVHlwZT09PTg/dC5wYXJlbnROb2RlOnQpLFlvKGZ1bmN0aW9uKCl7dmYoZSxhLG4scil9KSxhfWZ1bmN0aW9uIF9mKHQsZSxuLHIsaSl7dmFyIG89bi5fcmVhY3RSb290Q29udGFpbmVyO2lmKG8pe3ZhciBsPW87aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpe3ZhciBzPWk7aT1mdW5jdGlvbigpe3ZhciBhPV9kKGwpO3MuY2FsbChhKX19dmYoZSxsLHQsaSl9ZWxzZSBsPUlUKG4sZSx0LGkscik7cmV0dXJuIF9kKGwpfWgxPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnZhciBlPXQuc3RhdGVOb2RlO2lmKGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIG49ZmEoZS5wZW5kaW5nTGFuZXMpO24hPT0wJiYoY2coZSxufDEpLE5uKGUsQ3QoKSksIShNZSY2KSYmKGRzPUN0KCkrNTAwLHdvKCkpKX1icmVhaztjYXNlIDEzOllvKGZ1bmN0aW9uKCl7dmFyIHI9cGkodCwxKTtpZihyIT09bnVsbCl7dmFyIGk9dm4oKTtFcihyLHQsMSxpKX19KSxXZyh0LDEpfX07ZGc9ZnVuY3Rpb24odCl7aWYodC50YWc9PT0xMyl7dmFyIGU9cGkodCwxMzQyMTc3MjgpO2lmKGUhPT1udWxsKXt2YXIgbj12bigpO0VyKGUsdCwxMzQyMTc3Mjgsbil9V2codCwxMzQyMTc3MjgpfX07cDE9ZnVuY3Rpb24odCl7aWYodC50YWc9PT0xMyl7dmFyIGU9ZW8odCksbj1waSh0LGUpO2lmKG4hPT1udWxsKXt2YXIgcj12bigpO0VyKG4sdCxlLHIpfVdnKHQsZSl9fTttMT1mdW5jdGlvbigpe3JldHVybiBVZX07ZzE9ZnVuY3Rpb24odCxlKXt2YXIgbj1VZTt0cnl7cmV0dXJuIFVlPXQsZSgpfWZpbmFsbHl7VWU9bn19O2hwPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSJpbnB1dCI6aWYobHAodCxuKSxlPW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZlIT1udWxsKXtmb3Iobj10O24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrZSkrJ11bdHlwZT0icmFkaW8iXScpLGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtpZihyIT09dCYmci5mb3JtPT09dC5mb3JtKXt2YXIgaT1jZihyKTtpZighaSl0aHJvdyBFcnJvcihVKDkwKSk7Wl8ociksbHAocixpKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOllfKHQsbik7YnJlYWs7Y2FzZSJzZWxlY3QiOmU9bi52YWx1ZSxlIT1udWxsJiZabCh0LCEhbi5tdWx0aXBsZSxlLCExKX19O24xPWpnO3IxPVlvO3ZhciBqVD17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpbTHUsTGwsY2YsZTEsdDEsamddfSxRcz17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6UG8sYnVuZGxlVHlwZTowLHZlcnNpb246IjE4LjIuMCIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0selQ9e2J1bmRsZVR5cGU6UXMuYnVuZGxlVHlwZSx2ZXJzaW9uOlFzLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTpRcy5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOlFzLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRFcnJvckhhbmRsZXI6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOl9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bDEodCksdD09PW51bGw/bnVsbDp0LnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6UXMuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fERULGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGwscmVjb25jaWxlclZlcnNpb246IjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOCJ9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188InUiKXt2YXIgaGM9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCFoYy5pc0Rpc2FibGVkJiZoYy5zdXBwb3J0c0ZpYmVyKXRyeXtsZj1oYy5pbmplY3QoelQpLEZyPWhjfWNhdGNoe319S24uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9alQ7S24uY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKHQsZSl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIUhnKGUpKXRocm93IEVycm9yKFUoMjAwKSk7cmV0dXJuIExUKHQsZSxudWxsLG4pfTtLbi5jcmVhdGVSb290PWZ1bmN0aW9uKHQsZSl7aWYoIUhnKHQpKXRocm93IEVycm9yKFUoMjk5KSk7dmFyIG49ITEscj0iIixpPXp3O3JldHVybiBlIT1udWxsJiYoZS51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSxlLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPWUuaWRlbnRpZmllclByZWZpeCksZS5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPWUub25SZWNvdmVyYWJsZUVycm9yKSksZT1VZyh0LDEsITEsbnVsbCxudWxsLG4sITEscixpKSx0W2hpXT1lLmN1cnJlbnQsR2EodC5ub2RlVHlwZT09PTg/dC5wYXJlbnROb2RlOnQpLG5ldyBWZyhlKX07S24uZmluZERPTU5vZGU9ZnVuY3Rpb24odCl7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZih0Lm5vZGVUeXBlPT09MSlyZXR1cm4gdDt2YXIgZT10Ll9yZWFjdEludGVybmFscztpZihlPT09dm9pZCAwKXRocm93IHR5cGVvZiB0LnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihVKDE4OCkpOih0PU9iamVjdC5rZXlzKHQpLmpvaW4oIiwiKSxFcnJvcihVKDI2OCx0KSkpO3JldHVybiB0PWwxKGUpLHQ9dD09PW51bGw/bnVsbDp0LnN0YXRlTm9kZSx0fTtLbi5mbHVzaFN5bmM9ZnVuY3Rpb24odCl7cmV0dXJuIFlvKHQpfTtLbi5oeWRyYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZigheGYoZSkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gX2YobnVsbCx0LGUsITAsbil9O0tuLmh5ZHJhdGVSb290PWZ1bmN0aW9uKHQsZSxuKXtpZighSGcodCkpdGhyb3cgRXJyb3IoVSg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxpPSExLG89IiIsbD16dztpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihpPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihvPW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihsPW4ub25SZWNvdmVyYWJsZUVycm9yKSksZT1qdyhlLG51bGwsdCwxLG4/P251bGwsaSwhMSxvLGwpLHRbaGldPWUuY3VycmVudCxHYSh0KSxyKWZvcih0PTA7dDxyLmxlbmd0aDt0Kyspbj1yW3RdLGk9bi5fZ2V0VmVyc2lvbixpPWkobi5fc291cmNlKSxlLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/ZS5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLGldOmUubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4saSk7cmV0dXJuIG5ldyB5ZihlKX07S24ucmVuZGVyPWZ1bmN0aW9uKHQsZSxuKXtpZigheGYoZSkpdGhyb3cgRXJyb3IoVSgyMDApKTtyZXR1cm4gX2YobnVsbCx0LGUsITEsbil9O0tuLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24odCl7aWYoIXhmKHQpKXRocm93IEVycm9yKFUoNDApKTtyZXR1cm4gdC5fcmVhY3RSb290Q29udGFpbmVyPyhZbyhmdW5jdGlvbigpe19mKG51bGwsbnVsbCx0LCExLGZ1bmN0aW9uKCl7dC5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsdFtoaV09bnVsbH0pfSksITApOiExfTtLbi51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1qZztLbi51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbih0LGUsbixyKXtpZigheGYobikpdGhyb3cgRXJyb3IoVSgyMDApKTtpZih0PT1udWxsfHx0Ll9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihVKDM4KSk7cmV0dXJuIF9mKHQsZSxuLCExLHIpfTtLbi52ZXJzaW9uPSIxOC4yLjAtbmV4dC05ZTNiNzcyYjgtMjAyMjA2MDgiO2Z1bmN0aW9uIEZ3KCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPiJ1Inx8dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSE9ImZ1bmN0aW9uIikpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShGdyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19RncoKSxqXy5leHBvcnRzPUtuO3ZhciBZcj1qXy5leHBvcnRzO2NvbnN0IEJ3PU91KFlyKSxGVD1UXyh7X19wcm90b19fOm51bGwsZGVmYXVsdDpCd30sW1lyXSk7dmFyIF8wPVlyO3FoLmNyZWF0ZVJvb3Q9XzAuY3JlYXRlUm9vdCxxaC5oeWRyYXRlUm9vdD1fMC5oeWRyYXRlUm9vdDt2YXIgVXc9e2V4cG9ydHM6e319LHdmPXt9Oy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIEJUPXAsVVQ9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLFdUPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksVlQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxIVD1CVC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixLVD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIFd3KHQsZSxuKXt2YXIgcixpPXt9LG89bnVsbCxsPW51bGw7biE9PXZvaWQgMCYmKG89IiIrbiksZS5rZXkhPT12b2lkIDAmJihvPSIiK2Uua2V5KSxlLnJlZiE9PXZvaWQgMCYmKGw9ZS5yZWYpO2ZvcihyIGluIGUpVlQuY2FsbChlLHIpJiYhS1QuaGFzT3duUHJvcGVydHkocikmJihpW3JdPWVbcl0pO2lmKHQmJnQuZGVmYXVsdFByb3BzKWZvcihyIGluIGU9dC5kZWZhdWx0UHJvcHMsZSlpW3JdPT09dm9pZCAwJiYoaVtyXT1lW3JdKTtyZXR1cm57JCR0eXBlb2Y6VVQsdHlwZTp0LGtleTpvLHJlZjpsLHByb3BzOmksX293bmVyOkhULmN1cnJlbnR9fXdmLkZyYWdtZW50PVdUO3dmLmpzeD1Xdzt3Zi5qc3hzPVd3O1V3LmV4cG9ydHM9d2Y7dmFyIHg9VXcuZXhwb3J0cztmdW5jdGlvbiBLcCh0LGUpeyhlPT1udWxsfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIEtnKHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBLcCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gS3AodCxlKX19ZnVuY3Rpb24gU2YodCxlKXt2YXIgbj10eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPUtnKHQpKXx8ZSYmdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIil7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24oYSl7dGhyb3cgYX0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgbz0hMCxsPSExLHM7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciBhPW4ubmV4dCgpO3JldHVybiBvPWEuZG9uZSxhfSxlOmZ1bmN0aW9uKGEpe2w9ITAscz1hfSxmOmZ1bmN0aW9uKCl7dHJ5eyFvJiZuLnJldHVybiE9bnVsbCYmbi5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgc319fX1mdW5jdGlvbiBWdyh0KXtyZXR1cm4gdC5sZW5ndGg+MH12YXIgSXU9T2JqZWN0LmZyZWV6ZSh7a2luZDoib2siLHZhbHVlOnZvaWQgMH0pO2Z1bmN0aW9uIGp1KHQpe3JldHVybiB0PT09dm9pZCAwP0l1OntraW5kOiJvayIsdmFsdWU6dH19ZnVuY3Rpb24gVXIodCl7cmV0dXJue2tpbmQ6ImVyciIsZXJyb3I6dH19ZnVuY3Rpb24ga3ModCl7cmV0dXJuIHQ9PT1JdXx8dC5raW5kPT09Im9rIn1mdW5jdGlvbiBaZyh0KXtyZXR1cm4gdCE9PUl1JiZ0LmtpbmQ9PT0iZXJyIn1mdW5jdGlvbiBIdyh0KXt2YXIgZT1bXSxuPVtdLHI9U2YodCksaTt0cnl7Zm9yKHIucygpOyEoaT1yLm4oKSkuZG9uZTspe3ZhciBvPWkudmFsdWU7a3Mobyk/ZS5wdXNoKG8udmFsdWUpOm4ucHVzaChvLmVycm9yKX19Y2F0Y2gobCl7ci5lKGwpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIFZ3KG4pP1VyKG4pOmp1KGUpfWZ1bmN0aW9uIFpUKHQpe3JldHVybiBIdyh0KX1mdW5jdGlvbiBHVCh0KXt2YXIgZT1bXSxuPVNmKHQpLHI7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO1pnKGkpJiZlLnB1c2goaS5lcnJvcil9fWNhdGNoKG8pe24uZShvKX1maW5hbGx5e24uZigpfXJldHVybiBWdyhlKT9VcihlKTpJdX1mdW5jdGlvbiBZVCh0LGUpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIHI9anUoZSksaT0wO2k8bi5sZW5ndGgmJmtzKHIpOysraSlyPXQoci52YWx1ZSxuW2ldLGkpO3JldHVybiByfX1mdW5jdGlvbiBYVCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGtzKGUpP2p1KHQoZS52YWx1ZSkpOmV9fWZ1bmN0aW9uIEpUKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4ga3MoZSk/dChlLnZhbHVlKTplfX1mdW5jdGlvbiBRVCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFpnKGUpP1VyKHQoZS5lcnJvcikpOmV9fWZ1bmN0aW9uIHFUKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pP2p1KG4pOlVyKGUobikpfX12YXIgZU49ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGtzKHIpP2Uoci52YWx1ZSk/cjpVcihuKHIudmFsdWUpKTpyfX0sem89T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdm9pZE9rOkl1LG9rOmp1LGVycjpVcixpc09rOmtzLGlzRXJyOlpnLGFsbFQ6SHcsYWxsOlpULGFsbFY6R1QsZmxhdE1hcFJlZHVjZTpZVCxtYXA6WFQsZmxhdE1hcDpKVCxtYXBFcnI6UVQsZnJvbVByZWRpY2F0ZTpxVCxmaWx0ZXJPckVsc2U6ZU59KTtmdW5jdGlvbiB0Tih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBLcCh0KX1mdW5jdGlvbiBuTih0KXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHx0WyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gck4oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIEt3KHQpe3JldHVybiB0Tih0KXx8bk4odCl8fEtnKHQpfHxyTigpfWZ1bmN0aW9uIHhlKHQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHhlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4ZSh0KX1mdW5jdGlvbiBpTih0LGUpe2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKGU9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKSh0KX1mdW5jdGlvbiBadyh0KXt2YXIgZT1pTih0LCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wiP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIG1lKHQsZSxuKXtyZXR1cm4gZT1adyhlKSxlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fWZ1bmN0aW9uIHcwKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gZnModCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdIT1udWxsP2FyZ3VtZW50c1tlXTp7fTtlJTI/dzAoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe21lKHQscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOncwKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gdH1mdW5jdGlvbiBvTih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIGxOKHQsZSl7dmFyIG49dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixpLG8sbCxzPVtdLGE9ITAsdT0hMTt0cnl7aWYobz0obj1uLmNhbGwodCkpLm5leHQsZT09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2E9ITF9ZWxzZSBmb3IoOyEoYT0ocj1vLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09ZSk7YT0hMCk7fWNhdGNoKGMpe3U9ITAsaT1jfWZpbmFsbHl7dHJ5e2lmKCFhJiZuLnJldHVybiE9bnVsbCYmKGw9bi5yZXR1cm4oKSxPYmplY3QobCkhPT1sKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBzTigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBubyh0LGUpe3JldHVybiBvTih0KXx8bE4odCxlKXx8S2codCxlKXx8c04oKX1mdW5jdGlvbiBHbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIFMwKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxadyhyLmtleSkscil9fWZ1bmN0aW9uIFluKHQsZSxuKXtyZXR1cm4gZSYmUzAodC5wcm90b3R5cGUsZSksbiYmUzAodCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIFpwKHQsZSl7cmV0dXJuIFpwPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHIsaSl7cmV0dXJuIHIuX19wcm90b19fPWkscn0sWnAodCxlKX1mdW5jdGlvbiB3aSh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iJiZlIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZacCh0LGUpfWZ1bmN0aW9uIHdkKHQpe3JldHVybiB3ZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuKXtyZXR1cm4gbi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKX0sd2QodCl9ZnVuY3Rpb24gYU4oKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZih0eXBlb2YgUHJveHk9PSJmdW5jdGlvbiIpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gR3codCl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIHVOKHQsZSl7aWYoZSYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKXJldHVybiBlO2lmKGUhPT12b2lkIDApdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gR3codCl9ZnVuY3Rpb24gU2kodCl7dmFyIGU9YU4oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj13ZCh0KSxpO2lmKGUpe3ZhciBvPXdkKHRoaXMpLmNvbnN0cnVjdG9yO2k9UmVmbGVjdC5jb25zdHJ1Y3Qocixhcmd1bWVudHMsbyl9ZWxzZSBpPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB1Tih0aGlzLGkpfX12YXIgRWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7R24odGhpcyx0KX1yZXR1cm4gWW4odCxbe2tleToiYXBwZW5kVmFsaWRhdGlvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihuLHIsaSxvKXtyZXR1cm4gbj8obltyXT9uW3JdLnB1c2goe21lc3NhZ2U6aSx2YWx1ZTpvfSk6bltyXT1be21lc3NhZ2U6aSx2YWx1ZTpvfV0sbik6bWUoe30scixbe21lc3NhZ2U6aSx2YWx1ZTpvfV0pfX1dKSx0fSgpLFVjPVN5bWJvbCgiR2V0U2NoZW1hIikscG49U3ltYm9sKCJQYXRoIiksT3Q9U3ltYm9sKCJHZXRTb3VyY2UiKTtmdW5jdGlvbiBjTih0KXtyZXR1cm4gdFtVY119dmFyIEdnPVluKGZ1bmN0aW9uIHQoZSl7R24odGhpcyx0KSx0aGlzLnNwYW49ZX0pLGROPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyLGkpe3ZhciBvO3JldHVybiBHbih0aGlzLG4pLG89ZS5jYWxsKHRoaXMsaSksbWUoR3cobyksInR5cGUiLCJTeW0iKSxvLnZhbHVlPXIsb31yZXR1cm4gWW4obixbe2tleToidHJhbnNwaWxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfX1dKSxufShHZyk7bmV3IGROKCIoKSIpO3ZhciBubj0iX3R5cGUiLFJuPSJfcmVmIjtmdW5jdGlvbiBZdyh0KXt2YXIgZTtpZighdFtSbl0uc3RhcnRzV2l0aCgiL3B1YmxpYyIpKXt2YXIgbjtyZXR1cm57dXJsOnRbUm5dKyI/c2hhMjU2PSIuY29uY2F0KChuPXQubWV0YWRhdGEpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5zaGEyNTYpLG1ldGFkYXRhOnQubWV0YWRhdGF9fXJldHVybnt1cmw6dFtSbl0uc2xpY2UoNykrIj9zaGEyNTY9Ii5jb25jYXQoKGU9dC5tZXRhZGF0YSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplLnNoYTI1NiksbWV0YWRhdGE6dC5tZXRhZGF0YX19ZnVuY3Rpb24gWHcodCl7cmV0dXJuIHhlKHQpPT09Im9iamVjdCImJnQhPT1udWxsJiZ0IT09dm9pZCAwJiYoInZhbCJpbiB0fHwidmFsUGF0aCJpbiB0KX1mdW5jdGlvbiBmTih0KXtyZXR1cm4geGUodCk9PT0ib2JqZWN0IiYmdCE9PW51bGwmJnQhPT12b2lkIDAmJnBuIGluIHQmJiJ2YWwiaW4gdH1mdW5jdGlvbiBoTih0KXtyZXR1cm4gdFtwbl19ZnVuY3Rpb24gcE4odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZnVuY3Rpb24gRTAodCxlLG4pe3JldHVybiBlP010KHQoTXQoZSxuKSkpOk10KGUsbil9ZnVuY3Rpb24gcm8odCl7cmV0dXJuIHhlKHQpPT09Im9iamVjdCImJnQhPT1udWxsJiYoT3QgaW4gdHx8cG4gaW4gdCl9ZnVuY3Rpb24gTXQodCxlLG4pe2lmKHhlKHQpPT09Im9iamVjdCIpe2lmKHJvKHQpKXJldHVybiB0O2lmKFh3KHQpKXJldHVybiBNdCh0LnZhbCx0LnZhbFBhdGgpfWlmKHQmJnRbUm5dJiZ0W25uXT09PSJmaWxlIil7dmFyIHI9dFtSbl07aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IEVycm9yKCJJbnZhbGlkIGZpbGUgcmVmOiAiK3IpO3JldHVybiBNdChZdyh0KSxlLG4pfXN3aXRjaCh4ZSh0KSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHNlbGVjdG9yIHR5cGU6ICIuY29uY2F0KHhlKHQpLCI6ICIpLmNvbmNhdCh0KSk7Y2FzZSJvYmplY3QiOmlmKHQhPT1udWxsKXJldHVybiBuZXcgUHJveHkodCx7aGFzOmZ1bmN0aW9uKG8sbCl7cmV0dXJuIGw9PT1PdHx8bD09PXBufHxsPT09ImFuZFRoZW4ifHxsPT09VWM/ITA6bCBpbiBvfSxnZXQ6ZnVuY3Rpb24obyxsKXtpZihsPT09T3QpcmV0dXJuIHQ7aWYobD09PXBuKXJldHVybiBlO2lmKGw9PT1VYylyZXR1cm4gbjtpZihsPT09ImFuZFRoZW4iKXJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gRTAoYSx0LGUpfTtpZihBcnJheS5pc0FycmF5KG8pKXtpZihsPT09ImZpbHRlciIpcmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciB1PW8ubWFwKGZ1bmN0aW9uKGMsZCl7cmV0dXJuIE10KGMscnIoZSxkKSxuPT1udWxsP3ZvaWQgMDpuLml0ZW0pfSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBhJiZhIGluc3RhbmNlb2YgRWk/YS5hc3NlcnQoQzAoYykpOkMwKGEoYykpfSk7cmV0dXJuIE10KHUsZSxuKX07aWYobD09PSJtYXAiKXJldHVybiBmdW5jdGlvbihhKXt2YXIgdT1vLm1hcChmdW5jdGlvbihjLGQpe3ZhciBmPWEoTXQoYyxycihlLGQpLG49PW51bGw/dm9pZCAwOm4uaXRlbSksTXQoZCkpO3JldHVybiBybyhmKT9mOk10KGYpfSk7cmV0dXJuIE10KHUsZSxuKX19aWYoQXJyYXkuaXNBcnJheShvKSYmbD09PSJsZW5ndGgiKXJldHVybiBNdChvLmxlbmd0aCk7dmFyIHM9UmVmbGVjdC5nZXQobyxsKTtyZXR1cm4gcE4odCxsKT9OdW1iZXIuaXNOYU4oTnVtYmVyKGwpKT9NdChzLHJyKGUsbCksbj09bnVsbD92b2lkIDA6bi5pdGVtc1tsXSk6TXQocyxycihlLE51bWJlcihsKSksbj09bnVsbD92b2lkIDA6bi5pdGVtKTpzfX0pO2RlZmF1bHQ6cmV0dXJuIG1lKG1lKG1lKHtlcTpmdW5jdGlvbihvKXt2YXIgbD1vO2lmKHJvKG8pJiYobD1vW090XSxsIGluc3RhbmNlb2YgR2cpKXRocm93IEVycm9yKCJUT0RPOiBDYW5ub3QgZXZhbHVhdGUgZXF1YWxpdHkgd2l0aCBhbiBFeHByIik7cmV0dXJuIE10KHQ9PT1sLHZvaWQgMCl9LGFuZFRoZW46ZnVuY3Rpb24obyl7cmV0dXJuIEUwKG8sdD09PXZvaWQgMD9udWxsOnQsZSl9fSxPdCx0PT09dm9pZCAwP251bGw6dCkscG4sZSksVWMsbil9fWZ1bmN0aW9uIHJyKHQsZSl7aWYoeGUoZSk9PT0ic3ltYm9sIil0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSB2YWwgcGF0aCBvZiBhcnJheSBpdGVtIHdpdGggc3ltYm9sIHByb3A6ICIuY29uY2F0KGUudG9TdHJpbmcoKSkpO3JldHVybiB0JiYiIi5jb25jYXQodCwiLiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gQzAodCl7aWYoeGUodCk9PT0ib2JqZWN0IiYmKE90IGluIHR8fHBuIGluIHQpKXt2YXIgZT10W090XTtyZXR1cm4gZX1yZXR1cm4gdH12YXIgSnc9ZnVuY3Rpb24odCl7d2kobix0KTt2YXIgZT1TaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBHbih0aGlzLG4pLGk9ZS5jYWxsKHRoaXMpLGkuaXRlbXM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Ij9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTpBcnJheS5pc0FycmF5KG8pP21lKHt9LGksW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciB1PW5vKGEsMiksYz11WzBdLGQ9dVsxXSxmPXJyKGksYyk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLGksIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KGMpLG8pO2Vsc2V7dmFyIGg9ZC52YWxpZGF0ZShmLG9bY10pO2gmJnM/cz1mcyhmcyh7fSxoKSxzKTpoJiYocz1oKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24oaSl7aWYodGhpcy5vcHQmJmk9PW51bGwpcmV0dXJuITA7aWYoIWkpcmV0dXJuITE7Zm9yKHZhciBvPTAsbD1PYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKTtvPGwubGVuZ3RoO28rKyl7dmFyIHM9bm8obFtvXSwyKSxhPXNbMF0sdT1zWzFdO2lmKCF1LmFzc2VydChpW2FdKSlyZXR1cm4hMX1yZXR1cm4geGUoaSk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoaSl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Im9iamVjdCIsaXRlbXM6T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpLm1hcChmdW5jdGlvbihpKXt2YXIgbz1ubyhpLDIpLGw9b1swXSxzPW9bMV07cmV0dXJuW2wscy5zZXJpYWxpemUoKV19KSksb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLG1OPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLml0ZW09cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Inx8IUFycmF5LmlzQXJyYXkobyk/bWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdhcnJheScsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTooby5mb3JFYWNoKGZ1bmN0aW9uKGEsdSl7dmFyIGM9cnIoaSx1KTtpZighYylzPWwuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsaSwiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghaSYmdHlwZW9mIGk9PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6aSwiIGF0IGluZGV4ICIpLmNvbmNhdCh1KSxvKTtlbHNle3ZhciBkPWwuaXRlbS52YWxpZGF0ZShjLGEpO2QmJnM/cz1mcyhmcyh7fSxkKSxzKTpkJiYocz1kKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24oaSl7aWYodGhpcy5vcHQmJmk9PW51bGwpcmV0dXJuITA7aWYoIWkpcmV0dXJuITE7dmFyIG89U2YoaSksbDt0cnl7Zm9yKG8ucygpOyEobD1vLm4oKSkuZG9uZTspe3ZhciBzPWwudmFsdWU7aWYoIXRoaXMuaXRlbS5hc3NlcnQocykpcmV0dXJuITF9fWNhdGNoKGEpe28uZShhKX1maW5hbGx5e28uZigpfXJldHVybiB4ZShpKT09PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KGkpfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImFycmF5IixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufShFaSksazA9ZnVuY3Rpb24odCl7d2kobix0KTt2YXIgZT1TaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBHbih0aGlzLG4pLGk9ZS5jYWxsKHRoaXMpLGkudmFsdWU9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTp0eXBlb2YgbyE9InN0cmluZyI/bWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdzdHJpbmcnLCBnb3QgJyIuY29uY2F0KHhlKG8pLCInIiksdmFsdWU6b31dKTpvIT09dGhpcy52YWx1ZT9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgbGl0ZXJhbCAnIi5jb25jYXQodGhpcy52YWx1ZSwiJywgZ290ICciKS5jb25jYXQobywiJyIpLHZhbHVlOm99XSk6ITF9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMDp0eXBlb2YgaT09InN0cmluZyJ9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy52YWx1ZSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImxpdGVyYWwiLHZhbHVlOnRoaXMudmFsdWUsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLGdOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyLGkpe3ZhciBvLGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExO3JldHVybiBHbih0aGlzLG4pLG89ZS5jYWxsKHRoaXMpLG8ua2V5PXIsby5pdGVtcz1pLG8ub3B0PWwsb31yZXR1cm4gWW4obixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGksbyl7dmFyIGw9byxzPSExO2lmKHRoaXMub3B0JiZsPT1udWxsKXJldHVybiExO2lmKCF0aGlzLmtleSlyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6Ik1pc3NpbmcgcmVxdWlyZWQgZmlyc3QgYXJndW1lbnQgaW4gdW5pb24ifV0pO3ZhciBhPXRoaXMua2V5O2lmKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiQSB1bmlvbiBzY2hlbWEgbXVzdCB0YWtlIG1vcmUgdGhhbiAxIHNjaGVtYSBhcmd1bWVudHMiLGZhdGFsOiEwfV0pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7aWYodGhpcy5pdGVtcy5zb21lKGZ1bmN0aW9uKEEpe3JldHVybiEoQSBpbnN0YW5jZW9mIEp3KX0pKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiS2V5IGlzIGEgc3RyaW5nLCBzbyBhbGwgc2NoZW1hIGl0ZW1zIG11c3QgYmUgb2JqZWN0cyIsZmF0YWw6ITB9XSk7dmFyIHU9dGhpcy5pdGVtcyxjPXUubWFwKGZ1bmN0aW9uKEEpe3JldHVybiBBLnNlcmlhbGl6ZSgpfSksZD1jLmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gQS50eXBlIT09Im9iamVjdCJ8fEEuaXRlbXNbYV0udHlwZSE9PSJsaXRlcmFsIn0pO2lmKGQubGVuZ3RoPjApcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJBbGwgc2NoZW1hIGl0ZW1zIG11c3QgYmUgb2JqZWN0cyB3aXRoIGEga2V5OiAiLmNvbmNhdChhLCIgdGhhdCBpcyBhIGxpdGVyYWwgc2NoZW1hLiBGb3VuZDogIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGQsbnVsbCwyKSksZmF0YWw6ITB9XSk7dmFyIGY9YyxoPWYuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBBLml0ZW1zW2FdLm9wdH0pO2lmKGgubGVuZ3RoPjEpcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJTY2hlbWEgY2Fubm90IGhhdmUgYW4gb3B0aW9uYWwga2V5czogIi5jb25jYXQoYSksZmF0YWw6ITB9XSk7aWYoeGUobCkhPT0ib2JqZWN0IilyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkIGFuIG9iamVjdCJ9XSk7dmFyIGc9bDtpZihnW2FdPT09dm9pZCAwKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiTWlzc2luZyByZXF1aXJlZCBrZXk6ICIuY29uY2F0KGEpfV0pO3ZhciBtPVtdLHc9U2YoZiksdjt0cnl7Zm9yKHcucygpOyEodj13Lm4oKSkuZG9uZTspe3ZhciB5PXYudmFsdWUsXz15Lml0ZW1zW2FdO2lmKF8udHlwZT09PSJsaXRlcmFsIilpZighbS5pbmNsdWRlcyhfLnZhbHVlKSltLnB1c2goXy52YWx1ZSk7ZWxzZSByZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkZvdW5kIGR1cGxpY2F0ZSBrZXkgaW4gc2NoZW1hOiAiLmNvbmNhdChfLnZhbHVlKSxmYXRhbDohMH1dKX19Y2F0Y2goQSl7dy5lKEEpfWZpbmFsbHl7dy5mKCl9dmFyIFM9dS5maW5kKGZ1bmN0aW9uKEEpe3JldHVybiFBLml0ZW1zW2FdLnZhbGlkYXRlKGksZ1thXSl9KTtpZighUyl7dmFyIEU9cnIoaSxhKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KGEpKTtyZXR1cm4gbWUoe30sRSxbe21lc3NhZ2U6J0ludmFsaWQga2V5OiAiJy5jb25jYXQoYSwnIi4gVmFsdWUgd2FzOiAiJykuY29uY2F0KGdbYV0sJyIuIFZhbGlkIHZhbHVlczogJykuY29uY2F0KGYubWFwKGZ1bmN0aW9uKEEpe3ZhciBrPUEuaXRlbXNbYV07aWYoay50eXBlPT09ImxpdGVyYWwiJiZrLnZhbHVlKXJldHVybiciJy5jb25jYXQoay52YWx1ZSwnIicpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbGl0ZXJhbCBzY2hlbWEsIGdvdCAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShrLG51bGwsMikpKX0pLmpvaW4oIiwgIikpfV0pfXZhciAkPVMudmFsaWRhdGUoaSxnKTtpZigkKXJldHVybiAkfWVsc2UgaWYoYSBpbnN0YW5jZW9mIGswKXtpZih0aGlzLml0ZW1zLnNvbWUoZnVuY3Rpb24oQSl7cmV0dXJuIShBIGluc3RhbmNlb2YgazApfSkpcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJLZXkgaXMgYSBsaXRlcmFsIHNjaGVtYSwgc28gYWxsIHNjaGVtYSBpdGVtcyBtdXN0IGJlIGxpdGVyYWxzIixmYXRhbDohMH1dKTt2YXIgQz1bYV0uY29uY2F0KEt3KHRoaXMuaXRlbXMpKTtpZih0eXBlb2YgbD09InN0cmluZyIpe3ZhciBOPUMuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hQS52YWxpZGF0ZShpLGwpfSk7aWYoIU4pcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJVbmlvbiBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAiLmNvbmNhdChDLm1hcChmdW5jdGlvbihBKXtyZXR1cm4nIicuY29uY2F0KEEudmFsdWUsJyInKX0pLmpvaW4oIiwgIikpfV0pfX1lbHNlIHJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgYSBzdHJpbmcgb3IgbGl0ZXJhbCJ9XSk7cmV0dXJuIHN9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiEwfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMua2V5LHRoaXMuaXRlbXMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0eXBlb2YgdGhpcy5rZXk9PSJzdHJpbmciP3t0eXBlOiJ1bmlvbiIsa2V5OnRoaXMua2V5LGl0ZW1zOnRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnNlcmlhbGl6ZSgpfSksb3B0OnRoaXMub3B0fTp7dHlwZToidW5pb24iLGl0ZW1zOnRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnNlcmlhbGl6ZSgpfSksb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLHZOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLm9wdGlvbnM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiExfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtyZXR1cm4hMH19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyaWNodGV4dCIsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLHlOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLm9wdGlvbnM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTpvPT1udWxsP21lKHt9LGksW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgaW1hZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIsdmFsdWU6b31dKTp0eXBlb2Ygb1tSbl0hPSJzdHJpbmciP21lKHt9LGksW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgYSBmaWxlIHJlZmVyZW5jZSBzdHJpbmcuIEdvdDogIi5jb25jYXQoeGUob1tSbl0pKSx2YWx1ZTpvfV0pOm9bbm5dIT09ImZpbGUiP21lKHt9LGksW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQob1tubl0pLHZhbHVlOm99XSk6by5tZXRhZGF0YT9tZSh7fSxpLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBJbWFnZSBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBwcm9wczogd2lkdGggKHBvc2l0aXZlIG51bWJlciksIGhlaWdodCAocG9zaXRpdmUgbnVtYmVyKSBhbmQgc2hhMjU2IChzdHJpbmcgb2YgbGVuZ3RoIDY0IG9mIHRoZSBiYXNlMTYgaGFzaCkuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6cmVwbGFjZS1tZXRhZGF0YSJdfV0pOm1lKHt9LGksW3ttZXNzYWdlOiJDb3VsZCBub3QgdmFsaWRhdGUgSW1hZ2UgbWV0YWRhdGEuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6YWRkLW1ldGFkYXRhIl19XSl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMDooaT09bnVsbD92b2lkIDA6aVtSbl0pPT09ImltYWdlIiYmKGk9PW51bGw/dm9pZCAwOmlbbm5dKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsb3B0aW9uczp0aGlzLm9wdGlvbnMsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLHhOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLml0ZW09cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Ij9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTpBcnJheS5pc0FycmF5KG8pP21lKHt9LGksW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciB1PW5vKGEsMiksYz11WzBdLGQ9dVsxXSxmPXJyKGksYyk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLGksIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KGQpLG8pO2Vsc2V7dmFyIGg9bC5pdGVtLnZhbGlkYXRlKGYsZCk7aCYmcz9zPWZzKGZzKHt9LGgpLHMpOmgmJihzPWgpfX0pLHMpfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtpZih0aGlzLm9wdCYmaT09bnVsbClyZXR1cm4hMDtpZighaSlyZXR1cm4hMTtmb3IodmFyIG89MCxsPU9iamVjdC5lbnRyaWVzKGkpO288bC5sZW5ndGg7bysrKXt2YXIgcz1ubyhsW29dLDIpLGE9c1sxXTtpZighdGhpcy5pdGVtLmFzc2VydChhKSlyZXR1cm4hMX1yZXR1cm4geGUoaSk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoaSl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtLCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmVjb3JkIixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufShFaSk7ZnVuY3Rpb24gX04odCl7dmFyIGU9dFtPdF07aWYoZSBpbnN0YW5jZW9mIEdnKXRocm93IEVycm9yKCJDYW5ub3QgZ2V0IHJhdyBzb3VyY2Ugb2YgYW4gRXhwciIpO3ZhciBuPWU7cmV0dXJuIG59ZnVuY3Rpb24gd04odCl7cmV0dXJuIHQuaW5kZXhPZigiLiIpPT09LTE/W3QsIiJdOlt0LnNsaWNlKDAsdC5pbmRleE9mKCIuIikpLHQuc2xpY2UodC5pbmRleE9mKCIuIikrMSldfWZ1bmN0aW9uIFNOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSnd8fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJvYmplY3QifWZ1bmN0aW9uIEVOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeE58fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJyZWNvcmQifWZ1bmN0aW9uIENOKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbU58fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJhcnJheSJ9ZnVuY3Rpb24ga04odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBnTnx8eGUodCk9PT0ib2JqZWN0IiYmInR5cGUiaW4gdCYmdC50eXBlPT09InVuaW9uIn1mdW5jdGlvbiBiTih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHZOfHx4ZSh0KT09PSJvYmplY3QiJiYidHlwZSJpbiB0JiZ0LnR5cGU9PT0icmljaHRleHQifWZ1bmN0aW9uICROKHQpe3JldHVybiB0IGluc3RhbmNlb2YgeU58fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJpbWFnZSJ9ZnVuY3Rpb24gVE4odCxlLG4pe2Zvcih2YXIgcj1OTih0KSxpPUt3KHIpLG89bixsPWUscz1mdW5jdGlvbigpe3ZhciBjPXIuc2hpZnQoKTtpZihjPT09dm9pZCAwKXRocm93IEVycm9yKCJVbmV4cGVjdGVkIHVuZGVmaW5lZCBwYXJ0Iik7aWYoQ04obykpe2lmKE51bWJlci5pc05hTihOdW1iZXIoYykpKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IGFycmF5IHNjaGVtYSAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShvKSwiIG11c3QgaGF2ZSBhIG51bWJlciBhcyBwYXRoLCBidXQgZ290ICIpLmNvbmNhdChjLCIuIFBhdGg6ICIpLmNvbmNhdCh0KSk7aWYoeGUobCkhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiBhcnJheSwgYnV0IGdvdCAiLmNvbmNhdCh4ZShsKSkpO2lmKCFsW2NdKXt2YXIgZDt0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBhcnJheSBzb3VyY2UgKGxlbmd0aDogIi5jb25jYXQoKGQ9bCk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLmxlbmd0aCwiKSBkaWQgbm90IGhhdmUgaW5kZXggIikuY29uY2F0KGMsIiBmcm9tIHBhdGg6ICIpLmNvbmNhdCh0KSl9bD1sW2NdLG89by5pdGVtfWVsc2UgaWYoRU4obykpe2lmKHR5cGVvZiBjIT0ic3RyaW5nIil0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc2NoZW1hICIuY29uY2F0KG8sIiBtdXN0IGhhdmUgcGF0aDogIikuY29uY2F0KGMsIiBhcyBzdHJpbmciKSk7aWYoeGUobCkhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiByZWNvcmQsIGJ1dCBnb3QgIi5jb25jYXQoeGUobCkpKTtpZighbFtjXSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc291cmNlIGRpZCBub3QgaGF2ZSBrZXkgIi5jb25jYXQoYywiIGZyb20gcGF0aDogIikuY29uY2F0KHQpKTtsPWxbY10sbz1vLml0ZW19ZWxzZSBpZihTTihvKSl7aWYoeGUobCkhPT0ib2JqZWN0Iil0aHJvdyBFcnJvcigiU2NoZW1hIHR5cGUgZXJyb3I6IGV4cGVjdGVkIHNvdXJjZSB0byBiZSB0eXBlIG9mIG9iamVjdCwgYnV0IGdvdCAiLmNvbmNhdCh4ZShsKSkpO2lmKCFsW2NdKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IG9iamVjdCBzb3VyY2UgZGlkIG5vdCBoYXZlIGtleSAiLmNvbmNhdChjLCIgZnJvbSBwYXRoOiAiKS5jb25jYXQodCkpO2w9bFtjXSxvPW8uaXRlbXNbY119ZWxzZXtpZigkTihvKSlyZXR1cm57djp7cGF0aDppLnNsaWNlKDAsaS5sZW5ndGgtci5sZW5ndGgtMSkubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBKU09OLnN0cmluZ2lmeShtKX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O2lmKGtOKG8pKXt2YXIgZj1vLmtleTtpZighZilyZXR1cm57djp7cGF0aDppLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gTnVtYmVyLmlzTmFOKE51bWJlcihtKSk/SlNPTi5zdHJpbmdpZnkobSk6bX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O3ZhciBoPWxbZl07aWYoIWgpdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogdW5pb24gc291cmNlICIuY29uY2F0KG8sIiBkaWQgbm90IGhhdmUgcmVxdWlyZWQga2V5ICIpLmNvbmNhdChmLCIgaW4gcGF0aDogIikuY29uY2F0KHQpKTt2YXIgZz1vLml0ZW1zLmZpbmQoZnVuY3Rpb24obSl7dmFyIHc7cmV0dXJuKG09PW51bGx8fCh3PW0uaXRlbXMpPT09bnVsbHx8dz09PXZvaWQgMHx8KHc9d1tmXSk9PT1udWxsfHx3PT09dm9pZCAwP3ZvaWQgMDp3LnZhbHVlKT09PWh9KTtpZighZyl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiB1bmlvbiBzY2hlbWEgIi5jb25jYXQobywiIGRpZCBub3QgaGF2ZSBhIGNoaWxkIG9iamVjdCB3aXRoICIpLmNvbmNhdChmLCIgb2YgdmFsdWUgIikuY29uY2F0KGgsIiBpbiBwYXRoOiAiKS5jb25jYXQodCkpO289Zy5pdGVtc1tjXSxsPWxbY119ZWxzZXtpZihiTihvKSlyZXR1cm57djp7cGF0aDppLnNsaWNlKDAsaS5sZW5ndGgtci5sZW5ndGgtMSkubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBKU09OLnN0cmluZ2lmeShtKX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O3Rocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6ICIuY29uY2F0KGMsIiByZXNvbHZlZCB0byBhbiB1bmV4cGVjdGVkIHNjaGVtYSAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobykpKX19fSxhO3IubGVuZ3RoPjA7KWlmKGE9cygpLGEpcmV0dXJuIGEudjtpZihyLmxlbmd0aD4wKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6ICIuY29uY2F0KHIuam9pbigiLiIpLCIgaXMgbm90IGEgdmFsaWQgcGF0aCIpKTtyZXR1cm57cGF0aDppLm1hcChmdW5jdGlvbih1KXtyZXR1cm4gTnVtYmVyLmlzTmFOKE51bWJlcih1KSk/SlNPTi5zdHJpbmdpZnkodSk6dX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19ZnVuY3Rpb24gTk4odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQubGVuZ3RoOyl7dmFyIHI9IiI7aWYodFtuXT09PSciJyl7Zm9yKG4rKztuPHQubGVuZ3RoJiZ0W25dIT09JyInOyl0W25dPT09IlxcIiYmdFtuKzFdPT09JyInPyhyKz0nIicsbisrKTpyKz10W25dLG4rKztpZih0W25dIT09JyInKXt2YXIgaTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgKCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHQpLCIpOiBNaXNzaW5nIGNsb3NpbmcgZG91YmxlIHF1b3RlOiAiKS5jb25jYXQoKGk9dFtuXSkhPT1udWxsJiZpIT09dm9pZCAwP2k6ImF0IGVuZCBvZiBzdHJpbmciLCIgKGNoYXI6ICIpLmNvbmNhdChuLCI7IGxlbmd0aDogIikuY29uY2F0KHQubGVuZ3RoLCIpIikpfX1lbHNlIGZvcig7bjx0Lmxlbmd0aCYmdFtuXSE9PSIuIjspcis9dFtuXSxuKys7ciE9PSIiJiZlLnB1c2gociksbisrfXJldHVybiBlfXZhciBSTj1mdW5jdGlvbih0KXt3aShuLHQpO3ZhciBlPVNpKG4pO2Z1bmN0aW9uIG4ocil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7cmV0dXJuIEduKHRoaXMsbiksaT1lLmNhbGwodGhpcyksaS5vcHRpb25zPXIsaS5vcHQ9byxpLmlzUmF3PWwsaX1yZXR1cm4gWW4obixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGksbyl7dmFyIGwscyxhO2lmKHRoaXMub3B0JiZvPT1udWxsKXJldHVybiExO2lmKHR5cGVvZiBvIT0ic3RyaW5nIilyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdzdHJpbmcnLCBnb3QgJyIuY29uY2F0KHhlKG8pLCInIiksdmFsdWU6b31dKTt2YXIgdT1bXTtyZXR1cm4obD10aGlzLm9wdGlvbnMpIT09bnVsbCYmbCE9PXZvaWQgMCYmbC5tYXhMZW5ndGgmJm8ubGVuZ3RoPnRoaXMub3B0aW9ucy5tYXhMZW5ndGgmJnUucHVzaCh7bWVzc2FnZToiRXhwZWN0ZWQgc3RyaW5nIHRvIGJlIGF0IG1vc3QgIi5jb25jYXQodGhpcy5vcHRpb25zLm1heExlbmd0aCwiIGNoYXJhY3RlcnMgbG9uZywgZ290ICIpLmNvbmNhdChvLmxlbmd0aCksdmFsdWU6b30pLChzPXRoaXMub3B0aW9ucykhPT1udWxsJiZzIT09dm9pZCAwJiZzLm1pbkxlbmd0aCYmby5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aCYmdS5wdXNoKHttZXNzYWdlOiJFeHBlY3RlZCBzdHJpbmcgdG8gYmUgYXQgbGVhc3QgIi5jb25jYXQodGhpcy5vcHRpb25zLm1pbkxlbmd0aCwiIGNoYXJhY3RlcnMgbG9uZywgZ290ICIpLmNvbmNhdChvLmxlbmd0aCksdmFsdWU6b30pLChhPXRoaXMub3B0aW9ucykhPT1udWxsJiZhIT09dm9pZCAwJiZhLnJlZ2V4cCYmIXRoaXMub3B0aW9ucy5yZWdleHAudGVzdChvKSYmdS5wdXNoKHttZXNzYWdlOiJFeHBlY3RlZCBzdHJpbmcgdG8gbWF0Y2ggcmVnIGV4cDogIi5jb25jYXQodGhpcy5vcHRpb25zLnJlZ2V4cC50b1N0cmluZygpLCIsIGdvdCAnIikuY29uY2F0KG8sIiciKSx2YWx1ZTpvfSksdS5sZW5ndGg+MD9tZSh7fSxpLHUpOiExfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITA6dHlwZW9mIGk9PSJzdHJpbmcifX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMub3B0aW9ucywhMCx0aGlzLmlzUmF3KX19LHtrZXk6InJhdyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5vcHRpb25zLHRoaXMub3B0LCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaSxvLGw7cmV0dXJue3R5cGU6InN0cmluZyIsb3B0aW9uczp7bWF4TGVuZ3RoOihpPXRoaXMub3B0aW9ucyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm1heExlbmd0aCxtaW5MZW5ndGg6KG89dGhpcy5vcHRpb25zKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ubWluTGVuZ3RoLHJlZ2V4cDooKGw9dGhpcy5vcHRpb25zKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwucmVnZXhwKSYme3NvdXJjZTp0aGlzLm9wdGlvbnMucmVnZXhwLnNvdXJjZSxmbGFnczp0aGlzLm9wdGlvbnMucmVnZXhwLmZsYWdzfX0sb3B0OnRoaXMub3B0LHJhdzp0aGlzLmlzUmF3fX19XSksbn0oRWkpO2Z1bmN0aW9uIE9OKHQpe3JldHVybiBRdyhNTih0KSl9ZnVuY3Rpb24gUE4odCl7cmV0dXJuIHJvKHQpP3hlKHRbT3RdKT09PSJvYmplY3QiJiZ0W090XSE9PW51bGwmJkFycmF5LmlzQXJyYXkodFtPdF0pOkFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gQU4odCl7cmV0dXJuIHJvKHQpP3hlKHRbT3RdKT09PSJvYmplY3QiJiZ0W090XSE9PW51bGwmJiFBcnJheS5pc0FycmF5KHRbT3RdKTp4ZSh0KT09PSJvYmplY3QifWZ1bmN0aW9uIE1OKHQpe3ZhciBlPU10KHQpO2Z1bmN0aW9uIG4ocil7dmFyIGk9UE4ociksbz1BTihyKTtpZihpKXt2YXIgbD1PdCBpbiByP3JbT3RdOnIscz1wbiBpbiByP3JbcG5dOnZvaWQgMDtyZXR1cm57dmFsOmwubWFwKGZ1bmN0aW9uKGMsZCl7cmV0dXJuIG4ocm8oYyk/YzpNdChjLHJyKHMsZCkpKX0pLHZhbFBhdGg6c319ZWxzZSBpZihvKXt2YXIgYT1PdCBpbiByP3JbT3RdOnIsdT1wbiBpbiByP3JbcG5dOnZvaWQgMDtyZXR1cm57dmFsOmEhPT1udWxsJiZPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYSkubWFwKGZ1bmN0aW9uKGMpe3ZhciBkPW5vKGMsMiksZj1kWzBdLGg9ZFsxXTtyZXR1cm5bZixuKHJvKGgpP2g6TXQoaCxycih1LGYpKSldfSkpLHZhbFBhdGg6dX19ZWxzZSByZXR1cm4gcm8ocik/e3ZhbDpuKHJbT3RdKSx2YWxQYXRoOnJbcG5dfTpyfXJldHVybiBuKGUpfWZ1bmN0aW9uIEdwKHQpe3ZhciBlPVh3KHQpP3QudmFsOnQ7c3dpdGNoKHhlKGUpKXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6dGhyb3cgRXJyb3IoIkludmFsaWQgdmFsIHR5cGU6ICIuY29uY2F0KHhlKGUpKSk7Y2FzZSJvYmplY3QiOnJldHVybiBlPT09bnVsbD9udWxsOkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoR3ApOk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5tYXAoZnVuY3Rpb24obil7dmFyIHI9bm8obiwyKSxpPXJbMF0sbz1yWzFdO3JldHVybltpLG8mJkdwKG8pXX0pKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBRdyh0KXt2YXIgZT10LnZhbDtzd2l0Y2goeGUoZSkpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjp0aHJvdyBFcnJvcigiSW52YWxpZCB2YWwgdHlwZTogIi5jb25jYXQoeGUoZSkpKTtjYXNlIm9iamVjdCI6aWYoZSE9PW51bGwpcmV0dXJuIG5ldyBQcm94eShlLHtoYXM6ZnVuY3Rpb24ocixpKXtyZXR1cm4gaT09PSJ2YWwifHxpPT09cG4/ITA6YjAocixpKX0sZ2V0OmZ1bmN0aW9uKHIsaSl7aWYoaT09PXBuKXJldHVybiB0LnZhbFBhdGg7aWYoaT09PSJ2YWwiKXJldHVybiBHcCh0KTtpZihBcnJheS5pc0FycmF5KHIpJiZpPT09Imxlbmd0aCIpcmV0dXJuIHIubGVuZ3RoO2lmKGIwKGUsaSkpe3ZhciBvLGw7cmV0dXJuIFF3KHt2YWw6UmVmbGVjdC5nZXQocixpKS52YWwsdmFsUGF0aDoobz0obD1SZWZsZWN0LmdldChyLGkpKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwudmFsUGF0aCkhPT1udWxsJiZvIT09dm9pZCAwP286cnIodC52YWxQYXRoLEFycmF5LmlzQXJyYXkocik/TnVtYmVyKGkpOmkpfSl9cmV0dXJuIFJlZmxlY3QuZ2V0KHIsaSl9fSk7ZGVmYXVsdDpyZXR1cm4gbWUobWUoe30scG4sdC52YWxQYXRoKSwidmFsIix0LnZhbCl9fWZ1bmN0aW9uIGIwKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXZhciBMTj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLC0xMjQ1NjQzODI1LC0zNzM5NTc3MjMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsLTE4NDEzMzE1NDgsLTE0MjQyMDQwNzUsLTY3MDU4NjIxNiwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwtMjEzMjg4OTA5MCwtMTY4MDA3OTE5MywtMTA0Njc0NDcxNiwtNDU5NTc2ODk1LC0yNzI3NDI1MjIsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsLTE3NDA3NDY0MTQsLTE0NzMxMzI5NDcsLTEzNDE5NzA0ODgsLTEwODQ2NTM2MjUsLTk1ODM5NTQwNSwtNzEwNDM4NTg1LDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLC0yMTE3OTQwOTQ2LC0xODM4MDExMjU5LC0xNTY0NDgxMzc1LC0xNDc0NjY0ODg1LC0xMDM1MjM2NDk2LC05NDkyMDI1MjUsLTc3ODkwMTQ3OSwtNjk0NjE0NDkyLC0yMDAzOTUzODcsMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LC0yMDY3MjM2ODQ0LC0xOTMzMTE0ODcyLC0xODY2NTMwODIyLC0xNTM4MjMzMTA5LC0xMDkwOTM1ODE3LC05NjU2NDE5OThdLFZlPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuaW5wdXRCeXRlcz02NF09ImlucHV0Qnl0ZXMiLHRbdC5pbnB1dFdvcmRzPTE2XT0iaW5wdXRXb3JkcyIsdFt0LmhpZ2hJbmRleD0xNF09ImhpZ2hJbmRleCIsdFt0Lmxvd0luZGV4PTE1XT0ibG93SW5kZXgiLHRbdC53b3JrV29yZHM9NjRdPSJ3b3JrV29yZHMiLHRbdC5hbGxvY0J5dGVzPTgwXT0iYWxsb2NCeXRlcyIsdFt0LmFsbG9jV29yZHM9MjBdPSJhbGxvY1dvcmRzIix0W3QuYWxsb2NUb3RhbD04ZTNdPSJhbGxvY1RvdGFsIix0fShWZXx8e30pLCQwPXtzaGEyNTY6MX07ZnVuY3Rpb24gRE4odCl7aWYodCYmISQwW3RdJiYhJDBbdC50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBtZXRob2Qgbm90IHN1cHBvcnRlZCIpO3JldHVybiBuZXcgSU59dmFyIElOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe0duKHRoaXMsdCksbWUodGhpcywiQSIsMTc3OTAzMzcwMyksbWUodGhpcywiQiIsLTExNTA4MzMwMTkpLG1lKHRoaXMsIkMiLDEwMTM5MDQyNDIpLG1lKHRoaXMsIkQiLC0xNTIxNDg2NTM0KSxtZSh0aGlzLCJFIiwxMzU5ODkzMTE5KSxtZSh0aGlzLCJGIiwtMTY5NDE0NDM3MiksbWUodGhpcywiRyIsNTI4NzM0NjM1KSxtZSh0aGlzLCJIIiwxNTQxNDU5MjI1KSxtZSh0aGlzLCJfc2l6ZSIsMCksbWUodGhpcywiX3NwIiwwKSwoIXBjfHxxcz49VmUuYWxsb2NUb3RhbCkmJihwYz1uZXcgQXJyYXlCdWZmZXIoVmUuYWxsb2NUb3RhbCkscXM9MCksdGhpcy5fYnl0ZT1uZXcgVWludDhBcnJheShwYyxxcyxWZS5hbGxvY0J5dGVzKSx0aGlzLl93b3JkPW5ldyBJbnQzMkFycmF5KHBjLHFzLFZlLmFsbG9jV29yZHMpLHFzKz1WZS5hbGxvY0J5dGVzfXJldHVybiBZbih0LFt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKG4pe2lmKHR5cGVvZiBuPT0ic3RyaW5nIilyZXR1cm4gdGhpcy5fdXRmOChuKTtpZihuPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdHlwZTogIit4ZShuKSk7dmFyIHI9bi5ieXRlT2Zmc2V0LGk9bi5ieXRlTGVuZ3RoLG89aS9WZS5pbnB1dEJ5dGVzfDAsbD0wO2lmKG8mJiEociYzKSYmISh0aGlzLl9zaXplJVZlLmlucHV0Qnl0ZXMpKXtmb3IodmFyIHM9bmV3IEludDMyQXJyYXkobi5idWZmZXIscixvKlZlLmlucHV0V29yZHMpO28tLTspdGhpcy5faW50MzIocyxsPj4yKSxsKz1WZS5pbnB1dEJ5dGVzO3RoaXMuX3NpemUrPWx9dmFyIGE9bi5CWVRFU19QRVJfRUxFTUVOVDtpZihhIT09MSYmbi5idWZmZXIpe3ZhciB1PW5ldyBVaW50OEFycmF5KG4uYnVmZmVyLHIrbCxpLWwpO3JldHVybiB0aGlzLl91aW50OCh1KX1yZXR1cm4gbD09PWk/dGhpczp0aGlzLl91aW50OChuLGwpfX0se2tleToiX3VpbnQ4Iix2YWx1ZTpmdW5jdGlvbihuLHIpe3ZhciBpPXRoaXMuX2J5dGUsbz10aGlzLl93b3JkLGw9bi5sZW5ndGg7Zm9yKHI9cnwwO3I8bDspe2Zvcih2YXIgcz10aGlzLl9zaXplJVZlLmlucHV0Qnl0ZXMsYT1zO3I8bCYmYTxWZS5pbnB1dEJ5dGVzOylpW2ErK109bltyKytdO2E+PVZlLmlucHV0Qnl0ZXMmJnRoaXMuX2ludDMyKG8pLHRoaXMuX3NpemUrPWEtc31yZXR1cm4gdGhpc319LHtrZXk6Il91dGY4Iix2YWx1ZTpmdW5jdGlvbihuKXtmb3IodmFyIHI9dGhpcy5fYnl0ZSxpPXRoaXMuX3dvcmQsbz1uLmxlbmd0aCxsPXRoaXMuX3NwLHM9MDtzPG87KXtmb3IodmFyIGE9dGhpcy5fc2l6ZSVWZS5pbnB1dEJ5dGVzLHU9YTtzPG8mJnU8VmUuaW5wdXRCeXRlczspe3ZhciBjPW4uY2hhckNvZGVBdChzKyspfDA7YzwxMjg/clt1KytdPWM6YzwyMDQ4PyhyW3UrK109MTkyfGM+Pj42LHJbdSsrXT0xMjh8YyY2Myk6Yzw1NTI5Nnx8Yz41NzM0Mz8oclt1KytdPTIyNHxjPj4+MTIsclt1KytdPTEyOHxjPj4+NiY2MyxyW3UrK109MTI4fGMmNjMpOmw/KGM9KChsJjEwMjMpPDwxMCkrKGMmMTAyMykrNjU1MzYsclt1KytdPTI0MHxjPj4+MTgsclt1KytdPTEyOHxjPj4+MTImNjMsclt1KytdPTEyOHxjPj4+NiY2MyxyW3UrK109MTI4fGMmNjMsbD0wKTpsPWN9dT49VmUuaW5wdXRCeXRlcyYmKHRoaXMuX2ludDMyKGkpLGlbMF09aVtWZS5pbnB1dFdvcmRzXSksdGhpcy5fc2l6ZSs9dS1hfXJldHVybiB0aGlzLl9zcD1sLHRoaXN9fSx7a2V5OiJfaW50MzIiLHZhbHVlOmZ1bmN0aW9uKG4scil7dmFyIGk9dGhpcy5BLG89dGhpcy5CLGw9dGhpcy5DLHM9dGhpcy5ELGE9dGhpcy5FLHU9dGhpcy5GLGM9dGhpcy5HLGQ9dGhpcy5ILGY9MDtmb3Iocj1yfDA7ZjxWZS5pbnB1dFdvcmRzOylib1tmKytdPWhyKG5bcisrXSk7Zm9yKGY9VmUuaW5wdXRXb3JkcztmPFZlLndvcmtXb3JkcztmKyspYm9bZl09SE4oYm9bZi0yXSkrYm9bZi03XStWTihib1tmLTE1XSkrYm9bZi0xNl18MDtmb3IoZj0wO2Y8VmUud29ya1dvcmRzO2YrKyl7dmFyIGg9ZCtXTihhKStGTihhLHUsYykrTE5bZl0rYm9bZl18MCxnPVVOKGkpK0JOKGksbyxsKXwwO2Q9YyxjPXUsdT1hLGE9cytofDAscz1sLGw9byxvPWksaT1oK2d8MH10aGlzLkE9aSt0aGlzLkF8MCx0aGlzLkI9byt0aGlzLkJ8MCx0aGlzLkM9bCt0aGlzLkN8MCx0aGlzLkQ9cyt0aGlzLkR8MCx0aGlzLkU9YSt0aGlzLkV8MCx0aGlzLkY9dSt0aGlzLkZ8MCx0aGlzLkc9Yyt0aGlzLkd8MCx0aGlzLkg9ZCt0aGlzLkh8MH19LHtrZXk6ImRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIHI9dGhpcy5fYnl0ZSxpPXRoaXMuX3dvcmQsbz10aGlzLl9zaXplJVZlLmlucHV0Qnl0ZXN8MDtmb3IocltvKytdPTEyODtvJjM7KXJbbysrXT0wO2lmKG8+Pj0yLG8+VmUuaGlnaEluZGV4KXtmb3IoO288VmUuaW5wdXRXb3JkczspaVtvKytdPTA7bz0wLHRoaXMuX2ludDMyKGkpfWZvcig7bzxWZS5pbnB1dFdvcmRzOylpW28rK109MDt2YXIgbD10aGlzLl9zaXplKjgscz0obCY0Mjk0OTY3Mjk1KT4+PjAsYT0obC1zKS80Mjk0OTY3Mjk2O3JldHVybiBhJiYoaVtWZS5oaWdoSW5kZXhdPWhyKGEpKSxzJiYoaVtWZS5sb3dJbmRleF09aHIocykpLHRoaXMuX2ludDMyKGkpLG49PT0iaGV4Ij90aGlzLl9oZXgoKTp0aGlzLl9iaW4oKX19LHtrZXk6Il9oZXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5BLHI9dGhpcy5CLGk9dGhpcy5DLG89dGhpcy5ELGw9dGhpcy5FLHM9dGhpcy5GLGE9dGhpcy5HLHU9dGhpcy5IO3JldHVybiBPaShuKStPaShyKStPaShpKStPaShvKStPaShsKStPaShzKStPaShhKStPaSh1KX19LHtrZXk6Il9iaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5BLHI9dGhpcy5CLGk9dGhpcy5DLG89dGhpcy5ELGw9dGhpcy5FLHM9dGhpcy5GLGE9dGhpcy5HLHU9dGhpcy5ILGM9dGhpcy5fYnl0ZSxkPXRoaXMuX3dvcmQ7cmV0dXJuIGRbMF09aHIobiksZFsxXT1ocihyKSxkWzJdPWhyKGkpLGRbM109aHIobyksZFs0XT1ocihsKSxkWzVdPWhyKHMpLGRbNl09aHIoYSksZFs3XT1ocih1KSxjLnNsaWNlKDAsMzIpfX1dKSx0fSgpLGJvPW5ldyBJbnQzMkFycmF5KFZlLndvcmtXb3JkcykscGMscXM9MCxPaT1mdW5jdGlvbihlKXtyZXR1cm4oZSs0Mjk0OTY3Mjk2KS50b1N0cmluZygxNikuc3Vic3RyKC04KX0sak49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PDI0JjQyNzgxOTAwODB8ZTw8OCYxNjcxMTY4MHxlPj44JjY1MjgwfGU+PjI0JjI1NX0sek49ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGhyPUtOKCk/ek46ak4sRk49ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByXmUmKG5ecil9LEJOPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZSZufHImKGV8bil9LFVOPWZ1bmN0aW9uKGUpe3JldHVybihlPj4+MnxlPDwzMCleKGU+Pj4xM3xlPDwxOSleKGU+Pj4yMnxlPDwxMCl9LFdOPWZ1bmN0aW9uKGUpe3JldHVybihlPj4+NnxlPDwyNileKGU+Pj4xMXxlPDwyMSleKGU+Pj4yNXxlPDw3KX0sVk49ZnVuY3Rpb24oZSl7cmV0dXJuKGU+Pj43fGU8PDI1KV4oZT4+PjE4fGU8PDE0KV5lPj4+M30sSE49ZnVuY3Rpb24oZSl7cmV0dXJuKGU+Pj4xN3xlPDwxNSleKGU+Pj4xOXxlPDwxMyleZT4+PjEwfTtmdW5jdGlvbiBLTigpe3ZhciB0PW5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbNjUyNzldKS5idWZmZXIpO3JldHVybiB0WzBdPT09MjU0fXZhciBaTj1mdW5jdGlvbihlKXtyZXR1cm4gRE4oKS51cGRhdGUoZSkuZGlnZXN0KCJoZXgiKX07ZnVuY3Rpb24gcnUoKXtydT1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgdCxlPXt9LG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksaT1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKFIsUCxiKXtSW1BdPWIudmFsdWV9LG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIj9TeW1ib2w6e30sbD1vLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1vLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGE9by50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHUoUixQLGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoUixQLHt2YWx1ZTpiLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksUltQXX10cnl7dSh7fSwiIil9Y2F0Y2h7dT1mdW5jdGlvbihQLGIseil7cmV0dXJuIFBbYl09en19ZnVuY3Rpb24gYyhSLFAsYix6KXt2YXIgaj1QJiZQLnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/UDp2LFo9T2JqZWN0LmNyZWF0ZShqLnByb3RvdHlwZSksbmU9bmV3IFYoenx8W10pO3JldHVybiBpKFosIl9pbnZva2UiLHt2YWx1ZTprKFIsYixuZSl9KSxafWZ1bmN0aW9uIGQoUixQLGIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6Ui5jYWxsKFAsYil9fWNhdGNoKHope3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOnp9fX1lLndyYXA9Yzt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLGg9InN1c3BlbmRlZFlpZWxkIixnPSJleGVjdXRpbmciLG09ImNvbXBsZXRlZCIsdz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gXygpe312YXIgUz17fTt1KFMsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dmFyIEU9T2JqZWN0LmdldFByb3RvdHlwZU9mLCQ9RSYmRShFKEsoW10pKSk7JCYmJCE9PW4mJnIuY2FsbCgkLGwpJiYoUz0kKTt2YXIgQz1fLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMpO2Z1bmN0aW9uIE4oUil7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKFApe3UoUixQLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9pbnZva2UoUCxiKX0pfSl9ZnVuY3Rpb24gQShSLFApe2Z1bmN0aW9uIGIoaixaLG5lLGtlKXt2YXIgeWU9ZChSW2pdLFIsWik7aWYoeWUudHlwZSE9PSJ0aHJvdyIpe3ZhciBXZT15ZS5hcmcsRmU9V2UudmFsdWU7cmV0dXJuIEZlJiZ0eXBlb2YgRmU9PSJvYmplY3QiJiZyLmNhbGwoRmUsIl9fYXdhaXQiKT9QLnJlc29sdmUoRmUuX19hd2FpdCkudGhlbihmdW5jdGlvbih0ZSl7YigibmV4dCIsdGUsbmUsa2UpfSxmdW5jdGlvbih0ZSl7YigidGhyb3ciLHRlLG5lLGtlKX0pOlAucmVzb2x2ZShGZSkudGhlbihmdW5jdGlvbih0ZSl7V2UudmFsdWU9dGUsbmUoV2UpfSxmdW5jdGlvbih0ZSl7cmV0dXJuIGIoInRocm93Iix0ZSxuZSxrZSl9KX1rZSh5ZS5hcmcpfXZhciB6O2kodGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKGosWil7ZnVuY3Rpb24gbmUoKXtyZXR1cm4gbmV3IFAoZnVuY3Rpb24oa2UseWUpe2IoaixaLGtlLHllKX0pfXJldHVybiB6PXo/ei50aGVuKG5lLG5lKTpuZSgpfX0pfWZ1bmN0aW9uIGsoUixQLGIpe3ZhciB6PWY7cmV0dXJuIGZ1bmN0aW9uKGosWil7aWYoej09PWcpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoej09PW0pe2lmKGo9PT0idGhyb3ciKXRocm93IFo7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19Zm9yKGIubWV0aG9kPWosYi5hcmc9Wjs7KXt2YXIgbmU9Yi5kZWxlZ2F0ZTtpZihuZSl7dmFyIGtlPU0obmUsYik7aWYoa2Upe2lmKGtlPT09dyljb250aW51ZTtyZXR1cm4ga2V9fWlmKGIubWV0aG9kPT09Im5leHQiKWIuc2VudD1iLl9zZW50PWIuYXJnO2Vsc2UgaWYoYi5tZXRob2Q9PT0idGhyb3ciKXtpZih6PT09Zil0aHJvdyB6PW0sYi5hcmc7Yi5kaXNwYXRjaEV4Y2VwdGlvbihiLmFyZyl9ZWxzZSBiLm1ldGhvZD09PSJyZXR1cm4iJiZiLmFicnVwdCgicmV0dXJuIixiLmFyZyk7ej1nO3ZhciB5ZT1kKFIsUCxiKTtpZih5ZS50eXBlPT09Im5vcm1hbCIpe2lmKHo9Yi5kb25lP206aCx5ZS5hcmc9PT13KWNvbnRpbnVlO3JldHVybnt2YWx1ZTp5ZS5hcmcsZG9uZTpiLmRvbmV9fXllLnR5cGU9PT0idGhyb3ciJiYoej1tLGIubWV0aG9kPSJ0aHJvdyIsYi5hcmc9eWUuYXJnKX19fWZ1bmN0aW9uIE0oUixQKXt2YXIgYj1QLm1ldGhvZCx6PVIuaXRlcmF0b3JbYl07aWYoej09PXQpcmV0dXJuIFAuZGVsZWdhdGU9bnVsbCxiPT09InRocm93IiYmUi5pdGVyYXRvci5yZXR1cm4mJihQLm1ldGhvZD0icmV0dXJuIixQLmFyZz10LE0oUixQKSxQLm1ldGhvZD09PSJ0aHJvdyIpfHxiIT09InJldHVybiImJihQLm1ldGhvZD0idGhyb3ciLFAuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrYisiJyBtZXRob2QiKSksdzt2YXIgaj1kKHosUi5pdGVyYXRvcixQLmFyZyk7aWYoai50eXBlPT09InRocm93IilyZXR1cm4gUC5tZXRob2Q9InRocm93IixQLmFyZz1qLmFyZyxQLmRlbGVnYXRlPW51bGwsdzt2YXIgWj1qLmFyZztyZXR1cm4gWj9aLmRvbmU/KFBbUi5yZXN1bHROYW1lXT1aLnZhbHVlLFAubmV4dD1SLm5leHRMb2MsUC5tZXRob2QhPT0icmV0dXJuIiYmKFAubWV0aG9kPSJuZXh0IixQLmFyZz10KSxQLmRlbGVnYXRlPW51bGwsdyk6WjooUC5tZXRob2Q9InRocm93IixQLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLFAuZGVsZWdhdGU9bnVsbCx3KX1mdW5jdGlvbiBEKFIpe3ZhciBQPXt0cnlMb2M6UlswXX07MSBpbiBSJiYoUC5jYXRjaExvYz1SWzFdKSwyIGluIFImJihQLmZpbmFsbHlMb2M9UlsyXSxQLmFmdGVyTG9jPVJbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKFApfWZ1bmN0aW9uIGllKFIpe3ZhciBQPVIuY29tcGxldGlvbnx8e307UC50eXBlPSJub3JtYWwiLGRlbGV0ZSBQLmFyZyxSLmNvbXBsZXRpb249UH1mdW5jdGlvbiBWKFIpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxSLmZvckVhY2goRCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBLKFIpe2lmKFJ8fFI9PT0iIil7dmFyIFA9UltsXTtpZihQKXJldHVybiBQLmNhbGwoUik7aWYodHlwZW9mIFIubmV4dD09ImZ1bmN0aW9uIilyZXR1cm4gUjtpZighaXNOYU4oUi5sZW5ndGgpKXt2YXIgYj0tMSx6PWZ1bmN0aW9uIGooKXtmb3IoOysrYjxSLmxlbmd0aDspaWYoci5jYWxsKFIsYikpcmV0dXJuIGoudmFsdWU9UltiXSxqLmRvbmU9ITEsajtyZXR1cm4gai52YWx1ZT10LGouZG9uZT0hMCxqfTtyZXR1cm4gei5uZXh0PXp9fXRocm93IG5ldyBUeXBlRXJyb3IodHlwZW9mIFIrIiBpcyBub3QgaXRlcmFibGUiKX1yZXR1cm4geS5wcm90b3R5cGU9XyxpKEMsImNvbnN0cnVjdG9yIix7dmFsdWU6Xyxjb25maWd1cmFibGU6ITB9KSxpKF8sImNvbnN0cnVjdG9yIix7dmFsdWU6eSxjb25maWd1cmFibGU6ITB9KSx5LmRpc3BsYXlOYW1lPXUoXyxhLCJHZW5lcmF0b3JGdW5jdGlvbiIpLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihSKXt2YXIgUD10eXBlb2YgUj09ImZ1bmN0aW9uIiYmUi5jb25zdHJ1Y3RvcjtyZXR1cm4hIVAmJihQPT09eXx8KFAuZGlzcGxheU5hbWV8fFAubmFtZSk9PT0iR2VuZXJhdG9yRnVuY3Rpb24iKX0sZS5tYXJrPWZ1bmN0aW9uKFIpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKFIsXyk6KFIuX19wcm90b19fPV8sdShSLGEsIkdlbmVyYXRvckZ1bmN0aW9uIikpLFIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQyksUn0sZS5hd3JhcD1mdW5jdGlvbihSKXtyZXR1cm57X19hd2FpdDpSfX0sTihBLnByb3RvdHlwZSksdShBLnByb3RvdHlwZSxzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxlLkFzeW5jSXRlcmF0b3I9QSxlLmFzeW5jPWZ1bmN0aW9uKFIsUCxiLHosail7aj09PXZvaWQgMCYmKGo9UHJvbWlzZSk7dmFyIFo9bmV3IEEoYyhSLFAsYix6KSxqKTtyZXR1cm4gZS5pc0dlbmVyYXRvckZ1bmN0aW9uKFApP1o6Wi5uZXh0KCkudGhlbihmdW5jdGlvbihuZSl7cmV0dXJuIG5lLmRvbmU/bmUudmFsdWU6Wi5uZXh0KCl9KX0sTihDKSx1KEMsYSwiR2VuZXJhdG9yIiksdShDLGwsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHUoQywidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSxlLmtleXM9ZnVuY3Rpb24oUil7dmFyIFA9T2JqZWN0KFIpLGI9W107Zm9yKHZhciB6IGluIFApYi5wdXNoKHopO3JldHVybiBiLnJldmVyc2UoKSxmdW5jdGlvbiBqKCl7Zm9yKDtiLmxlbmd0aDspe3ZhciBaPWIucG9wKCk7aWYoWiBpbiBQKXJldHVybiBqLnZhbHVlPVosai5kb25lPSExLGp9cmV0dXJuIGouZG9uZT0hMCxqfX0sZS52YWx1ZXM9SyxWLnByb3RvdHlwZT17Y29uc3RydWN0b3I6VixyZXNldDpmdW5jdGlvbihSKXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goaWUpLCFSKWZvcih2YXIgUCBpbiB0aGlzKVAuY2hhckF0KDApPT09InQiJiZyLmNhbGwodGhpcyxQKSYmIWlzTmFOKCtQLnNsaWNlKDEpKSYmKHRoaXNbUF09dCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIFI9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoUi50eXBlPT09InRocm93Iil0aHJvdyBSLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihSKXtpZih0aGlzLmRvbmUpdGhyb3cgUjt2YXIgUD10aGlzO2Z1bmN0aW9uIGIoeWUsV2Upe3JldHVybiBaLnR5cGU9InRocm93IixaLmFyZz1SLFAubmV4dD15ZSxXZSYmKFAubWV0aG9kPSJuZXh0IixQLmFyZz10KSwhIVdlfWZvcih2YXIgej10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ej49MDstLXope3ZhciBqPXRoaXMudHJ5RW50cmllc1t6XSxaPWouY29tcGxldGlvbjtpZihqLnRyeUxvYz09PSJyb290IilyZXR1cm4gYigiZW5kIik7aWYoai50cnlMb2M8PXRoaXMucHJldil7dmFyIG5lPXIuY2FsbChqLCJjYXRjaExvYyIpLGtlPXIuY2FsbChqLCJmaW5hbGx5TG9jIik7aWYobmUmJmtlKXtpZih0aGlzLnByZXY8ai5jYXRjaExvYylyZXR1cm4gYihqLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8ai5maW5hbGx5TG9jKXJldHVybiBiKGouZmluYWxseUxvYyl9ZWxzZSBpZihuZSl7aWYodGhpcy5wcmV2PGouY2F0Y2hMb2MpcmV0dXJuIGIoai5jYXRjaExvYywhMCl9ZWxzZXtpZigha2UpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxqLmZpbmFsbHlMb2MpcmV0dXJuIGIoai5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKFIsUCl7Zm9yKHZhciBiPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtiPj0wOy0tYil7dmFyIHo9dGhpcy50cnlFbnRyaWVzW2JdO2lmKHoudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbCh6LCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjx6LmZpbmFsbHlMb2Mpe3ZhciBqPXo7YnJlYWt9fWomJihSPT09ImJyZWFrInx8Uj09PSJjb250aW51ZSIpJiZqLnRyeUxvYzw9UCYmUDw9ai5maW5hbGx5TG9jJiYoaj1udWxsKTt2YXIgWj1qP2ouY29tcGxldGlvbjp7fTtyZXR1cm4gWi50eXBlPVIsWi5hcmc9UCxqPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWouZmluYWxseUxvYyx3KTp0aGlzLmNvbXBsZXRlKFopfSxjb21wbGV0ZTpmdW5jdGlvbihSLFApe2lmKFIudHlwZT09PSJ0aHJvdyIpdGhyb3cgUi5hcmc7cmV0dXJuIFIudHlwZT09PSJicmVhayJ8fFIudHlwZT09PSJjb250aW51ZSI/dGhpcy5uZXh0PVIuYXJnOlIudHlwZT09PSJyZXR1cm4iPyh0aGlzLnJ2YWw9dGhpcy5hcmc9Ui5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKTpSLnR5cGU9PT0ibm9ybWFsIiYmUCYmKHRoaXMubmV4dD1QKSx3fSxmaW5pc2g6ZnVuY3Rpb24oUil7Zm9yKHZhciBQPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtQPj0wOy0tUCl7dmFyIGI9dGhpcy50cnlFbnRyaWVzW1BdO2lmKGIuZmluYWxseUxvYz09PVIpcmV0dXJuIHRoaXMuY29tcGxldGUoYi5jb21wbGV0aW9uLGIuYWZ0ZXJMb2MpLGllKGIpLHd9fSxjYXRjaDpmdW5jdGlvbihSKXtmb3IodmFyIFA9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO1A+PTA7LS1QKXt2YXIgYj10aGlzLnRyeUVudHJpZXNbUF07aWYoYi50cnlMb2M9PT1SKXt2YXIgej1iLmNvbXBsZXRpb247aWYoei50eXBlPT09InRocm93Iil7dmFyIGo9ei5hcmc7aWUoYil9cmV0dXJuIGp9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oUixQLGIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpLKFIpLHJlc3VsdE5hbWU6UCxuZXh0TG9jOmJ9LHRoaXMubWV0aG9kPT09Im5leHQiJiYodGhpcy5hcmc9dCksd319LGV9ZnVuY3Rpb24gVDAodCxlLG4scixpLG8sbCl7dHJ5e3ZhciBzPXRbb10obCksYT1zLnZhbHVlfWNhdGNoKHUpe24odSk7cmV0dXJufXMuZG9uZT9lKGEpOlByb21pc2UucmVzb2x2ZShhKS50aGVuKHIsaSl9ZnVuY3Rpb24gcXcodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxuPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixpKXt2YXIgbz10LmFwcGx5KGUsbik7ZnVuY3Rpb24gbChhKXtUMChvLHIsaSxsLHMsIm5leHQiLGEpfWZ1bmN0aW9uIHMoYSl7VDAobyxyLGksbCxzLCJ0aHJvdyIsYSl9bCh2b2lkIDApfSl9fXZhciBHTj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7R24odGhpcyx0KSx0aGlzLmhvc3Q9ZX1yZXR1cm4gWW4odCxbe2tleToiZ2V0RGlzYWJsZVVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2Rpc2FibGU/cmVkaXJlY3RfdG89IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudChuKSl9fSx7a2V5OiJnZXRMb2dpblVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2F1dGhvcml6ZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldEVuYWJsZVVybCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIiIuY29uY2F0KHRoaXMuaG9zdCwiL2VuYWJsZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldFBhdGNoZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9cXcocnUoKS5tYXJrKGZ1bmN0aW9uIHIoaSl7dmFyIG8sbCxzO3JldHVybiBydSgpLndyYXAoZnVuY3Rpb24odSl7Zm9yKDs7KXN3aXRjaCh1LnByZXY9dS5uZXh0KXtjYXNlIDA6cmV0dXJuIG89aS5wYXRjaElkcyxsPWkuaGVhZGVycyxzPW8/Ij8iLmNvbmNhdChvLm1hcChmdW5jdGlvbihjKXtyZXR1cm4iIi5jb25jYXQoYywiPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQoYykpfSkuam9pbigiJiIpKToiIix1LmFicnVwdCgicmV0dXJuIixmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvcGF0Y2hlcy9+IikuY29uY2F0KHMpLHtoZWFkZXJzOmx8fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihmdW5jdGlvbihjKXtyZXR1cm4gdGEoYyl9KS5jYXRjaChlYSkpO2Nhc2UgMzpjYXNlImVuZCI6cmV0dXJuIHUuc3RvcCgpfX0scix0aGlzKX0pKTtmdW5jdGlvbiBuKHIpe3JldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbn0oKX0se2tleToiZ2V0RWRpdFVybCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4iIi5jb25jYXQodGhpcy5ob3N0LCIvc3RhdGljL2VkaXQiKX19LHtrZXk6InBvc3RQYXRjaGVzIix2YWx1ZTpmdW5jdGlvbihuLHIsaSl7cmV0dXJuIGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi9wYXRjaGVzL34iKSx7aGVhZGVyczppfHx7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxtZXRob2Q6IlBPU1QiLGJvZHk6SlNPTi5zdHJpbmdpZnkobWUoe30sbixyKSl9KS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiB0YShvKX0pLmNhdGNoKGVhKX19LHtrZXk6ImdldFNlc3Npb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi9zZXNzaW9uIikpLnRoZW4oZnVuY3Rpb24obil7cmV0dXJuIHRhKG4pLmNhdGNoKGVhKX0pfX0se2tleToiZ2V0VHJlZSIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIHI9bi5wYXRjaCxpPXI9PT12b2lkIDA/ITE6cixvPW4uaW5jbHVkZVNjaGVtYSxsPW89PT12b2lkIDA/ITE6byxzPW4uaW5jbHVkZVNvdXJjZSxhPXM9PT12b2lkIDA/ITE6cyx1PW4udHJlZVBhdGgsYz11PT09dm9pZCAwPyIvIjp1LGQ9bi5oZWFkZXJzLGY9bmV3IFVSTFNlYXJjaFBhcmFtcztyZXR1cm4gZi5zZXQoInBhdGNoIixpLnRvU3RyaW5nKCkpLGYuc2V0KCJzY2hlbWEiLGwudG9TdHJpbmcoKSksZi5zZXQoInNvdXJjZSIsYS50b1N0cmluZygpKSxmZXRjaCgiIi5jb25jYXQodGhpcy5ob3N0LCIvdHJlZS9+IikuY29uY2F0KGMsIj8iKS5jb25jYXQoZi50b1N0cmluZygpKSx7aGVhZGVyczpkfSkudGhlbihmdW5jdGlvbihoKXtyZXR1cm4gdGEoaCl9KS5jYXRjaChlYSl9fSx7a2V5OiJwb3N0Q29tbWl0Iix2YWx1ZTpmdW5jdGlvbihuKXt2YXIgcj1uLnBhdGNoZXMsaT1uLmhlYWRlcnM7cmV0dXJuIGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi9jb21taXQiKSx7bWV0aG9kOiJQT1NUIixib2R5OkpTT04uc3RyaW5naWZ5KHtwYXRjaGVzOnJ9KSxoZWFkZXJzOml8fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihmdW5jdGlvbihvKXtyZXR1cm4gdGEobyl9KS5jYXRjaChlYSl9fV0pLHR9KCk7ZnVuY3Rpb24gZWEodCl7cmV0dXJuIFVyKHtzdGF0dXNDb2RlOjUwMCxtZXNzYWdlOnQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6IlVua25vd24gZXJyb3IifSl9ZnVuY3Rpb24gdGEodCl7cmV0dXJuIFlwLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBZcCgpe3JldHVybiBZcD1xdyhydSgpLm1hcmsoZnVuY3Rpb24gdChlKXt2YXIgbjtyZXR1cm4gcnUoKS53cmFwKGZ1bmN0aW9uKGkpe2Zvcig7Oylzd2l0Y2goaS5wcmV2PWkubmV4dCl7Y2FzZSAwOmlmKGkucHJldj0wLCFlLm9rKXtpLm5leHQ9OTticmVha31yZXR1cm4gaS50MD16byxpLm5leHQ9NSxlLmpzb24oKTtjYXNlIDU6cmV0dXJuIGkudDE9aS5zZW50LGkuYWJydXB0KCJyZXR1cm4iLGkudDAub2suY2FsbChpLnQwLGkudDEpKTtjYXNlIDk6cmV0dXJuIGkucHJldj05LGkubmV4dD0xMixlLmpzb24oKTtjYXNlIDEyOnJldHVybiBuPWkuc2VudCxpLmFicnVwdCgicmV0dXJuIixVcih7c3RhdHVzQ29kZTplLnN0YXR1cyxtZXNzYWdlOm4ubWVzc2FnZXx8ZS5zdGF0dXNUZXh0LGRldGFpbHM6bi5kZXRhaWxzfHxPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobikuZmlsdGVyKGZ1bmN0aW9uKG8pe3ZhciBsPW5vKG8sMSkscz1sWzBdO3JldHVybiBzIT09Im1lc3NhZ2UifSkpfSkpO2Nhc2UgMTY6cmV0dXJuIGkucHJldj0xNixpLnQyPWkuY2F0Y2goOSksaS5hYnJ1cHQoInJldHVybiIsVXIoe3N0YXR1c0NvZGU6ZS5zdGF0dXMsbWVzc2FnZTplLnN0YXR1c1RleHR9KSk7Y2FzZSAxOTppLm5leHQ9MjQ7YnJlYWs7Y2FzZSAyMTpyZXR1cm4gaS5wcmV2PTIxLGkudDM9aS5jYXRjaCgwKSxpLmFicnVwdCgicmV0dXJuIixVcih7bWVzc2FnZTppLnQzIGluc3RhbmNlb2YgRXJyb3I/aS50My5tZXNzYWdlOiJVbmtub3duIGVycm9yIn0pKTtjYXNlIDI0OmNhc2UiZW5kIjpyZXR1cm4gaS5zdG9wKCl9fSx0LG51bGwsW1swLDIxXSxbOSwxNl1dKX0pKSxZcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dmFyIE9uPXtjb252ZXJ0RmlsZVNvdXJjZTpZdyxnZXRTY2hlbWE6Y04sZ2V0VmFsUGF0aDpoTixnZXRWYWw6T04sZ2V0U291cmNlOl9OLHJlc29sdmVQYXRoOlROLHNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoOndOLGlzVmFsOmZOLGNyZWF0ZVZhbFBhdGhPZkl0ZW06cnIsZ2V0U0hBMjU2SGFzaDpaTixjcmVhdGVQYXRjaEpTT05QYXRoOmZ1bmN0aW9uKGUpe3JldHVybiIvIi5jb25jYXQoZS5zcGxpdCgiLiIpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbiYmWU4obil9KS5qb2luKCIvIikpfSxWQUxfRU5BQkxFX0NPT0tJRV9OQU1FOiJ2YWxfZW5hYmxlIixWQUxfU1RBVEVfQ09PS0lFOiJ2YWxfc3RhdGUiLFZBTF9TRVNTSU9OX0NPT0tJRToidmFsX3Nlc3Npb24ifTtmdW5jdGlvbiBZTih0KXt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2h7cmV0dXJuIHR9fXZhciBlUz17ZXhwb3J0czp7fX07LyohCglDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi4KCUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlCglodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzCiovKGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciBlPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG4oKXtmb3IodmFyIHI9W10saT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspe3ZhciBvPWFyZ3VtZW50c1tpXTtpZihvKXt2YXIgbD10eXBlb2YgbztpZihsPT09InN0cmluZyJ8fGw9PT0ibnVtYmVyIilyLnB1c2gobyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KG8pKXtpZihvLmxlbmd0aCl7dmFyIHM9bi5hcHBseShudWxsLG8pO3MmJnIucHVzaChzKX19ZWxzZSBpZihsPT09Im9iamVjdCIpe2lmKG8udG9TdHJpbmchPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJiYhby50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCJbbmF0aXZlIGNvZGVdIikpe3IucHVzaChvLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWZvcih2YXIgYSBpbiBvKWUuY2FsbChvLGEpJiZvW2FdJiZyLnB1c2goYSl9fX1yZXR1cm4gci5qb2luKCIgIil9dC5leHBvcnRzPyhuLmRlZmF1bHQ9bix0LmV4cG9ydHM9bik6d2luZG93LmNsYXNzTmFtZXM9bn0pKCl9KShlUyk7dmFyIFhOPWVTLmV4cG9ydHM7Y29uc3QgUG49T3UoWE4pO2Z1bmN0aW9uIG9lKCl7cmV0dXJuIG9lPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sb2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEpOKHQsZSl7dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0IT1udWxsJiYodC5jdXJyZW50PWUpfWZ1bmN0aW9uIHRTKC4uLnQpe3JldHVybiBlPT50LmZvckVhY2gobj0+Sk4obixlKSl9ZnVuY3Rpb24gc3QoLi4udCl7cmV0dXJuIHAudXNlQ2FsbGJhY2sodFMoLi4udCksdCl9Y29uc3QgaHM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7Y2hpbGRyZW46biwuLi5yfT10LGk9cC5DaGlsZHJlbi50b0FycmF5KG4pLG89aS5maW5kKHFOKTtpZihvKXtjb25zdCBsPW8ucHJvcHMuY2hpbGRyZW4scz1pLm1hcChhPT5hPT09bz9wLkNoaWxkcmVuLmNvdW50KGwpPjE/cC5DaGlsZHJlbi5vbmx5KG51bGwpOnAuaXNWYWxpZEVsZW1lbnQobCk/bC5wcm9wcy5jaGlsZHJlbjpudWxsOmEpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoWHAsb2Uoe30scix7cmVmOmV9KSxwLmlzVmFsaWRFbGVtZW50KGwpP3AuY2xvbmVFbGVtZW50KGwsdm9pZCAwLHMpOm51bGwpfXJldHVybiBwLmNyZWF0ZUVsZW1lbnQoWHAsb2Uoe30scix7cmVmOmV9KSxuKX0pO2hzLmRpc3BsYXlOYW1lPSJTbG90Ijtjb25zdCBYcD1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtjaGlsZHJlbjpuLC4uLnJ9PXQ7cmV0dXJuIHAuaXNWYWxpZEVsZW1lbnQobik/cC5jbG9uZUVsZW1lbnQobix7Li4uZTIocixuLnByb3BzKSxyZWY6ZT90UyhlLG4ucmVmKTpuLnJlZn0pOnAuQ2hpbGRyZW4uY291bnQobik+MT9wLkNoaWxkcmVuLm9ubHkobnVsbCk6bnVsbH0pO1hwLmRpc3BsYXlOYW1lPSJTbG90Q2xvbmUiO2NvbnN0IFFOPSh7Y2hpbGRyZW46dH0pPT5wLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHQpO2Z1bmN0aW9uIHFOKHQpe3JldHVybiBwLmlzVmFsaWRFbGVtZW50KHQpJiZ0LnR5cGU9PT1RTn1mdW5jdGlvbiBlMih0LGUpe2NvbnN0IG49ey4uLmV9O2Zvcihjb25zdCByIGluIGUpe2NvbnN0IGk9dFtyXSxvPWVbcl07L15vbltBLVpdLy50ZXN0KHIpP2kmJm8/bltyXT0oLi4ucyk9PntvKC4uLnMpLGkoLi4ucyl9OmkmJihuW3JdPWkpOnI9PT0ic3R5bGUiP25bcl09ey4uLmksLi4ub306cj09PSJjbGFzc05hbWUiJiYobltyXT1baSxvXS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpKX1yZXR1cm57Li4udCwuLi5ufX1jb25zdCB0Mj1bImEiLCJidXR0b24iLCJkaXYiLCJmb3JtIiwiaDIiLCJoMyIsImltZyIsImlucHV0IiwibGFiZWwiLCJsaSIsIm5hdiIsIm9sIiwicCIsInNwYW4iLCJzdmciLCJ1bCJdLEtlPXQyLnJlZHVjZSgodCxlKT0+e2NvbnN0IG49cC5mb3J3YXJkUmVmKChyLGkpPT57Y29uc3R7YXNDaGlsZDpvLC4uLmx9PXIscz1vP2hzOmU7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57d2luZG93W1N5bWJvbC5mb3IoInJhZGl4LXVpIildPSEwfSxbXSkscC5jcmVhdGVFbGVtZW50KHMsb2Uoe30sbCx7cmVmOml9KSl9KTtyZXR1cm4gbi5kaXNwbGF5TmFtZT1gUHJpbWl0aXZlLiR7ZX1gLHsuLi50LFtlXTpufX0se30pO2Z1bmN0aW9uIG4yKHQsZSl7dCYmWXIuZmx1c2hTeW5jKCgpPT50LmRpc3BhdGNoRXZlbnQoZSkpfWNvbnN0IFZuPWdsb2JhbFRoaXMhPW51bGwmJmdsb2JhbFRoaXMuZG9jdW1lbnQ/cC51c2VMYXlvdXRFZmZlY3Q6KCk9Pnt9O2Z1bmN0aW9uIHIyKHQsZSl7cmV0dXJuIHAudXNlUmVkdWNlcigobixyKT0+e2NvbnN0IGk9ZVtuXVtyXTtyZXR1cm4gaT8/bn0sdCl9Y29uc3QgYnM9dD0+e2NvbnN0e3ByZXNlbnQ6ZSxjaGlsZHJlbjpufT10LHI9aTIoZSksaT10eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKHtwcmVzZW50OnIuaXNQcmVzZW50fSk6cC5DaGlsZHJlbi5vbmx5KG4pLG89c3Qoci5yZWYsaS5yZWYpO3JldHVybiB0eXBlb2Ygbj09ImZ1bmN0aW9uInx8ci5pc1ByZXNlbnQ/cC5jbG9uZUVsZW1lbnQoaSx7cmVmOm99KTpudWxsfTticy5kaXNwbGF5TmFtZT0iUHJlc2VuY2UiO2Z1bmN0aW9uIGkyKHQpe2NvbnN0W2Usbl09cC51c2VTdGF0ZSgpLHI9cC51c2VSZWYoe30pLGk9cC51c2VSZWYodCksbz1wLnVzZVJlZigibm9uZSIpLGw9dD8ibW91bnRlZCI6InVubW91bnRlZCIsW3MsYV09cjIobCx7bW91bnRlZDp7VU5NT1VOVDoidW5tb3VudGVkIixBTklNQVRJT05fT1VUOiJ1bm1vdW50U3VzcGVuZGVkIn0sdW5tb3VudFN1c3BlbmRlZDp7TU9VTlQ6Im1vdW50ZWQiLEFOSU1BVElPTl9FTkQ6InVubW91bnRlZCJ9LHVubW91bnRlZDp7TU9VTlQ6Im1vdW50ZWQifX0pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHU9bWMoci5jdXJyZW50KTtvLmN1cnJlbnQ9cz09PSJtb3VudGVkIj91OiJub25lIn0sW3NdKSxWbigoKT0+e2NvbnN0IHU9ci5jdXJyZW50LGM9aS5jdXJyZW50O2lmKGMhPT10KXtjb25zdCBmPW8uY3VycmVudCxoPW1jKHUpO3Q/YSgiTU9VTlQiKTpoPT09Im5vbmUifHwodT09bnVsbD92b2lkIDA6dS5kaXNwbGF5KT09PSJub25lIj9hKCJVTk1PVU5UIik6YShjJiZmIT09aD8iQU5JTUFUSU9OX09VVCI6IlVOTU9VTlQiKSxpLmN1cnJlbnQ9dH19LFt0LGFdKSxWbigoKT0+e2lmKGUpe2NvbnN0IHU9ZD0+e2NvbnN0IGg9bWMoci5jdXJyZW50KS5pbmNsdWRlcyhkLmFuaW1hdGlvbk5hbWUpO2QudGFyZ2V0PT09ZSYmaCYmWXIuZmx1c2hTeW5jKCgpPT5hKCJBTklNQVRJT05fRU5EIikpfSxjPWQ9PntkLnRhcmdldD09PWUmJihvLmN1cnJlbnQ9bWMoci5jdXJyZW50KSl9O3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0IixjKSxlLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsdSksZS5hZGRFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLHUpLCgpPT57ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25zdGFydCIsYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25jYW5jZWwiLHUpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uZW5kIix1KX19ZWxzZSBhKCJBTklNQVRJT05fRU5EIil9LFtlLGFdKSx7aXNQcmVzZW50OlsibW91bnRlZCIsInVubW91bnRTdXNwZW5kZWQiXS5pbmNsdWRlcyhzKSxyZWY6cC51c2VDYWxsYmFjayh1PT57dSYmKHIuY3VycmVudD1nZXRDb21wdXRlZFN0eWxlKHUpKSxuKHUpfSxbXSl9fWZ1bmN0aW9uIG1jKHQpe3JldHVybih0PT1udWxsP3ZvaWQgMDp0LmFuaW1hdGlvbk5hbWUpfHwibm9uZSJ9ZnVuY3Rpb24gYWwodCxlPVtdKXtsZXQgbj1bXTtmdW5jdGlvbiByKG8sbCl7Y29uc3Qgcz1wLmNyZWF0ZUNvbnRleHQobCksYT1uLmxlbmd0aDtuPVsuLi5uLGxdO2Z1bmN0aW9uIHUoZCl7Y29uc3R7c2NvcGU6ZixjaGlsZHJlbjpoLC4uLmd9PWQsbT0oZj09bnVsbD92b2lkIDA6Zlt0XVthXSl8fHMsdz1wLnVzZU1lbW8oKCk9PmcsT2JqZWN0LnZhbHVlcyhnKSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChtLlByb3ZpZGVyLHt2YWx1ZTp3fSxoKX1mdW5jdGlvbiBjKGQsZil7Y29uc3QgaD0oZj09bnVsbD92b2lkIDA6Zlt0XVthXSl8fHMsZz1wLnVzZUNvbnRleHQoaCk7aWYoZylyZXR1cm4gZztpZihsIT09dm9pZCAwKXJldHVybiBsO3Rocm93IG5ldyBFcnJvcihgXGAke2R9XGAgbXVzdCBiZSB1c2VkIHdpdGhpbiBcYCR7b31cYGApfXJldHVybiB1LmRpc3BsYXlOYW1lPW8rIlByb3ZpZGVyIixbdSxjXX1jb25zdCBpPSgpPT57Y29uc3Qgbz1uLm1hcChsPT5wLmNyZWF0ZUNvbnRleHQobCkpO3JldHVybiBmdW5jdGlvbihzKXtjb25zdCBhPShzPT1udWxsP3ZvaWQgMDpzW3RdKXx8bztyZXR1cm4gcC51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7dH1gXTp7Li4ucyxbdF06YX19KSxbcyxhXSl9fTtyZXR1cm4gaS5zY29wZU5hbWU9dCxbcixvMihpLC4uLmUpXX1mdW5jdGlvbiBvMiguLi50KXtjb25zdCBlPXRbMF07aWYodC5sZW5ndGg9PT0xKXJldHVybiBlO2NvbnN0IG49KCk9Pntjb25zdCByPXQubWFwKGk9Pih7dXNlU2NvcGU6aSgpLHNjb3BlTmFtZTppLnNjb3BlTmFtZX0pKTtyZXR1cm4gZnVuY3Rpb24obyl7Y29uc3QgbD1yLnJlZHVjZSgocyx7dXNlU2NvcGU6YSxzY29wZU5hbWU6dX0pPT57Y29uc3QgZD1hKG8pW2BfX3Njb3BlJHt1fWBdO3JldHVybnsuLi5zLC4uLmR9fSx7fSk7cmV0dXJuIHAudXNlTWVtbygoKT0+KHtbYF9fc2NvcGUke2Uuc2NvcGVOYW1lfWBdOmx9KSxbbF0pfX07cmV0dXJuIG4uc2NvcGVOYW1lPWUuc2NvcGVOYW1lLG59ZnVuY3Rpb24gZW4odCl7Y29uc3QgZT1wLnVzZVJlZih0KTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntlLmN1cnJlbnQ9dH0pLHAudXNlTWVtbygoKT0+KC4uLm4pPT57dmFyIHI7cmV0dXJuKHI9ZS5jdXJyZW50KT09PW51bGx8fHI9PT12b2lkIDA/dm9pZCAwOnIuY2FsbChlLC4uLm4pfSxbXSl9Y29uc3QgbDI9cC5jcmVhdGVDb250ZXh0KHZvaWQgMCk7ZnVuY3Rpb24gWWcodCl7Y29uc3QgZT1wLnVzZUNvbnRleHQobDIpO3JldHVybiB0fHxlfHwibHRyIn1mdW5jdGlvbiBKcCh0LFtlLG5dKXtyZXR1cm4gTWF0aC5taW4obixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBudCh0LGUse2NoZWNrRm9yRGVmYXVsdFByZXZlbnRlZDpuPSEwfT17fSl7cmV0dXJuIGZ1bmN0aW9uKGkpe2lmKHQ9PW51bGx8fHQoaSksbj09PSExfHwhaS5kZWZhdWx0UHJldmVudGVkKXJldHVybiBlPT1udWxsP3ZvaWQgMDplKGkpfX1mdW5jdGlvbiBzMih0LGUpe3JldHVybiBwLnVzZVJlZHVjZXIoKG4scik9Pntjb25zdCBpPWVbbl1bcl07cmV0dXJuIGk/P259LHQpfWNvbnN0IG5TPSJTY3JvbGxBcmVhIixbclMsVEldPWFsKG5TKSxbYTIsdXJdPXJTKG5TKSx1Mj1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2Nyb2xsQXJlYTpuLHR5cGU6cj0iaG92ZXIiLGRpcjppLHNjcm9sbEhpZGVEZWxheTpvPTYwMCwuLi5sfT10LFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZShudWxsKSxbZCxmXT1wLnVzZVN0YXRlKG51bGwpLFtoLGddPXAudXNlU3RhdGUobnVsbCksW20sd109cC51c2VTdGF0ZShudWxsKSxbdix5XT1wLnVzZVN0YXRlKDApLFtfLFNdPXAudXNlU3RhdGUoMCksW0UsJF09cC51c2VTdGF0ZSghMSksW0MsTl09cC51c2VTdGF0ZSghMSksQT1zdChlLE09PmEoTSkpLGs9WWcoaSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChhMix7c2NvcGU6bix0eXBlOnIsZGlyOmssc2Nyb2xsSGlkZURlbGF5Om8sc2Nyb2xsQXJlYTpzLHZpZXdwb3J0OnUsb25WaWV3cG9ydENoYW5nZTpjLGNvbnRlbnQ6ZCxvbkNvbnRlbnRDaGFuZ2U6ZixzY3JvbGxiYXJYOmgsb25TY3JvbGxiYXJYQ2hhbmdlOmcsc2Nyb2xsYmFyWEVuYWJsZWQ6RSxvblNjcm9sbGJhclhFbmFibGVkQ2hhbmdlOiQsc2Nyb2xsYmFyWTptLG9uU2Nyb2xsYmFyWUNoYW5nZTp3LHNjcm9sbGJhcllFbmFibGVkOkMsb25TY3JvbGxiYXJZRW5hYmxlZENoYW5nZTpOLG9uQ29ybmVyV2lkdGhDaGFuZ2U6eSxvbkNvcm5lckhlaWdodENoYW5nZTpTfSxwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHtkaXI6a30sbCx7cmVmOkEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLXdpZHRoIjp2KyJweCIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLWhlaWdodCI6XysicHgiLC4uLnQuc3R5bGV9fSkpKX0pLGMyPSJTY3JvbGxBcmVhVmlld3BvcnQiLGQyPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sY2hpbGRyZW46ciwuLi5pfT10LG89dXIoYzIsbiksbD1wLnVzZVJlZihudWxsKSxzPXN0KGUsbCxvLm9uVmlld3BvcnRDaGFuZ2UpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudCgic3R5bGUiLHtkYW5nZXJvdXNseVNldElubmVySFRNTDp7X19odG1sOiJbZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydF17c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7fVtkYXRhLXJhZGl4LXNjcm9sbC1hcmVhLXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9fSkscC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImRhdGEtcmFkaXgtc2Nyb2xsLWFyZWEtdmlld3BvcnQiOiIifSxpLHtyZWY6cyxzdHlsZTp7b3ZlcmZsb3dYOm8uc2Nyb2xsYmFyWEVuYWJsZWQ/InNjcm9sbCI6ImhpZGRlbiIsb3ZlcmZsb3dZOm8uc2Nyb2xsYmFyWUVuYWJsZWQ/InNjcm9sbCI6ImhpZGRlbiIsLi4udC5zdHlsZX19KSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIse3JlZjpvLm9uQ29udGVudENoYW5nZSxzdHlsZTp7bWluV2lkdGg6IjEwMCUiLGRpc3BsYXk6InRhYmxlIn19LHIpKSl9KSxDaT0iU2Nyb2xsQXJlYVNjcm9sbGJhciIsaVM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PXQsaT11cihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSx7b25TY3JvbGxiYXJYRW5hYmxlZENoYW5nZTpvLG9uU2Nyb2xsYmFyWUVuYWJsZWRDaGFuZ2U6bH09aSxzPXQub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT4ocz9vKCEwKTpsKCEwKSwoKT0+e3M/byghMSk6bCghMSl9KSxbcyxvLGxdKSxpLnR5cGU9PT0iaG92ZXIiP3AuY3JlYXRlRWxlbWVudChmMixvZSh7fSxyLHtyZWY6ZSxmb3JjZU1vdW50Om59KSk6aS50eXBlPT09InNjcm9sbCI/cC5jcmVhdGVFbGVtZW50KGgyLG9lKHt9LHIse3JlZjplLGZvcmNlTW91bnQ6bn0pKTppLnR5cGU9PT0iYXV0byI/cC5jcmVhdGVFbGVtZW50KG9TLG9lKHt9LHIse3JlZjplLGZvcmNlTW91bnQ6bn0pKTppLnR5cGU9PT0iYWx3YXlzIj9wLmNyZWF0ZUVsZW1lbnQoWGcsb2Uoe30scix7cmVmOmV9KSk6bnVsbH0pLGYyPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT10LGk9dXIoQ2ksdC5fX3Njb3BlU2Nyb2xsQXJlYSksW28sbF09cC51c2VTdGF0ZSghMSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3Qgcz1pLnNjcm9sbEFyZWE7bGV0IGE9MDtpZihzKXtjb25zdCB1PSgpPT57d2luZG93LmNsZWFyVGltZW91dChhKSxsKCEwKX0sYz0oKT0+e2E9d2luZG93LnNldFRpbWVvdXQoKCk9PmwoITEpLGkuc2Nyb2xsSGlkZURlbGF5KX07cmV0dXJuIHMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmVudGVyIix1KSxzLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsYyksKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGEpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmVudGVyIix1KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJsZWF2ZSIsYyl9fX0sW2kuc2Nyb2xsQXJlYSxpLnNjcm9sbEhpZGVEZWxheV0pLHAuY3JlYXRlRWxlbWVudChicyx7cHJlc2VudDpufHxvfSxwLmNyZWF0ZUVsZW1lbnQob1Msb2UoeyJkYXRhLXN0YXRlIjpvPyJ2aXNpYmxlIjoiaGlkZGVuIn0scix7cmVmOmV9KSkpfSksaDI9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PXQsaT11cihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSxvPXQub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCIsbD1DZigoKT0+YSgiU0NST0xMX0VORCIpLDEwMCksW3MsYV09czIoImhpZGRlbiIse2hpZGRlbjp7U0NST0xMOiJzY3JvbGxpbmcifSxzY3JvbGxpbmc6e1NDUk9MTF9FTkQ6ImlkbGUiLFBPSU5URVJfRU5URVI6ImludGVyYWN0aW5nIn0saW50ZXJhY3Rpbmc6e1NDUk9MTDoiaW50ZXJhY3RpbmciLFBPSU5URVJfTEVBVkU6ImlkbGUifSxpZGxlOntISURFOiJoaWRkZW4iLFNDUk9MTDoic2Nyb2xsaW5nIixQT0lOVEVSX0VOVEVSOiJpbnRlcmFjdGluZyJ9fSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57aWYocz09PSJpZGxlIil7Y29uc3QgdT13aW5kb3cuc2V0VGltZW91dCgoKT0+YSgiSElERSIpLGkuc2Nyb2xsSGlkZURlbGF5KTtyZXR1cm4oKT0+d2luZG93LmNsZWFyVGltZW91dCh1KX19LFtzLGkuc2Nyb2xsSGlkZURlbGF5LGFdKSxwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHU9aS52aWV3cG9ydCxjPW8/InNjcm9sbExlZnQiOiJzY3JvbGxUb3AiO2lmKHUpe2xldCBkPXVbY107Y29uc3QgZj0oKT0+e2NvbnN0IGg9dVtjXTtkIT09aCYmKGEoIlNDUk9MTCIpLGwoKSksZD1ofTtyZXR1cm4gdS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpLCgpPT51LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZil9fSxbaS52aWV3cG9ydCxvLGEsbF0pLHAuY3JlYXRlRWxlbWVudChicyx7cHJlc2VudDpufHxzIT09ImhpZGRlbiJ9LHAuY3JlYXRlRWxlbWVudChYZyxvZSh7ImRhdGEtc3RhdGUiOnM9PT0iaGlkZGVuIj8iaGlkZGVuIjoidmlzaWJsZSJ9LHIse3JlZjplLG9uUG9pbnRlckVudGVyOm50KHQub25Qb2ludGVyRW50ZXIsKCk9PmEoIlBPSU5URVJfRU5URVIiKSksb25Qb2ludGVyTGVhdmU6bnQodC5vblBvaW50ZXJMZWF2ZSwoKT0+YSgiUE9JTlRFUl9MRUFWRSIpKX0pKSl9KSxvUz1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdCBuPXVyKENpLHQuX19zY29wZVNjcm9sbEFyZWEpLHtmb3JjZU1vdW50OnIsLi4uaX09dCxbbyxsXT1wLnVzZVN0YXRlKCExKSxzPXQub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCIsYT1DZigoKT0+e2lmKG4udmlld3BvcnQpe2NvbnN0IHU9bi52aWV3cG9ydC5vZmZzZXRXaWR0aDxuLnZpZXdwb3J0LnNjcm9sbFdpZHRoLGM9bi52aWV3cG9ydC5vZmZzZXRIZWlnaHQ8bi52aWV3cG9ydC5zY3JvbGxIZWlnaHQ7bChzP3U6Yyl9fSwxMCk7cmV0dXJuIHBzKG4udmlld3BvcnQsYSkscHMobi5jb250ZW50LGEpLHAuY3JlYXRlRWxlbWVudChicyx7cHJlc2VudDpyfHxvfSxwLmNyZWF0ZUVsZW1lbnQoWGcsb2UoeyJkYXRhLXN0YXRlIjpvPyJ2aXNpYmxlIjoiaGlkZGVuIn0saSx7cmVmOmV9KSkpfSksWGc9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7b3JpZW50YXRpb246bj0idmVydGljYWwiLC4uLnJ9PXQsaT11cihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSxvPXAudXNlUmVmKG51bGwpLGw9cC51c2VSZWYoMCksW3MsYV09cC51c2VTdGF0ZSh7Y29udGVudDowLHZpZXdwb3J0OjAsc2Nyb2xsYmFyOntzaXplOjAscGFkZGluZ1N0YXJ0OjAscGFkZGluZ0VuZDowfX0pLHU9dVMocy52aWV3cG9ydCxzLmNvbnRlbnQpLGM9ey4uLnIsc2l6ZXM6cyxvblNpemVzQ2hhbmdlOmEsaGFzVGh1bWI6dT4wJiZ1PDEsb25UaHVtYkNoYW5nZTpmPT5vLmN1cnJlbnQ9ZixvblRodW1iUG9pbnRlclVwOigpPT5sLmN1cnJlbnQ9MCxvblRodW1iUG9pbnRlckRvd246Zj0+bC5jdXJyZW50PWZ9O2Z1bmN0aW9uIGQoZixoKXtyZXR1cm4gdzIoZixsLmN1cnJlbnQscyxoKX1yZXR1cm4gbj09PSJob3Jpem9udGFsIj9wLmNyZWF0ZUVsZW1lbnQocDIsb2Uoe30sYyx7cmVmOmUsb25UaHVtYlBvc2l0aW9uQ2hhbmdlOigpPT57aWYoaS52aWV3cG9ydCYmby5jdXJyZW50KXtjb25zdCBmPWkudmlld3BvcnQuc2Nyb2xsTGVmdCxoPU4wKGYscyxpLmRpcik7by5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtofXB4LCAwLCAwKWB9fSxvbldoZWVsU2Nyb2xsOmY9PntpLnZpZXdwb3J0JiYoaS52aWV3cG9ydC5zY3JvbGxMZWZ0PWYpfSxvbkRyYWdTY3JvbGw6Zj0+e2kudmlld3BvcnQmJihpLnZpZXdwb3J0LnNjcm9sbExlZnQ9ZChmLGkuZGlyKSl9fSkpOm49PT0idmVydGljYWwiP3AuY3JlYXRlRWxlbWVudChtMixvZSh7fSxjLHtyZWY6ZSxvblRodW1iUG9zaXRpb25DaGFuZ2U6KCk9PntpZihpLnZpZXdwb3J0JiZvLmN1cnJlbnQpe2NvbnN0IGY9aS52aWV3cG9ydC5zY3JvbGxUb3AsaD1OMChmLHMpO28uY3VycmVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKDAsICR7aH1weCwgMClgfX0sb25XaGVlbFNjcm9sbDpmPT57aS52aWV3cG9ydCYmKGkudmlld3BvcnQuc2Nyb2xsVG9wPWYpfSxvbkRyYWdTY3JvbGw6Zj0+e2kudmlld3BvcnQmJihpLnZpZXdwb3J0LnNjcm9sbFRvcD1kKGYpKX19KSk6bnVsbH0pLHAyPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3NpemVzOm4sb25TaXplc0NoYW5nZTpyLC4uLml9PXQsbz11cihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSxbbCxzXT1wLnVzZVN0YXRlKCksYT1wLnVzZVJlZihudWxsKSx1PXN0KGUsYSxvLm9uU2Nyb2xsYmFyWENoYW5nZSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57YS5jdXJyZW50JiZzKGdldENvbXB1dGVkU3R5bGUoYS5jdXJyZW50KSl9LFthXSkscC5jcmVhdGVFbGVtZW50KHNTLG9lKHsiZGF0YS1vcmllbnRhdGlvbiI6Imhvcml6b250YWwifSxpLHtyZWY6dSxzaXplczpuLHN0eWxlOntib3R0b206MCxsZWZ0Om8uZGlyPT09InJ0bCI/InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLWNvcm5lci13aWR0aCkiOjAscmlnaHQ6by5kaXI9PT0ibHRyIj8idmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLXdpZHRoKSI6MCwiLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi13aWR0aCI6RWYobikrInB4IiwuLi50LnN0eWxlfSxvblRodW1iUG9pbnRlckRvd246Yz0+dC5vblRodW1iUG9pbnRlckRvd24oYy54KSxvbkRyYWdTY3JvbGw6Yz0+dC5vbkRyYWdTY3JvbGwoYy54KSxvbldoZWVsU2Nyb2xsOihjLGQpPT57aWYoby52aWV3cG9ydCl7Y29uc3QgZj1vLnZpZXdwb3J0LnNjcm9sbExlZnQrYy5kZWx0YVg7dC5vbldoZWVsU2Nyb2xsKGYpLGRTKGYsZCkmJmMucHJldmVudERlZmF1bHQoKX19LG9uUmVzaXplOigpPT57YS5jdXJyZW50JiZvLnZpZXdwb3J0JiZsJiZyKHtjb250ZW50Om8udmlld3BvcnQuc2Nyb2xsV2lkdGgsdmlld3BvcnQ6by52aWV3cG9ydC5vZmZzZXRXaWR0aCxzY3JvbGxiYXI6e3NpemU6YS5jdXJyZW50LmNsaWVudFdpZHRoLHBhZGRpbmdTdGFydDpTZChsLnBhZGRpbmdMZWZ0KSxwYWRkaW5nRW5kOlNkKGwucGFkZGluZ1JpZ2h0KX19KX19KSl9KSxtMj1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtzaXplczpuLG9uU2l6ZXNDaGFuZ2U6ciwuLi5pfT10LG89dXIoQ2ksdC5fX3Njb3BlU2Nyb2xsQXJlYSksW2wsc109cC51c2VTdGF0ZSgpLGE9cC51c2VSZWYobnVsbCksdT1zdChlLGEsby5vblNjcm9sbGJhcllDaGFuZ2UpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2EuY3VycmVudCYmcyhnZXRDb21wdXRlZFN0eWxlKGEuY3VycmVudCkpfSxbYV0pLHAuY3JlYXRlRWxlbWVudChzUyxvZSh7ImRhdGEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCJ9LGkse3JlZjp1LHNpemVzOm4sc3R5bGU6e3RvcDowLHJpZ2h0Om8uZGlyPT09Imx0ciI/MDp2b2lkIDAsbGVmdDpvLmRpcj09PSJydGwiPzA6dm9pZCAwLGJvdHRvbToidmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLWhlaWdodCkiLCItLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLWhlaWdodCI6RWYobikrInB4IiwuLi50LnN0eWxlfSxvblRodW1iUG9pbnRlckRvd246Yz0+dC5vblRodW1iUG9pbnRlckRvd24oYy55KSxvbkRyYWdTY3JvbGw6Yz0+dC5vbkRyYWdTY3JvbGwoYy55KSxvbldoZWVsU2Nyb2xsOihjLGQpPT57aWYoby52aWV3cG9ydCl7Y29uc3QgZj1vLnZpZXdwb3J0LnNjcm9sbFRvcCtjLmRlbHRhWTt0Lm9uV2hlZWxTY3JvbGwoZiksZFMoZixkKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sb25SZXNpemU6KCk9PnthLmN1cnJlbnQmJm8udmlld3BvcnQmJmwmJnIoe2NvbnRlbnQ6by52aWV3cG9ydC5zY3JvbGxIZWlnaHQsdmlld3BvcnQ6by52aWV3cG9ydC5vZmZzZXRIZWlnaHQsc2Nyb2xsYmFyOntzaXplOmEuY3VycmVudC5jbGllbnRIZWlnaHQscGFkZGluZ1N0YXJ0OlNkKGwucGFkZGluZ1RvcCkscGFkZGluZ0VuZDpTZChsLnBhZGRpbmdCb3R0b20pfX0pfX0pKX0pLFtnMixsU109clMoQ2kpLHNTPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sc2l6ZXM6cixoYXNUaHVtYjppLG9uVGh1bWJDaGFuZ2U6byxvblRodW1iUG9pbnRlclVwOmwsb25UaHVtYlBvaW50ZXJEb3duOnMsb25UaHVtYlBvc2l0aW9uQ2hhbmdlOmEsb25EcmFnU2Nyb2xsOnUsb25XaGVlbFNjcm9sbDpjLG9uUmVzaXplOmQsLi4uZn09dCxoPXVyKENpLG4pLFtnLG1dPXAudXNlU3RhdGUobnVsbCksdz1zdChlLEE9Pm0oQSkpLHY9cC51c2VSZWYobnVsbCkseT1wLnVzZVJlZigiIiksXz1oLnZpZXdwb3J0LFM9ci5jb250ZW50LXIudmlld3BvcnQsRT1lbihjKSwkPWVuKGEpLEM9Q2YoZCwxMCk7ZnVuY3Rpb24gTihBKXtpZih2LmN1cnJlbnQpe2NvbnN0IGs9QS5jbGllbnRYLXYuY3VycmVudC5sZWZ0LE09QS5jbGllbnRZLXYuY3VycmVudC50b3A7dSh7eDprLHk6TX0pfX1yZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBBPWs9Pntjb25zdCBNPWsudGFyZ2V0OyhnPT1udWxsP3ZvaWQgMDpnLmNvbnRhaW5zKE0pKSYmRShrLFMpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLEEse3Bhc3NpdmU6ITF9KSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLEEse3Bhc3NpdmU6ITF9KX0sW18sZyxTLEVdKSxwLnVzZUVmZmVjdCgkLFtyLCRdKSxwcyhnLEMpLHBzKGguY29udGVudCxDKSxwLmNyZWF0ZUVsZW1lbnQoZzIse3Njb3BlOm4sc2Nyb2xsYmFyOmcsaGFzVGh1bWI6aSxvblRodW1iQ2hhbmdlOmVuKG8pLG9uVGh1bWJQb2ludGVyVXA6ZW4obCksb25UaHVtYlBvc2l0aW9uQ2hhbmdlOiQsb25UaHVtYlBvaW50ZXJEb3duOmVuKHMpfSxwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt9LGYse3JlZjp3LHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLC4uLmYuc3R5bGV9LG9uUG9pbnRlckRvd246bnQodC5vblBvaW50ZXJEb3duLEE9PntBLmJ1dHRvbj09PTAmJihBLnRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCksdi5jdXJyZW50PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkseS5jdXJyZW50PWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdCxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiLGgudmlld3BvcnQmJihoLnZpZXdwb3J0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPSJhdXRvIiksTihBKSl9KSxvblBvaW50ZXJNb3ZlOm50KHQub25Qb2ludGVyTW92ZSxOKSxvblBvaW50ZXJVcDpudCh0Lm9uUG9pbnRlclVwLEE9Pntjb25zdCBrPUEudGFyZ2V0O2suaGFzUG9pbnRlckNhcHR1cmUoQS5wb2ludGVySWQpJiZrLnJlbGVhc2VQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCksZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PXkuY3VycmVudCxoLnZpZXdwb3J0JiYoaC52aWV3cG9ydC5zdHlsZS5zY3JvbGxCZWhhdmlvcj0iIiksdi5jdXJyZW50PW51bGx9KX0pKSl9KSxRcD0iU2Nyb2xsQXJlYVRodW1iIix2Mj1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09dCxpPWxTKFFwLHQuX19zY29wZVNjcm9sbEFyZWEpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoYnMse3ByZXNlbnQ6bnx8aS5oYXNUaHVtYn0scC5jcmVhdGVFbGVtZW50KHkyLG9lKHtyZWY6ZX0scikpKX0pLHkyPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sc3R5bGU6ciwuLi5pfT10LG89dXIoUXAsbiksbD1sUyhRcCxuKSx7b25UaHVtYlBvc2l0aW9uQ2hhbmdlOnN9PWwsYT1zdChlLGQ9Pmwub25UaHVtYkNoYW5nZShkKSksdT1wLnVzZVJlZigpLGM9Q2YoKCk9Pnt1LmN1cnJlbnQmJih1LmN1cnJlbnQoKSx1LmN1cnJlbnQ9dm9pZCAwKX0sMTAwKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBkPW8udmlld3BvcnQ7aWYoZCl7Y29uc3QgZj0oKT0+e2lmKGMoKSwhdS5jdXJyZW50KXtjb25zdCBoPVMyKGQscyk7dS5jdXJyZW50PWgscygpfX07cmV0dXJuIHMoKSxkLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZiksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKX19LFtvLnZpZXdwb3J0LGMsc10pLHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2UoeyJkYXRhLXN0YXRlIjpsLmhhc1RodW1iPyJ2aXNpYmxlIjoiaGlkZGVuIn0saSx7cmVmOmEsc3R5bGU6e3dpZHRoOiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi13aWR0aCkiLGhlaWdodDoidmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItaGVpZ2h0KSIsLi4ucn0sb25Qb2ludGVyRG93bkNhcHR1cmU6bnQodC5vblBvaW50ZXJEb3duQ2FwdHVyZSxkPT57Y29uc3QgaD1kLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxnPWQuY2xpZW50WC1oLmxlZnQsbT1kLmNsaWVudFktaC50b3A7bC5vblRodW1iUG9pbnRlckRvd24oe3g6Zyx5Om19KX0pLG9uUG9pbnRlclVwOm50KHQub25Qb2ludGVyVXAsbC5vblRodW1iUG9pbnRlclVwKX0pKX0pLGFTPSJTY3JvbGxBcmVhQ29ybmVyIix4Mj1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdCBuPXVyKGFTLHQuX19zY29wZVNjcm9sbEFyZWEpLHI9ISEobi5zY3JvbGxiYXJYJiZuLnNjcm9sbGJhclkpO3JldHVybiBuLnR5cGUhPT0ic2Nyb2xsIiYmcj9wLmNyZWF0ZUVsZW1lbnQoXzIsb2Uoe30sdCx7cmVmOmV9KSk6bnVsbH0pLF8yPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sLi4ucn09dCxpPXVyKGFTLG4pLFtvLGxdPXAudXNlU3RhdGUoMCksW3MsYV09cC51c2VTdGF0ZSgwKSx1PSEhKG8mJnMpO3JldHVybiBwcyhpLnNjcm9sbGJhclgsKCk9Pnt2YXIgYztjb25zdCBkPSgoYz1pLnNjcm9sbGJhclgpPT09bnVsbHx8Yz09PXZvaWQgMD92b2lkIDA6Yy5vZmZzZXRIZWlnaHQpfHwwO2kub25Db3JuZXJIZWlnaHRDaGFuZ2UoZCksYShkKX0pLHBzKGkuc2Nyb2xsYmFyWSwoKT0+e3ZhciBjO2NvbnN0IGQ9KChjPWkuc2Nyb2xsYmFyWSk9PT1udWxsfHxjPT09dm9pZCAwP3ZvaWQgMDpjLm9mZnNldFdpZHRoKXx8MDtpLm9uQ29ybmVyV2lkdGhDaGFuZ2UoZCksbChkKX0pLHU/cC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7fSxyLHtyZWY6ZSxzdHlsZTp7d2lkdGg6byxoZWlnaHQ6cyxwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0OmkuZGlyPT09Imx0ciI/MDp2b2lkIDAsbGVmdDppLmRpcj09PSJydGwiPzA6dm9pZCAwLGJvdHRvbTowLC4uLnQuc3R5bGV9fSkpOm51bGx9KTtmdW5jdGlvbiBTZCh0KXtyZXR1cm4gdD9wYXJzZUludCh0LDEwKTowfWZ1bmN0aW9uIHVTKHQsZSl7Y29uc3Qgbj10L2U7cmV0dXJuIGlzTmFOKG4pPzA6bn1mdW5jdGlvbiBFZih0KXtjb25zdCBlPXVTKHQudmlld3BvcnQsdC5jb250ZW50KSxuPXQuc2Nyb2xsYmFyLnBhZGRpbmdTdGFydCt0LnNjcm9sbGJhci5wYWRkaW5nRW5kLHI9KHQuc2Nyb2xsYmFyLnNpemUtbikqZTtyZXR1cm4gTWF0aC5tYXgociwxOCl9ZnVuY3Rpb24gdzIodCxlLG4scj0ibHRyIil7Y29uc3QgaT1FZihuKSxvPWkvMixsPWV8fG8scz1pLWwsYT1uLnNjcm9sbGJhci5wYWRkaW5nU3RhcnQrbCx1PW4uc2Nyb2xsYmFyLnNpemUtbi5zY3JvbGxiYXIucGFkZGluZ0VuZC1zLGM9bi5jb250ZW50LW4udmlld3BvcnQsZD1yPT09Imx0ciI/WzAsY106W2MqLTEsMF07cmV0dXJuIGNTKFthLHVdLGQpKHQpfWZ1bmN0aW9uIE4wKHQsZSxuPSJsdHIiKXtjb25zdCByPUVmKGUpLGk9ZS5zY3JvbGxiYXIucGFkZGluZ1N0YXJ0K2Uuc2Nyb2xsYmFyLnBhZGRpbmdFbmQsbz1lLnNjcm9sbGJhci5zaXplLWksbD1lLmNvbnRlbnQtZS52aWV3cG9ydCxzPW8tcixhPW49PT0ibHRyIj9bMCxsXTpbbCotMSwwXSx1PUpwKHQsYSk7cmV0dXJuIGNTKFswLGxdLFswLHNdKSh1KX1mdW5jdGlvbiBjUyh0LGUpe3JldHVybiBuPT57aWYodFswXT09PXRbMV18fGVbMF09PT1lWzFdKXJldHVybiBlWzBdO2NvbnN0IHI9KGVbMV0tZVswXSkvKHRbMV0tdFswXSk7cmV0dXJuIGVbMF0rcioobi10WzBdKX19ZnVuY3Rpb24gZFModCxlKXtyZXR1cm4gdD4wJiZ0PGV9Y29uc3QgUzI9KHQsZT0oKT0+e30pPT57bGV0IG49e2xlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcH0scj0wO3JldHVybiBmdW5jdGlvbiBpKCl7Y29uc3Qgbz17bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wfSxsPW4ubGVmdCE9PW8ubGVmdCxzPW4udG9wIT09by50b3A7KGx8fHMpJiZlKCksbj1vLHI9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShpKX0oKSwoKT0+d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIpfTtmdW5jdGlvbiBDZih0LGUpe2NvbnN0IG49ZW4odCkscj1wLnVzZVJlZigwKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksW10pLHAudXNlQ2FsbGJhY2soKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksci5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KG4sZSl9LFtuLGVdKX1mdW5jdGlvbiBwcyh0LGUpe2NvbnN0IG49ZW4oZSk7Vm4oKCk9PntsZXQgcj0wO2lmKHQpe2NvbnN0IGk9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT57Y2FuY2VsQW5pbWF0aW9uRnJhbWUocikscj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG4pfSk7cmV0dXJuIGkub2JzZXJ2ZSh0KSwoKT0+e3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShyKSxpLnVub2JzZXJ2ZSh0KX19fSxbdCxuXSl9Y29uc3QgZlM9dTIsRTI9ZDIsQzI9eDI7ZnVuY3Rpb24gaFModCl7dmFyIGUsbixyPSIiO2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJudW1iZXIiKXIrPXQ7ZWxzZSBpZih0eXBlb2YgdD09Im9iamVjdCIpaWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0mJihuPWhTKHRbZV0pKSYmKHImJihyKz0iICIpLHIrPW4pO2Vsc2UgZm9yKGUgaW4gdCl0W2VdJiYociYmKHIrPSIgIikscis9ZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gcFMoKXtmb3IodmFyIHQsZSxuPTAscj0iIjtuPGFyZ3VtZW50cy5sZW5ndGg7KSh0PWFyZ3VtZW50c1tuKytdKSYmKGU9aFModCkpJiYociYmKHIrPSIgIikscis9ZSk7cmV0dXJuIHJ9Y29uc3QgSmc9Ii0iO2Z1bmN0aW9uIGsyKHQpe2NvbnN0IGU9JDIodCkse2NvbmZsaWN0aW5nQ2xhc3NHcm91cHM6bixjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6cn09dDtmdW5jdGlvbiBpKGwpe2NvbnN0IHM9bC5zcGxpdChKZyk7cmV0dXJuIHNbMF09PT0iIiYmcy5sZW5ndGghPT0xJiZzLnNoaWZ0KCksbVMocyxlKXx8YjIobCl9ZnVuY3Rpb24gbyhsLHMpe2NvbnN0IGE9bltsXXx8W107cmV0dXJuIHMmJnJbbF0/Wy4uLmEsLi4ucltsXV06YX1yZXR1cm57Z2V0Q2xhc3NHcm91cElkOmksZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOm99fWZ1bmN0aW9uIG1TKHQsZSl7dmFyIGw7aWYodC5sZW5ndGg9PT0wKXJldHVybiBlLmNsYXNzR3JvdXBJZDtjb25zdCBuPXRbMF0scj1lLm5leHRQYXJ0LmdldChuKSxpPXI/bVModC5zbGljZSgxKSxyKTp2b2lkIDA7aWYoaSlyZXR1cm4gaTtpZihlLnZhbGlkYXRvcnMubGVuZ3RoPT09MClyZXR1cm47Y29uc3Qgbz10LmpvaW4oSmcpO3JldHVybihsPWUudmFsaWRhdG9ycy5maW5kKCh7dmFsaWRhdG9yOnN9KT0+cyhvKSkpPT1udWxsP3ZvaWQgMDpsLmNsYXNzR3JvdXBJZH1jb25zdCBSMD0vXlxbKC4rKVxdJC87ZnVuY3Rpb24gYjIodCl7aWYoUjAudGVzdCh0KSl7Y29uc3QgZT1SMC5leGVjKHQpWzFdLG49ZT09bnVsbD92b2lkIDA6ZS5zdWJzdHJpbmcoMCxlLmluZGV4T2YoIjoiKSk7aWYobilyZXR1cm4iYXJiaXRyYXJ5Li4iK259fWZ1bmN0aW9uICQyKHQpe2NvbnN0e3RoZW1lOmUscHJlZml4Om59PXQscj17bmV4dFBhcnQ6bmV3IE1hcCx2YWxpZGF0b3JzOltdfTtyZXR1cm4gTjIoT2JqZWN0LmVudHJpZXModC5jbGFzc0dyb3VwcyksbikuZm9yRWFjaCgoW28sbF0pPT57cXAobCxyLG8sZSl9KSxyfWZ1bmN0aW9uIHFwKHQsZSxuLHIpe3QuZm9yRWFjaChpPT57aWYodHlwZW9mIGk9PSJzdHJpbmciKXtjb25zdCBvPWk9PT0iIj9lOk8wKGUsaSk7by5jbGFzc0dyb3VwSWQ9bjtyZXR1cm59aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpe2lmKFQyKGkpKXtxcChpKHIpLGUsbixyKTtyZXR1cm59ZS52YWxpZGF0b3JzLnB1c2goe3ZhbGlkYXRvcjppLGNsYXNzR3JvdXBJZDpufSk7cmV0dXJufU9iamVjdC5lbnRyaWVzKGkpLmZvckVhY2goKFtvLGxdKT0+e3FwKGwsTzAoZSxvKSxuLHIpfSl9KX1mdW5jdGlvbiBPMCh0LGUpe2xldCBuPXQ7cmV0dXJuIGUuc3BsaXQoSmcpLmZvckVhY2gocj0+e24ubmV4dFBhcnQuaGFzKHIpfHxuLm5leHRQYXJ0LnNldChyLHtuZXh0UGFydDpuZXcgTWFwLHZhbGlkYXRvcnM6W119KSxuPW4ubmV4dFBhcnQuZ2V0KHIpfSksbn1mdW5jdGlvbiBUMih0KXtyZXR1cm4gdC5pc1RoZW1lR2V0dGVyfWZ1bmN0aW9uIE4yKHQsZSl7cmV0dXJuIGU/dC5tYXAoKFtuLHJdKT0+e2NvbnN0IGk9ci5tYXAobz0+dHlwZW9mIG89PSJzdHJpbmciP2Urbzp0eXBlb2Ygbz09Im9iamVjdCI/T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG8pLm1hcCgoW2wsc10pPT5bZStsLHNdKSk6byk7cmV0dXJuW24saV19KTp0fWZ1bmN0aW9uIFIyKHQpe2lmKHQ8MSlyZXR1cm57Z2V0OigpPT57fSxzZXQ6KCk9Pnt9fTtsZXQgZT0wLG49bmV3IE1hcCxyPW5ldyBNYXA7ZnVuY3Rpb24gaShvLGwpe24uc2V0KG8sbCksZSsrLGU+dCYmKGU9MCxyPW4sbj1uZXcgTWFwKX1yZXR1cm57Z2V0KG8pe2xldCBsPW4uZ2V0KG8pO2lmKGwhPT12b2lkIDApcmV0dXJuIGw7aWYoKGw9ci5nZXQobykpIT09dm9pZCAwKXJldHVybiBpKG8sbCksbH0sc2V0KG8sbCl7bi5oYXMobyk/bi5zZXQobyxsKTppKG8sbCl9fX1jb25zdCBnUz0iISI7ZnVuY3Rpb24gTzIodCl7Y29uc3QgZT10LnNlcGFyYXRvcixuPWUubGVuZ3RoPT09MSxyPWVbMF0saT1lLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24obCl7Y29uc3Qgcz1bXTtsZXQgYT0wLHU9MCxjO2ZvcihsZXQgbT0wO208bC5sZW5ndGg7bSsrKXtsZXQgdz1sW21dO2lmKGE9PT0wKXtpZih3PT09ciYmKG58fGwuc2xpY2UobSxtK2kpPT09ZSkpe3MucHVzaChsLnNsaWNlKHUsbSkpLHU9bStpO2NvbnRpbnVlfWlmKHc9PT0iLyIpe2M9bTtjb250aW51ZX19dz09PSJbIj9hKys6dz09PSJdIiYmYS0tfWNvbnN0IGQ9cy5sZW5ndGg9PT0wP2w6bC5zdWJzdHJpbmcodSksZj1kLnN0YXJ0c1dpdGgoZ1MpLGg9Zj9kLnN1YnN0cmluZygxKTpkLGc9YyYmYz51P2MtdTp2b2lkIDA7cmV0dXJue21vZGlmaWVyczpzLGhhc0ltcG9ydGFudE1vZGlmaWVyOmYsYmFzZUNsYXNzTmFtZTpoLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246Z319fWZ1bmN0aW9uIFAyKHQpe2lmKHQubGVuZ3RoPD0xKXJldHVybiB0O2NvbnN0IGU9W107bGV0IG49W107cmV0dXJuIHQuZm9yRWFjaChyPT57clswXT09PSJbIj8oZS5wdXNoKC4uLm4uc29ydCgpLHIpLG49W10pOm4ucHVzaChyKX0pLGUucHVzaCguLi5uLnNvcnQoKSksZX1mdW5jdGlvbiBBMih0KXtyZXR1cm57Y2FjaGU6UjIodC5jYWNoZVNpemUpLHNwbGl0TW9kaWZpZXJzOk8yKHQpLC4uLmsyKHQpfX1jb25zdCBNMj0vXHMrLztmdW5jdGlvbiBMMih0LGUpe2NvbnN0e3NwbGl0TW9kaWZpZXJzOm4sZ2V0Q2xhc3NHcm91cElkOnIsZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzOml9PWUsbz1uZXcgU2V0O3JldHVybiB0LnRyaW0oKS5zcGxpdChNMikubWFwKGw9Pntjb25zdHttb2RpZmllcnM6cyxoYXNJbXBvcnRhbnRNb2RpZmllcjphLGJhc2VDbGFzc05hbWU6dSxtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uOmN9PW4obCk7bGV0IGQ9cihjP3Uuc3Vic3RyaW5nKDAsYyk6dSksZj0hIWM7aWYoIWQpe2lmKCFjKXJldHVybntpc1RhaWx3aW5kQ2xhc3M6ITEsb3JpZ2luYWxDbGFzc05hbWU6bH07aWYoZD1yKHUpLCFkKXJldHVybntpc1RhaWx3aW5kQ2xhc3M6ITEsb3JpZ2luYWxDbGFzc05hbWU6bH07Zj0hMX1jb25zdCBoPVAyKHMpLmpvaW4oIjoiKTtyZXR1cm57aXNUYWlsd2luZENsYXNzOiEwLG1vZGlmaWVySWQ6YT9oK2dTOmgsY2xhc3NHcm91cElkOmQsb3JpZ2luYWxDbGFzc05hbWU6bCxoYXNQb3N0Zml4TW9kaWZpZXI6Zn19KS5yZXZlcnNlKCkuZmlsdGVyKGw9PntpZighbC5pc1RhaWx3aW5kQ2xhc3MpcmV0dXJuITA7Y29uc3R7bW9kaWZpZXJJZDpzLGNsYXNzR3JvdXBJZDphLGhhc1Bvc3RmaXhNb2RpZmllcjp1fT1sLGM9cythO3JldHVybiBvLmhhcyhjKT8hMTooby5hZGQoYyksaShhLHUpLmZvckVhY2goZD0+by5hZGQocytkKSksITApfSkucmV2ZXJzZSgpLm1hcChsPT5sLm9yaWdpbmFsQ2xhc3NOYW1lKS5qb2luKCIgIil9ZnVuY3Rpb24gRDIoKXtsZXQgdD0wLGUsbixyPSIiO2Zvcig7dDxhcmd1bWVudHMubGVuZ3RoOykoZT1hcmd1bWVudHNbdCsrXSkmJihuPXZTKGUpKSYmKHImJihyKz0iICIpLHIrPW4pO3JldHVybiByfWZ1bmN0aW9uIHZTKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdDtsZXQgZSxuPSIiO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0mJihlPXZTKHRbcl0pKSYmKG4mJihuKz0iICIpLG4rPWUpO3JldHVybiBufWZ1bmN0aW9uIEkyKHQsLi4uZSl7bGV0IG4scixpLG89bDtmdW5jdGlvbiBsKGEpe2NvbnN0IHU9ZS5yZWR1Y2UoKGMsZCk9PmQoYyksdCgpKTtyZXR1cm4gbj1BMih1KSxyPW4uY2FjaGUuZ2V0LGk9bi5jYWNoZS5zZXQsbz1zLHMoYSl9ZnVuY3Rpb24gcyhhKXtjb25zdCB1PXIoYSk7aWYodSlyZXR1cm4gdTtjb25zdCBjPUwyKGEsbik7cmV0dXJuIGkoYSxjKSxjfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBvKEQyLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9fWZ1bmN0aW9uIHFlKHQpe2NvbnN0IGU9bj0+blt0XXx8W107cmV0dXJuIGUuaXNUaGVtZUdldHRlcj0hMCxlfWNvbnN0IHlTPS9eXFsoPzooW2Etei1dKyk6KT8oLispXF0kL2ksajI9L15cZCtcL1xkKyQvLHoyPW5ldyBTZXQoWyJweCIsImZ1bGwiLCJzY3JlZW4iXSksRjI9L14oXGQrKFwuXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLyxCMj0vXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcYihjYWxjfG1pbnxtYXh8Y2xhbXApXCguK1wpfF4wJC8sVTI9L14tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKV8tPygoXGQrKT9cLj8oXGQrKVthLXpdK3wwKS8sVzI9L14odXJsfGltYWdlfGltYWdlLXNldHxjcm9zcy1mYWRlfGVsZW1lbnR8KHJlcGVhdGluZy0pPyhsaW5lYXJ8cmFkaWFsfGNvbmljKS1ncmFkaWVudClcKC4rXCkkLztmdW5jdGlvbiBwcih0KXtyZXR1cm4gTG8odCl8fHoyLmhhcyh0KXx8ajIudGVzdCh0KX1mdW5jdGlvbiBQaSh0KXtyZXR1cm4gJHModCwibGVuZ3RoIixKMil9ZnVuY3Rpb24gTG8odCl7cmV0dXJuISF0JiYhTnVtYmVyLmlzTmFOKE51bWJlcih0KSl9ZnVuY3Rpb24gZ2ModCl7cmV0dXJuICRzKHQsIm51bWJlciIsTG8pfWZ1bmN0aW9uIG5hKHQpe3JldHVybiEhdCYmTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIodCkpfWZ1bmN0aW9uIFYyKHQpe3JldHVybiB0LmVuZHNXaXRoKCIlIikmJkxvKHQuc2xpY2UoMCwtMSkpfWZ1bmN0aW9uIEVlKHQpe3JldHVybiB5Uy50ZXN0KHQpfWZ1bmN0aW9uIEFpKHQpe3JldHVybiBGMi50ZXN0KHQpfWNvbnN0IEgyPW5ldyBTZXQoWyJsZW5ndGgiLCJzaXplIiwicGVyY2VudGFnZSJdKTtmdW5jdGlvbiBLMih0KXtyZXR1cm4gJHModCxIMix4Uyl9ZnVuY3Rpb24gWjIodCl7cmV0dXJuICRzKHQsInBvc2l0aW9uIix4Uyl9Y29uc3QgRzI9bmV3IFNldChbImltYWdlIiwidXJsIl0pO2Z1bmN0aW9uIFkyKHQpe3JldHVybiAkcyh0LEcyLHEyKX1mdW5jdGlvbiBYMih0KXtyZXR1cm4gJHModCwiIixRMil9ZnVuY3Rpb24gcmEoKXtyZXR1cm4hMH1mdW5jdGlvbiAkcyh0LGUsbil7Y29uc3Qgcj15Uy5leGVjKHQpO3JldHVybiByP3JbMV0/dHlwZW9mIGU9PSJzdHJpbmciP3JbMV09PT1lOmUuaGFzKHJbMV0pOm4oclsyXSk6ITF9ZnVuY3Rpb24gSjIodCl7cmV0dXJuIEIyLnRlc3QodCl9ZnVuY3Rpb24geFMoKXtyZXR1cm4hMX1mdW5jdGlvbiBRMih0KXtyZXR1cm4gVTIudGVzdCh0KX1mdW5jdGlvbiBxMih0KXtyZXR1cm4gVzIudGVzdCh0KX1mdW5jdGlvbiBlUigpe2NvbnN0IHQ9cWUoImNvbG9ycyIpLGU9cWUoInNwYWNpbmciKSxuPXFlKCJibHVyIikscj1xZSgiYnJpZ2h0bmVzcyIpLGk9cWUoImJvcmRlckNvbG9yIiksbz1xZSgiYm9yZGVyUmFkaXVzIiksbD1xZSgiYm9yZGVyU3BhY2luZyIpLHM9cWUoImJvcmRlcldpZHRoIiksYT1xZSgiY29udHJhc3QiKSx1PXFlKCJncmF5c2NhbGUiKSxjPXFlKCJodWVSb3RhdGUiKSxkPXFlKCJpbnZlcnQiKSxmPXFlKCJnYXAiKSxoPXFlKCJncmFkaWVudENvbG9yU3RvcHMiKSxnPXFlKCJncmFkaWVudENvbG9yU3RvcFBvc2l0aW9ucyIpLG09cWUoImluc2V0Iiksdz1xZSgibWFyZ2luIiksdj1xZSgib3BhY2l0eSIpLHk9cWUoInBhZGRpbmciKSxfPXFlKCJzYXR1cmF0ZSIpLFM9cWUoInNjYWxlIiksRT1xZSgic2VwaWEiKSwkPXFlKCJza2V3IiksQz1xZSgic3BhY2UiKSxOPXFlKCJ0cmFuc2xhdGUiKSxBPSgpPT5bImF1dG8iLCJjb250YWluIiwibm9uZSJdLGs9KCk9PlsiYXV0byIsImhpZGRlbiIsImNsaXAiLCJ2aXNpYmxlIiwic2Nyb2xsIl0sTT0oKT0+WyJhdXRvIixFZSxlXSxEPSgpPT5bRWUsZV0saWU9KCk9PlsiIixwcixQaV0sVj0oKT0+WyJhdXRvIixMbyxFZV0sSz0oKT0+WyJib3R0b20iLCJjZW50ZXIiLCJsZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LXRvcCIsInJpZ2h0IiwicmlnaHQtYm90dG9tIiwicmlnaHQtdG9wIiwidG9wIl0sUj0oKT0+WyJzb2xpZCIsImRhc2hlZCIsImRvdHRlZCIsImRvdWJsZSIsIm5vbmUiXSxQPSgpPT5bIm5vcm1hbCIsIm11bHRpcGx5Iiwic2NyZWVuIiwib3ZlcmxheSIsImRhcmtlbiIsImxpZ2h0ZW4iLCJjb2xvci1kb2RnZSIsImNvbG9yLWJ1cm4iLCJoYXJkLWxpZ2h0Iiwic29mdC1saWdodCIsImRpZmZlcmVuY2UiLCJleGNsdXNpb24iLCJodWUiLCJzYXR1cmF0aW9uIiwiY29sb3IiLCJsdW1pbm9zaXR5IiwicGx1cy1saWdodGVyIl0sYj0oKT0+WyJzdGFydCIsImVuZCIsImNlbnRlciIsImJldHdlZW4iLCJhcm91bmQiLCJldmVubHkiLCJzdHJldGNoIl0sej0oKT0+WyIiLCIwIixFZV0saj0oKT0+WyJhdXRvIiwiYXZvaWQiLCJhbGwiLCJhdm9pZC1wYWdlIiwicGFnZSIsImxlZnQiLCJyaWdodCIsImNvbHVtbiJdLFo9KCk9PltMbyxnY10sbmU9KCk9PltMbyxFZV07cmV0dXJue2NhY2hlU2l6ZTo1MDAsc2VwYXJhdG9yOiI6Iix0aGVtZTp7Y29sb3JzOltyYV0sc3BhY2luZzpbcHIsUGldLGJsdXI6WyJub25lIiwiIixBaSxFZV0sYnJpZ2h0bmVzczpaKCksYm9yZGVyQ29sb3I6W3RdLGJvcmRlclJhZGl1czpbIm5vbmUiLCIiLCJmdWxsIixBaSxFZV0sYm9yZGVyU3BhY2luZzpEKCksYm9yZGVyV2lkdGg6aWUoKSxjb250cmFzdDpaKCksZ3JheXNjYWxlOnooKSxodWVSb3RhdGU6bmUoKSxpbnZlcnQ6eigpLGdhcDpEKCksZ3JhZGllbnRDb2xvclN0b3BzOlt0XSxncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uczpbVjIsUGldLGluc2V0Ok0oKSxtYXJnaW46TSgpLG9wYWNpdHk6WigpLHBhZGRpbmc6RCgpLHNhdHVyYXRlOlooKSxzY2FsZTpaKCksc2VwaWE6eigpLHNrZXc6bmUoKSxzcGFjZTpEKCksdHJhbnNsYXRlOkQoKX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbImF1dG8iLCJzcXVhcmUiLCJ2aWRlbyIsRWVdfV0sY29udGFpbmVyOlsiY29udGFpbmVyIl0sY29sdW1uczpbe2NvbHVtbnM6W0FpXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOmooKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6aigpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbImF1dG8iLCJhdm9pZCIsImF2b2lkLXBhZ2UiLCJhdm9pZC1jb2x1bW4iXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOlsic2xpY2UiLCJjbG9uZSJdfV0sYm94Olt7Ym94OlsiYm9yZGVyIiwiY29udGVudCJdfV0sZGlzcGxheTpbImJsb2NrIiwiaW5saW5lLWJsb2NrIiwiaW5saW5lIiwiZmxleCIsImlubGluZS1mbGV4IiwidGFibGUiLCJpbmxpbmUtdGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdy1ncm91cCIsInRhYmxlLXJvdyIsImZsb3ctcm9vdCIsImdyaWQiLCJpbmxpbmUtZ3JpZCIsImNvbnRlbnRzIiwibGlzdC1pdGVtIiwiaGlkZGVuIl0sZmxvYXQ6W3tmbG9hdDpbInJpZ2h0IiwibGVmdCIsIm5vbmUiXX1dLGNsZWFyOlt7Y2xlYXI6WyJsZWZ0IiwicmlnaHQiLCJib3RoIiwibm9uZSJdfV0saXNvbGF0aW9uOlsiaXNvbGF0ZSIsImlzb2xhdGlvbi1hdXRvIl0sIm9iamVjdC1maXQiOlt7b2JqZWN0OlsiY29udGFpbiIsImNvdmVyIiwiZmlsbCIsIm5vbmUiLCJzY2FsZS1kb3duIl19XSwib2JqZWN0LXBvc2l0aW9uIjpbe29iamVjdDpbLi4uSygpLEVlXX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6aygpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOmsoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjprKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpBKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOkEoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6QSgpfV0scG9zaXRpb246WyJzdGF0aWMiLCJmaXhlZCIsImFic29sdXRlIiwicmVsYXRpdmUiLCJzdGlja3kiXSxpbnNldDpbe2luc2V0OlttXX1dLCJpbnNldC14IjpbeyJpbnNldC14IjpbbV19XSwiaW5zZXQteSI6W3siaW5zZXQteSI6W21dfV0sc3RhcnQ6W3tzdGFydDpbbV19XSxlbmQ6W3tlbmQ6W21dfV0sdG9wOlt7dG9wOlttXX1dLHJpZ2h0Olt7cmlnaHQ6W21dfV0sYm90dG9tOlt7Ym90dG9tOlttXX1dLGxlZnQ6W3tsZWZ0OlttXX1dLHZpc2liaWxpdHk6WyJ2aXNpYmxlIiwiaW52aXNpYmxlIiwiY29sbGFwc2UiXSx6Olt7ejpbImF1dG8iLG5hLEVlXX1dLGJhc2lzOlt7YmFzaXM6TSgpfV0sImZsZXgtZGlyZWN0aW9uIjpbe2ZsZXg6WyJyb3ciLCJyb3ctcmV2ZXJzZSIsImNvbCIsImNvbC1yZXZlcnNlIl19XSwiZmxleC13cmFwIjpbe2ZsZXg6WyJ3cmFwIiwid3JhcC1yZXZlcnNlIiwibm93cmFwIl19XSxmbGV4Olt7ZmxleDpbIjEiLCJhdXRvIiwiaW5pdGlhbCIsIm5vbmUiLEVlXX1dLGdyb3c6W3tncm93OnooKX1dLHNocmluazpbe3Nocmluazp6KCl9XSxvcmRlcjpbe29yZGVyOlsiZmlyc3QiLCJsYXN0Iiwibm9uZSIsbmEsRWVdfV0sImdyaWQtY29scyI6W3siZ3JpZC1jb2xzIjpbcmFdfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOlsiYXV0byIse3NwYW46WyJmdWxsIixuYSxFZV19LEVlXX1dLCJjb2wtc3RhcnQiOlt7ImNvbC1zdGFydCI6VigpfV0sImNvbC1lbmQiOlt7ImNvbC1lbmQiOlYoKX1dLCJncmlkLXJvd3MiOlt7ImdyaWQtcm93cyI6W3JhXX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpbImF1dG8iLHtzcGFuOltuYSxFZV19LEVlXX1dLCJyb3ctc3RhcnQiOlt7InJvdy1zdGFydCI6VigpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOlYoKX1dLCJncmlkLWZsb3ciOlt7ImdyaWQtZmxvdyI6WyJyb3ciLCJjb2wiLCJkZW5zZSIsInJvdy1kZW5zZSIsImNvbC1kZW5zZSJdfV0sImF1dG8tY29scyI6W3siYXV0by1jb2xzIjpbImF1dG8iLCJtaW4iLCJtYXgiLCJmciIsRWVdfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpbImF1dG8iLCJtaW4iLCJtYXgiLCJmciIsRWVdfV0sZ2FwOlt7Z2FwOltmXX1dLCJnYXAteCI6W3siZ2FwLXgiOltmXX1dLCJnYXAteSI6W3siZ2FwLXkiOltmXX1dLCJqdXN0aWZ5LWNvbnRlbnQiOlt7anVzdGlmeTpbIm5vcm1hbCIsLi4uYigpXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCJdfV0sImp1c3RpZnktc2VsZiI6W3sianVzdGlmeS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6WyJub3JtYWwiLC4uLmIoKSwiYmFzZWxpbmUiXX1dLCJhbGlnbi1pdGVtcyI6W3tpdGVtczpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmFzZWxpbmUiLCJzdHJldGNoIl19XSwiYWxpZ24tc2VsZiI6W3tzZWxmOlsiYXV0byIsInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCIsImJhc2VsaW5lIl19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6Wy4uLmIoKSwiYmFzZWxpbmUiXX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiYXNlbGluZSIsInN0cmV0Y2giXX1dLCJwbGFjZS1zZWxmIjpbeyJwbGFjZS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLHA6W3twOlt5XX1dLHB4Olt7cHg6W3ldfV0scHk6W3tweTpbeV19XSxwczpbe3BzOlt5XX1dLHBlOlt7cGU6W3ldfV0scHQ6W3twdDpbeV19XSxwcjpbe3ByOlt5XX1dLHBiOlt7cGI6W3ldfV0scGw6W3twbDpbeV19XSxtOlt7bTpbd119XSxteDpbe214Olt3XX1dLG15Olt7bXk6W3ddfV0sbXM6W3ttczpbd119XSxtZTpbe21lOlt3XX1dLG10Olt7bXQ6W3ddfV0sbXI6W3ttcjpbd119XSxtYjpbe21iOlt3XX1dLG1sOlt7bWw6W3ddfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOltDXX1dLCJzcGFjZS14LXJldmVyc2UiOlsic3BhY2UteC1yZXZlcnNlIl0sInNwYWNlLXkiOlt7InNwYWNlLXkiOltDXX1dLCJzcGFjZS15LXJldmVyc2UiOlsic3BhY2UteS1yZXZlcnNlIl0sdzpbe3c6WyJhdXRvIiwibWluIiwibWF4IiwiZml0IixFZSxlXX1dLCJtaW4tdyI6W3sibWluLXciOlsibWluIiwibWF4IiwiZml0IixFZSxwcl19XSwibWF4LXciOlt7Im1heC13IjpbIjAiLCJub25lIiwiZnVsbCIsIm1pbiIsIm1heCIsImZpdCIsInByb3NlIix7c2NyZWVuOltBaV19LEFpLEVlXX1dLGg6W3toOltFZSxlLCJhdXRvIiwibWluIiwibWF4IiwiZml0Il19XSwibWluLWgiOlt7Im1pbi1oIjpbIm1pbiIsIm1heCIsImZpdCIscHIsRWVdfV0sIm1heC1oIjpbeyJtYXgtaCI6W0VlLGUsIm1pbiIsIm1heCIsImZpdCJdfV0sImZvbnQtc2l6ZSI6W3t0ZXh0OlsiYmFzZSIsQWksUGldfV0sImZvbnQtc21vb3RoaW5nIjpbImFudGlhbGlhc2VkIiwic3VicGl4ZWwtYW50aWFsaWFzZWQiXSwiZm9udC1zdHlsZSI6WyJpdGFsaWMiLCJub3QtaXRhbGljIl0sImZvbnQtd2VpZ2h0Ijpbe2ZvbnQ6WyJ0aGluIiwiZXh0cmFsaWdodCIsImxpZ2h0Iiwibm9ybWFsIiwibWVkaXVtIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwiYmxhY2siLGdjXX1dLCJmb250LWZhbWlseSI6W3tmb250OltyYV19XSwiZnZuLW5vcm1hbCI6WyJub3JtYWwtbnVtcyJdLCJmdm4tb3JkaW5hbCI6WyJvcmRpbmFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsic2xhc2hlZC16ZXJvIl0sImZ2bi1maWd1cmUiOlsibGluaW5nLW51bXMiLCJvbGRzdHlsZS1udW1zIl0sImZ2bi1zcGFjaW5nIjpbInByb3BvcnRpb25hbC1udW1zIiwidGFidWxhci1udW1zIl0sImZ2bi1mcmFjdGlvbiI6WyJkaWFnb25hbC1mcmFjdGlvbnMiLCJzdGFja2VkLWZyYWN0b25zIl0sdHJhY2tpbmc6W3t0cmFja2luZzpbInRpZ2h0ZXIiLCJ0aWdodCIsIm5vcm1hbCIsIndpZGUiLCJ3aWRlciIsIndpZGVzdCIsRWVdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOlsibm9uZSIsTG8sZ2NdfV0sbGVhZGluZzpbe2xlYWRpbmc6WyJub25lIiwidGlnaHQiLCJzbnVnIiwibm9ybWFsIiwicmVsYXhlZCIsImxvb3NlIixwcixFZV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6WyJub25lIixFZV19XSwibGlzdC1zdHlsZS10eXBlIjpbe2xpc3Q6WyJub25lIiwiZGlzYyIsImRlY2ltYWwiLEVlXX1dLCJsaXN0LXN0eWxlLXBvc2l0aW9uIjpbe2xpc3Q6WyJpbnNpZGUiLCJvdXRzaWRlIl19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6W3RdfV0sInBsYWNlaG9sZGVyLW9wYWNpdHkiOlt7InBsYWNlaG9sZGVyLW9wYWNpdHkiOlt2XX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwianVzdGlmeSIsInN0YXJ0IiwiZW5kIl19XSwidGV4dC1jb2xvciI6W3t0ZXh0Olt0XX1dLCJ0ZXh0LW9wYWNpdHkiOlt7InRleHQtb3BhY2l0eSI6W3ZdfV0sInRleHQtZGVjb3JhdGlvbiI6WyJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCIsIm5vLXVuZGVybGluZSJdLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOlt7ZGVjb3JhdGlvbjpbLi4uUigpLCJ3YXZ5Il19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOlsiYXV0byIsImZyb20tZm9udCIscHIsUGldfV0sInVuZGVybGluZS1vZmZzZXQiOlt7InVuZGVybGluZS1vZmZzZXQiOlsiYXV0byIscHIsRWVdfV0sInRleHQtZGVjb3JhdGlvbi1jb2xvciI6W3tkZWNvcmF0aW9uOlt0XX1dLCJ0ZXh0LXRyYW5zZm9ybSI6WyJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiLCJjYXBpdGFsaXplIiwibm9ybWFsLWNhc2UiXSwidGV4dC1vdmVyZmxvdyI6WyJ0cnVuY2F0ZSIsInRleHQtZWxsaXBzaXMiLCJ0ZXh0LWNsaXAiXSxpbmRlbnQ6W3tpbmRlbnQ6RCgpfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOlsiYmFzZWxpbmUiLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iLCJ0ZXh0LXRvcCIsInRleHQtYm90dG9tIiwic3ViIiwic3VwZXIiLEVlXX1dLHdoaXRlc3BhY2U6W3t3aGl0ZXNwYWNlOlsibm9ybWFsIiwibm93cmFwIiwicHJlIiwicHJlLWxpbmUiLCJwcmUtd3JhcCIsImJyZWFrLXNwYWNlcyJdfV0sYnJlYWs6W3ticmVhazpbIm5vcm1hbCIsIndvcmRzIiwiYWxsIiwia2VlcCJdfV0saHlwaGVuczpbe2h5cGhlbnM6WyJub25lIiwibWFudWFsIiwiYXV0byJdfV0sY29udGVudDpbe2NvbnRlbnQ6WyJub25lIixFZV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbImZpeGVkIiwibG9jYWwiLCJzY3JvbGwiXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwidGV4dCJdfV0sImJnLW9wYWNpdHkiOlt7ImJnLW9wYWNpdHkiOlt2XX1dLCJiZy1vcmlnaW4iOlt7ImJnLW9yaWdpbiI6WyJib3JkZXIiLCJwYWRkaW5nIiwiY29udGVudCJdfV0sImJnLXBvc2l0aW9uIjpbe2JnOlsuLi5LKCksWjJdfV0sImJnLXJlcGVhdCI6W3tiZzpbIm5vLXJlcGVhdCIse3JlcGVhdDpbIiIsIngiLCJ5Iiwicm91bmQiLCJzcGFjZSJdfV19XSwiYmctc2l6ZSI6W3tiZzpbImF1dG8iLCJjb3ZlciIsImNvbnRhaW4iLEsyXX1dLCJiZy1pbWFnZSI6W3tiZzpbIm5vbmUiLHsiZ3JhZGllbnQtdG8iOlsidCIsInRyIiwiciIsImJyIiwiYiIsImJsIiwibCIsInRsIl19LFkyXX1dLCJiZy1jb2xvciI6W3tiZzpbdF19XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpbZ119XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6W2ddfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpbZ119XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOltoXX1dLCJncmFkaWVudC12aWEiOlt7dmlhOltoXX1dLCJncmFkaWVudC10byI6W3t0bzpbaF19XSxyb3VuZGVkOlt7cm91bmRlZDpbb119XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOltvXX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6W29dfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10Ijpbb119XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOltvXX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6W29dfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpbb119XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6W29dfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOltvXX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpbb119XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6W29dfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOltvXX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpbb119XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6W29dfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOltvXX1dLCJib3JkZXItdyI6W3tib3JkZXI6W3NdfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14Ijpbc119XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOltzXX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6W3NdfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpbc119XSwiYm9yZGVyLXctdCI6W3siYm9yZGVyLXQiOltzXX1dLCJib3JkZXItdy1yIjpbeyJib3JkZXItciI6W3NdfV0sImJvcmRlci13LWIiOlt7ImJvcmRlci1iIjpbc119XSwiYm9yZGVyLXctbCI6W3siYm9yZGVyLWwiOltzXX1dLCJib3JkZXItb3BhY2l0eSI6W3siYm9yZGVyLW9wYWNpdHkiOlt2XX1dLCJib3JkZXItc3R5bGUiOlt7Ym9yZGVyOlsuLi5SKCksImhpZGRlbiJdfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6W3NdfV0sImRpdmlkZS14LXJldmVyc2UiOlsiZGl2aWRlLXgtcmV2ZXJzZSJdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOltzXX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbImRpdmlkZS15LXJldmVyc2UiXSwiZGl2aWRlLW9wYWNpdHkiOlt7ImRpdmlkZS1vcGFjaXR5Ijpbdl19XSwiZGl2aWRlLXN0eWxlIjpbe2RpdmlkZTpSKCl9XSwiYm9yZGVyLWNvbG9yIjpbe2JvcmRlcjpbaV19XSwiYm9yZGVyLWNvbG9yLXgiOlt7ImJvcmRlci14IjpbaV19XSwiYm9yZGVyLWNvbG9yLXkiOlt7ImJvcmRlci15IjpbaV19XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpbaV19XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpbaV19XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpbaV19XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpbaV19XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpbaV19XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsiIiwuLi5SKCldfV0sIm91dGxpbmUtb2Zmc2V0IjpbeyJvdXRsaW5lLW9mZnNldCI6W3ByLEVlXX1dLCJvdXRsaW5lLXciOlt7b3V0bGluZTpbcHIsUGldfV0sIm91dGxpbmUtY29sb3IiOlt7b3V0bGluZTpbdF19XSwicmluZy13Ijpbe3Jpbmc6aWUoKX1dLCJyaW5nLXctaW5zZXQiOlsicmluZy1pbnNldCJdLCJyaW5nLWNvbG9yIjpbe3Jpbmc6W3RdfV0sInJpbmctb3BhY2l0eSI6W3sicmluZy1vcGFjaXR5Ijpbdl19XSwicmluZy1vZmZzZXQtdyI6W3sicmluZy1vZmZzZXQiOltwcixQaV19XSwicmluZy1vZmZzZXQtY29sb3IiOlt7InJpbmctb2Zmc2V0IjpbdF19XSxzaGFkb3c6W3tzaGFkb3c6WyIiLCJpbm5lciIsIm5vbmUiLEFpLFgyXX1dLCJzaGFkb3ctY29sb3IiOlt7c2hhZG93OltyYV19XSxvcGFjaXR5Olt7b3BhY2l0eTpbdl19XSwibWl4LWJsZW5kIjpbeyJtaXgtYmxlbmQiOlAoKX1dLCJiZy1ibGVuZCI6W3siYmctYmxlbmQiOlAoKX1dLGZpbHRlcjpbe2ZpbHRlcjpbIiIsIm5vbmUiXX1dLGJsdXI6W3tibHVyOltuXX1dLGJyaWdodG5lc3M6W3ticmlnaHRuZXNzOltyXX1dLGNvbnRyYXN0Olt7Y29udHJhc3Q6W2FdfV0sImRyb3Atc2hhZG93IjpbeyJkcm9wLXNoYWRvdyI6WyIiLCJub25lIixBaSxFZV19XSxncmF5c2NhbGU6W3tncmF5c2NhbGU6W3VdfV0sImh1ZS1yb3RhdGUiOlt7Imh1ZS1yb3RhdGUiOltjXX1dLGludmVydDpbe2ludmVydDpbZF19XSxzYXR1cmF0ZTpbe3NhdHVyYXRlOltfXX1dLHNlcGlhOlt7c2VwaWE6W0VdfV0sImJhY2tkcm9wLWZpbHRlciI6W3siYmFja2Ryb3AtZmlsdGVyIjpbIiIsIm5vbmUiXX1dLCJiYWNrZHJvcC1ibHVyIjpbeyJiYWNrZHJvcC1ibHVyIjpbbl19XSwiYmFja2Ryb3AtYnJpZ2h0bmVzcyI6W3siYmFja2Ryb3AtYnJpZ2h0bmVzcyI6W3JdfV0sImJhY2tkcm9wLWNvbnRyYXN0IjpbeyJiYWNrZHJvcC1jb250cmFzdCI6W2FdfV0sImJhY2tkcm9wLWdyYXlzY2FsZSI6W3siYmFja2Ryb3AtZ3JheXNjYWxlIjpbdV19XSwiYmFja2Ryb3AtaHVlLXJvdGF0ZSI6W3siYmFja2Ryb3AtaHVlLXJvdGF0ZSI6W2NdfV0sImJhY2tkcm9wLWludmVydCI6W3siYmFja2Ryb3AtaW52ZXJ0IjpbZF19XSwiYmFja2Ryb3Atb3BhY2l0eSI6W3siYmFja2Ryb3Atb3BhY2l0eSI6W3ZdfV0sImJhY2tkcm9wLXNhdHVyYXRlIjpbeyJiYWNrZHJvcC1zYXR1cmF0ZSI6W19dfV0sImJhY2tkcm9wLXNlcGlhIjpbeyJiYWNrZHJvcC1zZXBpYSI6W0VdfV0sImJvcmRlci1jb2xsYXBzZSI6W3tib3JkZXI6WyJjb2xsYXBzZSIsInNlcGFyYXRlIl19XSwiYm9yZGVyLXNwYWNpbmciOlt7ImJvcmRlci1zcGFjaW5nIjpbbF19XSwiYm9yZGVyLXNwYWNpbmcteCI6W3siYm9yZGVyLXNwYWNpbmcteCI6W2xdfV0sImJvcmRlci1zcGFjaW5nLXkiOlt7ImJvcmRlci1zcGFjaW5nLXkiOltsXX1dLCJ0YWJsZS1sYXlvdXQiOlt7dGFibGU6WyJhdXRvIiwiZml4ZWQiXX1dLGNhcHRpb246W3tjYXB0aW9uOlsidG9wIiwiYm90dG9tIl19XSx0cmFuc2l0aW9uOlt7dHJhbnNpdGlvbjpbIm5vbmUiLCJhbGwiLCIiLCJjb2xvcnMiLCJvcGFjaXR5Iiwic2hhZG93IiwidHJhbnNmb3JtIixFZV19XSxkdXJhdGlvbjpbe2R1cmF0aW9uOm5lKCl9XSxlYXNlOlt7ZWFzZTpbImxpbmVhciIsImluIiwib3V0IiwiaW4tb3V0IixFZV19XSxkZWxheTpbe2RlbGF5Om5lKCl9XSxhbmltYXRlOlt7YW5pbWF0ZTpbIm5vbmUiLCJzcGluIiwicGluZyIsInB1bHNlIiwiYm91bmNlIixFZV19XSx0cmFuc2Zvcm06W3t0cmFuc2Zvcm06WyIiLCJncHUiLCJub25lIl19XSxzY2FsZTpbe3NjYWxlOltTXX1dLCJzY2FsZS14IjpbeyJzY2FsZS14IjpbU119XSwic2NhbGUteSI6W3sic2NhbGUteSI6W1NdfV0scm90YXRlOlt7cm90YXRlOltuYSxFZV19XSwidHJhbnNsYXRlLXgiOlt7InRyYW5zbGF0ZS14IjpbTl19XSwidHJhbnNsYXRlLXkiOlt7InRyYW5zbGF0ZS15IjpbTl19XSwic2tldy14IjpbeyJza2V3LXgiOlskXX1dLCJza2V3LXkiOlt7InNrZXcteSI6WyRdfV0sInRyYW5zZm9ybS1vcmlnaW4iOlt7b3JpZ2luOlsiY2VudGVyIiwidG9wIiwidG9wLXJpZ2h0IiwicmlnaHQiLCJib3R0b20tcmlnaHQiLCJib3R0b20iLCJib3R0b20tbGVmdCIsImxlZnQiLCJ0b3AtbGVmdCIsRWVdfV0sYWNjZW50Olt7YWNjZW50OlsiYXV0byIsdF19XSxhcHBlYXJhbmNlOlsiYXBwZWFyYW5jZS1ub25lIl0sY3Vyc29yOlt7Y3Vyc29yOlsiYXV0byIsImRlZmF1bHQiLCJwb2ludGVyIiwid2FpdCIsInRleHQiLCJtb3ZlIiwiaGVscCIsIm5vdC1hbGxvd2VkIiwibm9uZSIsImNvbnRleHQtbWVudSIsInByb2dyZXNzIiwiY2VsbCIsImNyb3NzaGFpciIsInZlcnRpY2FsLXRleHQiLCJhbGlhcyIsImNvcHkiLCJuby1kcm9wIiwiZ3JhYiIsImdyYWJiaW5nIiwiYWxsLXNjcm9sbCIsImNvbC1yZXNpemUiLCJyb3ctcmVzaXplIiwibi1yZXNpemUiLCJlLXJlc2l6ZSIsInMtcmVzaXplIiwidy1yZXNpemUiLCJuZS1yZXNpemUiLCJudy1yZXNpemUiLCJzZS1yZXNpemUiLCJzdy1yZXNpemUiLCJldy1yZXNpemUiLCJucy1yZXNpemUiLCJuZXN3LXJlc2l6ZSIsIm53c2UtcmVzaXplIiwiem9vbS1pbiIsInpvb20tb3V0IixFZV19XSwiY2FyZXQtY29sb3IiOlt7Y2FyZXQ6W3RdfV0sInBvaW50ZXItZXZlbnRzIjpbeyJwb2ludGVyLWV2ZW50cyI6WyJub25lIiwiYXV0byJdfV0scmVzaXplOlt7cmVzaXplOlsibm9uZSIsInkiLCJ4IiwiIl19XSwic2Nyb2xsLWJlaGF2aW9yIjpbe3Njcm9sbDpbImF1dG8iLCJzbW9vdGgiXX1dLCJzY3JvbGwtbSI6W3sic2Nyb2xsLW0iOkQoKX1dLCJzY3JvbGwtbXgiOlt7InNjcm9sbC1teCI6RCgpfV0sInNjcm9sbC1teSI6W3sic2Nyb2xsLW15IjpEKCl9XSwic2Nyb2xsLW1zIjpbeyJzY3JvbGwtbXMiOkQoKX1dLCJzY3JvbGwtbWUiOlt7InNjcm9sbC1tZSI6RCgpfV0sInNjcm9sbC1tdCI6W3sic2Nyb2xsLW10IjpEKCl9XSwic2Nyb2xsLW1yIjpbeyJzY3JvbGwtbXIiOkQoKX1dLCJzY3JvbGwtbWIiOlt7InNjcm9sbC1tYiI6RCgpfV0sInNjcm9sbC1tbCI6W3sic2Nyb2xsLW1sIjpEKCl9XSwic2Nyb2xsLXAiOlt7InNjcm9sbC1wIjpEKCl9XSwic2Nyb2xsLXB4IjpbeyJzY3JvbGwtcHgiOkQoKX1dLCJzY3JvbGwtcHkiOlt7InNjcm9sbC1weSI6RCgpfV0sInNjcm9sbC1wcyI6W3sic2Nyb2xsLXBzIjpEKCl9XSwic2Nyb2xsLXBlIjpbeyJzY3JvbGwtcGUiOkQoKX1dLCJzY3JvbGwtcHQiOlt7InNjcm9sbC1wdCI6RCgpfV0sInNjcm9sbC1wciI6W3sic2Nyb2xsLXByIjpEKCl9XSwic2Nyb2xsLXBiIjpbeyJzY3JvbGwtcGIiOkQoKX1dLCJzY3JvbGwtcGwiOlt7InNjcm9sbC1wbCI6RCgpfV0sInNuYXAtYWxpZ24iOlt7c25hcDpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYWxpZ24tbm9uZSJdfV0sInNuYXAtc3RvcCI6W3tzbmFwOlsibm9ybWFsIiwiYWx3YXlzIl19XSwic25hcC10eXBlIjpbe3NuYXA6WyJub25lIiwieCIsInkiLCJib3RoIl19XSwic25hcC1zdHJpY3RuZXNzIjpbe3NuYXA6WyJtYW5kYXRvcnkiLCJwcm94aW1pdHkiXX1dLHRvdWNoOlt7dG91Y2g6WyJhdXRvIiwibm9uZSIsIm1hbmlwdWxhdGlvbiJdfV0sInRvdWNoLXgiOlt7InRvdWNoLXBhbiI6WyJ4IiwibGVmdCIsInJpZ2h0Il19XSwidG91Y2gteSI6W3sidG91Y2gtcGFuIjpbInkiLCJ1cCIsImRvd24iXX1dLCJ0b3VjaC1weiI6WyJ0b3VjaC1waW5jaC16b29tIl0sc2VsZWN0Olt7c2VsZWN0Olsibm9uZSIsInRleHQiLCJhbGwiLCJhdXRvIl19XSwid2lsbC1jaGFuZ2UiOlt7IndpbGwtY2hhbmdlIjpbImF1dG8iLCJzY3JvbGwiLCJjb250ZW50cyIsInRyYW5zZm9ybSIsRWVdfV0sZmlsbDpbe2ZpbGw6W3QsIm5vbmUiXX1dLCJzdHJva2UtdyI6W3tzdHJva2U6W3ByLFBpLGdjXX1dLHN0cm9rZTpbe3N0cm9rZTpbdCwibm9uZSJdfV0sc3I6WyJzci1vbmx5Iiwibm90LXNyLW9ubHkiXX0sY29uZmxpY3RpbmdDbGFzc0dyb3Vwczp7b3ZlcmZsb3c6WyJvdmVyZmxvdy14Iiwib3ZlcmZsb3cteSJdLG92ZXJzY3JvbGw6WyJvdmVyc2Nyb2xsLXgiLCJvdmVyc2Nyb2xsLXkiXSxpbnNldDpbImluc2V0LXgiLCJpbnNldC15Iiwic3RhcnQiLCJlbmQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSwiaW5zZXQteCI6WyJyaWdodCIsImxlZnQiXSwiaW5zZXQteSI6WyJ0b3AiLCJib3R0b20iXSxmbGV4OlsiYmFzaXMiLCJncm93Iiwic2hyaW5rIl0sZ2FwOlsiZ2FwLXgiLCJnYXAteSJdLHA6WyJweCIsInB5IiwicHMiLCJwZSIsInB0IiwicHIiLCJwYiIsInBsIl0scHg6WyJwciIsInBsIl0scHk6WyJwdCIsInBiIl0sbTpbIm14IiwibXkiLCJtcyIsIm1lIiwibXQiLCJtciIsIm1iIiwibWwiXSxteDpbIm1yIiwibWwiXSxteTpbIm10IiwibWIiXSwiZm9udC1zaXplIjpbImxlYWRpbmciXSwiZnZuLW5vcm1hbCI6WyJmdm4tb3JkaW5hbCIsImZ2bi1zbGFzaGVkLXplcm8iLCJmdm4tZmlndXJlIiwiZnZuLXNwYWNpbmciLCJmdm4tZnJhY3Rpb24iXSwiZnZuLW9yZGluYWwiOlsiZnZuLW5vcm1hbCJdLCJmdm4tc2xhc2hlZC16ZXJvIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZpZ3VyZSI6WyJmdm4tbm9ybWFsIl0sImZ2bi1zcGFjaW5nIjpbImZ2bi1ub3JtYWwiXSwiZnZuLWZyYWN0aW9uIjpbImZ2bi1ub3JtYWwiXSxyb3VuZGVkOlsicm91bmRlZC1zIiwicm91bmRlZC1lIiwicm91bmRlZC10Iiwicm91bmRlZC1yIiwicm91bmRlZC1iIiwicm91bmRlZC1sIiwicm91bmRlZC1zcyIsInJvdW5kZWQtc2UiLCJyb3VuZGVkLWVlIiwicm91bmRlZC1lcyIsInJvdW5kZWQtdGwiLCJyb3VuZGVkLXRyIiwicm91bmRlZC1iciIsInJvdW5kZWQtYmwiXSwicm91bmRlZC1zIjpbInJvdW5kZWQtc3MiLCJyb3VuZGVkLWVzIl0sInJvdW5kZWQtZSI6WyJyb3VuZGVkLXNlIiwicm91bmRlZC1lZSJdLCJyb3VuZGVkLXQiOlsicm91bmRlZC10bCIsInJvdW5kZWQtdHIiXSwicm91bmRlZC1yIjpbInJvdW5kZWQtdHIiLCJyb3VuZGVkLWJyIl0sInJvdW5kZWQtYiI6WyJyb3VuZGVkLWJyIiwicm91bmRlZC1ibCJdLCJyb3VuZGVkLWwiOlsicm91bmRlZC10bCIsInJvdW5kZWQtYmwiXSwiYm9yZGVyLXNwYWNpbmciOlsiYm9yZGVyLXNwYWNpbmcteCIsImJvcmRlci1zcGFjaW5nLXkiXSwiYm9yZGVyLXciOlsiYm9yZGVyLXctcyIsImJvcmRlci13LWUiLCJib3JkZXItdy10IiwiYm9yZGVyLXctciIsImJvcmRlci13LWIiLCJib3JkZXItdy1sIl0sImJvcmRlci13LXgiOlsiYm9yZGVyLXctciIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteSI6WyJib3JkZXItdy10IiwiYm9yZGVyLXctYiJdLCJib3JkZXItY29sb3IiOlsiYm9yZGVyLWNvbG9yLXQiLCJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1iIiwiYm9yZGVyLWNvbG9yLWwiXSwiYm9yZGVyLWNvbG9yLXgiOlsiYm9yZGVyLWNvbG9yLXIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteSI6WyJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1iIl0sInNjcm9sbC1tIjpbInNjcm9sbC1teCIsInNjcm9sbC1teSIsInNjcm9sbC1tcyIsInNjcm9sbC1tZSIsInNjcm9sbC1tdCIsInNjcm9sbC1tciIsInNjcm9sbC1tYiIsInNjcm9sbC1tbCJdLCJzY3JvbGwtbXgiOlsic2Nyb2xsLW1yIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teSI6WyJzY3JvbGwtbXQiLCJzY3JvbGwtbWIiXSwic2Nyb2xsLXAiOlsic2Nyb2xsLXB4Iiwic2Nyb2xsLXB5Iiwic2Nyb2xsLXBzIiwic2Nyb2xsLXBlIiwic2Nyb2xsLXB0Iiwic2Nyb2xsLXByIiwic2Nyb2xsLXBiIiwic2Nyb2xsLXBsIl0sInNjcm9sbC1weCI6WyJzY3JvbGwtcHIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB5IjpbInNjcm9sbC1wdCIsInNjcm9sbC1wYiJdLHRvdWNoOlsidG91Y2gteCIsInRvdWNoLXkiLCJ0b3VjaC1weiJdLCJ0b3VjaC14IjpbInRvdWNoIl0sInRvdWNoLXkiOlsidG91Y2giXSwidG91Y2gtcHoiOlsidG91Y2giXX0sY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOnsiZm9udC1zaXplIjpbImxlYWRpbmciXX19fWNvbnN0IHRSPUkyKGVSKTtmdW5jdGlvbiB4dCguLi50KXtyZXR1cm4gdFIocFModCkpfWNvbnN0ICRhPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LGNoaWxkcmVuOmUsaW5uZXJSZWY6biwuLi5yfSxpKT0+eC5qc3hzKGZTLHtyZWY6aSxjbGFzc05hbWU6eHQoInJlbGF0aXZlIG92ZXJmbG93LWhpZGRlbiIsdCksLi4ucixjaGlsZHJlbjpbeC5qc3goRTIse2NsYXNzTmFtZToiaC1mdWxsIHctZnVsbCByb3VuZGVkLVtpbmhlcml0XSIscmVmOm4sY2hpbGRyZW46ZX0pLHguanN4KF9TLHt9KSx4LmpzeChDMix7fSldfSkpOyRhLmRpc3BsYXlOYW1lPWZTLmRpc3BsYXlOYW1lO2NvbnN0IF9TPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LG9yaWVudGF0aW9uOmU9InZlcnRpY2FsIiwuLi5ufSxyKT0+eC5qc3goaVMse3JlZjpyLG9yaWVudGF0aW9uOmUsY2xhc3NOYW1lOnh0KCJmbGV4IHRvdWNoLW5vbmUgc2VsZWN0LW5vbmUgdHJhbnNpdGlvbi1jb2xvcnMiLGU9PT0idmVydGljYWwiJiYiaC1mdWxsIHctMi41IGJvcmRlci1sIGJvcmRlci1sLXRyYW5zcGFyZW50IHAtWzFweF0iLGU9PT0iaG9yaXpvbnRhbCImJiJoLTIuNSBmbGV4LWNvbCBib3JkZXItdCBib3JkZXItdC10cmFuc3BhcmVudCBwLVsxcHhdIix0KSwuLi5uLGNoaWxkcmVuOnguanN4KHYyLHtjbGFzc05hbWU6eHQoInJlbGF0aXZlIHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIiLGU9PT0idmVydGljYWwiJiYiZmxleC0xIil9KX0pKTtfUy5kaXNwbGF5TmFtZT1pUy5kaXNwbGF5TmFtZTt2YXIgblI9e3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6MjQsaGVpZ2h0OjI0LHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOjIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9O2NvbnN0IHJSPXQ9PnQucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywiJDEtJDIiKS50b0xvd2VyQ2FzZSgpLE1uPSh0LGUpPT57Y29uc3Qgbj1wLmZvcndhcmRSZWYoKHtjb2xvcjpyPSJjdXJyZW50Q29sb3IiLHNpemU6aT0yNCxzdHJva2VXaWR0aDpvPTIsYWJzb2x1dGVTdHJva2VXaWR0aDpsLGNoaWxkcmVuOnMsLi4uYX0sdSk9PnAuY3JlYXRlRWxlbWVudCgic3ZnIix7cmVmOnUsLi4ublIsd2lkdGg6aSxoZWlnaHQ6aSxzdHJva2U6cixzdHJva2VXaWR0aDpsP051bWJlcihvKSoyNC9OdW1iZXIoaSk6byxjbGFzc05hbWU6YGx1Y2lkZSBsdWNpZGUtJHtyUih0KX1gLC4uLmF9LFsuLi5lLm1hcCgoW2MsZF0pPT5wLmNyZWF0ZUVsZW1lbnQoYyxkKSksLi4uKEFycmF5LmlzQXJyYXkocyk/czpbc10pfHxbXV0pKTtyZXR1cm4gbi5kaXNwbGF5TmFtZT1gJHt0fWAsbn0saVI9TW4oIkNoZWNrIixbWyJwb2x5bGluZSIse3BvaW50czoiMjAgNiA5IDE3IDQgMTIiLGtleToiMTBqamZqIn1dXSksd1M9TW4oIkNoZXZyb25Eb3duIixbWyJwYXRoIix7ZDoibTYgOSA2IDYgNi02IixrZXk6InFydW5zbCJ9XV0pLG9SPU1uKCJDaGV2cm9uTGVmdCIsW1sicGF0aCIse2Q6Im0xNSAxOC02LTYgNi02IixrZXk6IjF3bmZnMyJ9XV0pLFAwPU1uKCJMb2dJbiIsW1sicGF0aCIse2Q6Ik0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00IixrZXk6InU1M3M2ciJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIxMCAxNyAxNSAxMiAxMCA3IixrZXk6IjFhaWwwaCJ9XSxbImxpbmUiLHt4MToiMTUiLHgyOiIzIix5MToiMTIiLHkyOiIxMiIsa2V5OiJ2NmdyeDgifV1dKSxsUj1NbigiTWF4aW1pemUyIixbWyJwb2x5bGluZSIse3BvaW50czoiMTUgMyAyMSAzIDIxIDkiLGtleToibXpueWFkIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjkgMjEgMyAyMSAzIDE1IixrZXk6IjFhdm4xaSJ9XSxbImxpbmUiLHt4MToiMjEiLHgyOiIxNCIseTE6IjMiLHkyOiIxMCIsa2V5OiJvdGE3bW4ifV0sWyJsaW5lIix7eDE6IjMiLHgyOiIxMCIseTE6IjIxIix5MjoiMTQiLGtleToiMWF0bDByIn1dXSksc1I9TW4oIk1lbnUiLFtbImxpbmUiLHt4MToiNCIseDI6IjIwIix5MToiMTIiLHkyOiIxMiIsa2V5OiIxZTBhOWkifV0sWyJsaW5lIix7eDE6IjQiLHgyOiIyMCIseTE6IjYiLHkyOiI2IixrZXk6IjFvd29iMyJ9XSxbImxpbmUiLHt4MToiNCIseDI6IjIwIix5MToiMTgiLHkyOiIxOCIsa2V5OiJ5azV6ajEifV1dKSxhUj1NbigiTWluaW1pemUyIixbWyJwb2x5bGluZSIse3BvaW50czoiNCAxNCAxMCAxNCAxMCAyMCIsa2V5OiIxMWtmbnIifV0sWyJwb2x5bGluZSIse3BvaW50czoiMjAgMTAgMTQgMTAgMTQgNCIsa2V5OiJybG1zY2UifV0sWyJsaW5lIix7eDE6IjE0Iix4MjoiMjEiLHkxOiIxMCIseTI6IjMiLGtleToibzVsYWZ6In1dLFsibGluZSIse3gxOiIzIix4MjoiMTAiLHkxOiIyMSIseTI6IjE0IixrZXk6IjFhdGwwciJ9XV0pLHVSPU1uKCJNb29uIixbWyJwYXRoIix7ZDoiTTEyIDNhNiA2IDAgMCAwIDkgOSA5IDkgMCAxIDEtOS05WiIsa2V5OiJhN3RuMTgifV1dKSxjUj1NbigiUGF1c2UiLFtbInJlY3QiLHt3aWR0aDoiNCIsaGVpZ2h0OiIxNiIseDoiNiIseToiNCIsa2V5OiJpZmZoZTQifV0sWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTYiLHg6IjE0Iix5OiI0IixrZXk6InNqaW43aiJ9XV0pLGRSPU1uKCJQbGF5IixbWyJwb2x5Z29uIix7cG9pbnRzOiI1IDMgMTkgMTIgNSAyMSA1IDMiLGtleToiMTkxNjM3In1dXSksZlI9TW4oIlBvd2VyIixbWyJwYXRoIix7ZDoiTTEyIDJ2MTAiLGtleToibW5mYmwifV0sWyJwYXRoIix7ZDoiTTE4LjQgNi42YTkgOSAwIDEgMS0xMi43Ny4wNCIsa2V5OiJvYm9mdTkifV1dKSxoUj1NbigiU2VuZCIsW1sicGF0aCIse2Q6Im0yMiAyLTcgMjAtNC05LTktNFoiLGtleToiMXEzdmdnIn1dLFsicGF0aCIse2Q6Ik0yMiAyIDExIDEzIixrZXk6Im56YnFlZiJ9XV0pLHBSPU1uKCJTdW4iLFtbImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiI0IixrZXk6IjRleGlwMiJ9XSxbInBhdGgiLHtkOiJNMTIgMnYyIixrZXk6InR1czAzbSJ9XSxbInBhdGgiLHtkOiJNMTIgMjB2MiIsa2V5OiIxbGgxa2cifV0sWyJwYXRoIix7ZDoibTQuOTMgNC45MyAxLjQxIDEuNDEiLGtleToiMTQ5dDZqIn1dLFsicGF0aCIse2Q6Im0xNy42NiAxNy42NiAxLjQxIDEuNDEiLGtleToicHRiZ3V2In1dLFsicGF0aCIse2Q6Ik0yIDEyaDIiLGtleToiMXQ4ZjhuIn1dLFsicGF0aCIse2Q6Ik0yMCAxMmgyIixrZXk6IjFxOG1qdyJ9XSxbInBhdGgiLHtkOiJtNi4zNCAxNy42Ni0xLjQxIDEuNDEiLGtleToiMW04eno1In1dLFsicGF0aCIse2Q6Im0xOS4wNyA0LjkzLTEuNDEgMS40MSIsa2V5OiIxc2hsY3MifV1dKSxtUj1NbigiWCIsW1sicGF0aCIse2Q6Ik0xOCA2IDYgMTgiLGtleToiMWJsNWY4In1dLFsicGF0aCIse2Q6Im02IDYgMTIgMTIiLGtleToiZDhiazZ2In1dXSk7ZnVuY3Rpb24gVGEoe2NoaWxkcmVuOnR9KXtjb25zdCBlPXAudXNlUmVmKG51bGwpLG49cC51c2VSZWYobnVsbCkscj1wLnVzZVJlZighMSksaT1wLnVzZVJlZigwKSxvPXAudXNlUmVmKG51bGwpLGw9cC51c2VSZWYoMCksW3MsYV09cC51c2VTdGF0ZSghMCksdT0oKT0+e3IuY3VycmVudD0hMSxvLmN1cnJlbnQ9bnVsbCxpLmN1cnJlbnQ9MCxsLmN1cnJlbnQ9MH0sYz15PT57eS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IF89by5jdXJyZW50PT09ImxlZnQiP2U6bjtpZihfLmN1cnJlbnQmJnIuY3VycmVudCl7Y29uc3QgUz1vLmN1cnJlbnQ9PT0ibGVmdCI/eS5zY3JlZW5YLWkuY3VycmVudDppLmN1cnJlbnQteS5zY3JlZW5YO18uY3VycmVudC5zdHlsZS53aWR0aD1gJHtNYXRoLm1heChsLmN1cnJlbnQrUywxNTApfXB4YH19LGQ9eT0+Xz0+e2lmKF8udGFyZ2V0KXtjb25zdCBFPXk9PT0ibGVmdCI/ZTp5PT09InJpZ2h0Ij9uOm51bGw7ci5jdXJyZW50PSEwLEUmJkUuY3VycmVudCYmKGkuY3VycmVudD1fLnNjcmVlblgsby5jdXJyZW50PXksRS5jdXJyZW50JiYobC5jdXJyZW50PUUuY3VycmVudC5vZmZzZXRXaWR0aCkpfX0sW2YsaCxnLG0sdyx2XT1wLkNoaWxkcmVuLnRvQXJyYXkodCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT4oZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsdSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixjKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLHUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsYyl9KSxbXSkseC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXggaC1zY3JlZW4iLGNoaWxkcmVuOlt4LmpzeHMoImRpdiIse3JlZjplLGNsYXNzTmFtZTpQbigiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGJvcmRlci1yIGJvcmRlci1ib3JkZXIgbWQ6cmVsYXRpdmUgei1bMV0gYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1jYXJkIGZyb20tNTAlIHRvLWJhY2tncm91bmQiLHsidy1bMzAwcHhdIjpzLCJ3LTAgbWQ6dy1bMzAwcHhdIjohc30pLGNoaWxkcmVuOlt4LmpzeHMoVGEuQ29sdW1uLHtjaGlsZHJlbjpbeC5qc3goQTAse3Nob3dPbk1vYmlsZTohcyxvbkNsaWNrOigpPT57YSghcyl9LGNoaWxkcmVuOmZ9KSx4LmpzeCgkYSx7c3R5bGU6e2hlaWdodDoiY2FsYygxMDB2aCAtIDUwcHgpIn0sb25DbGljazooKT0+e2EoITEpfSxjaGlsZHJlbjpofSldfSkseC5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQteS0wIHJpZ2h0LTAgY3Vyc29yLWNvbC1yZXNpemUgdy1bMXB4XSBob3Zlcjp3LVszcHhdIGgtZnVsbCBob3ZlcjpiZy1ib3JkZXIiLG9uTW91c2VEb3duOmQoImxlZnQiKX0pXX0pLHguanN4KCJkaXYiLHtjbGFzc05hbWU6UG4oIiIseyJ3LWZ1bGwiOiF3JiYhdn0pLGNoaWxkcmVuOnguanN4cyhUYS5Db2x1bW4se2NoaWxkcmVuOlt4LmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXggdy1mdWxsIGJvcmRlci1iIGJvcmRlci1ib3JkZXIiLGNoaWxkcmVuOlt4LmpzeChBMCx7Y2xhc3NOYW1lOiJtZDpoaWRkZW4iLHNob3dPbk1vYmlsZTpzLG9uQ2xpY2s6KCk9PnthKCFzKX0sY2hpbGRyZW46Zn0pLHguanN4KCJzcGFuIix7Y2xhc3NOYW1lOlBuKHsicGwtWzMwMHB4XSBtZDpwbC0wIjpzfSksY2hpbGRyZW46Z30pXX0pLHguanN4KCRhLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxjaGlsZHJlbjptfSldfSl9KSx3fHx2JiZ4LmpzeHMoImRpdiIse3JlZjpuLGNsYXNzTmFtZToicmVsYXRpdmUgaC1zY3JlZW4gYm9yZGVyLWwgYm9yZGVyLWJvcmRlciIsc3R5bGU6e3dpZHRoOjMwMH0sY2hpbGRyZW46W3guanN4cyhUYS5Db2x1bW4se2NoaWxkcmVuOlt3LHguanN4KCRhLHtzdHlsZTp7aGVpZ2h0OiJjYWxjKDEwMHZoIC0gNTBweCkifSxjaGlsZHJlbjp2fSldfSkseC5qc3goImRpdiIse29uTW91c2VEb3duOmQoInJpZ2h0IiksY2xhc3NOYW1lOiJhYnNvbHV0ZSBpbnNldC15LTAgbGVmdC0wIGN1cnNvci1jb2wtcmVzaXplIHctWzFweF0gYmctYm9yZGVyIGhvdmVyOnctWzNweF0gaG92ZXI6YmctYm9yZGVyIn0pXX0pXX0pfWZ1bmN0aW9uIEEwKHtjbGFzc05hbWU6dCxzaG93T25Nb2JpbGU6ZSxvbkNsaWNrOm4sY2hpbGRyZW46cn0pe3JldHVybiB4LmpzeHMoImRpdiIse2NsYXNzTmFtZTpQbigiZmxleCBpdGVtcy1jZW50ZXIgcHgtNCBtZDpweC00Iix0LHsiaGlkZGVuIG1kOmZsZXgiOmV9KSxjaGlsZHJlbjpbeC5qc3goImJ1dHRvbiIse2NsYXNzTmFtZToibWQ6aGlkZGVuIixvbkNsaWNrOm4sY2hpbGRyZW46eC5qc3goc1Ise30pfSkseC5qc3goInNwYW4iLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwiLGNoaWxkcmVuOnJ9KV19KX1UYS5Db2x1bW49KHtjaGlsZHJlbjp0LGNsYXNzTmFtZTplfSk9Pntjb25zdFtuLHJdPXAuQ2hpbGRyZW4udG9BcnJheSh0KTtyZXR1cm4geC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6UG4oImZsZXggZmxleC1jb2wiLGUpLGNoaWxkcmVuOlt4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBib3JkZXItYiBib3JkZXItYm9yZGVyIixjaGlsZHJlbjpufSkscl19KX07dmFyIEk9e307bGV0IGtmPXt9LFNTPXt9LGl1PXt9LE5hPXt9LGVtPXt9LHFsPXt9LFFnPXt9LHRtPXt9LG91PXt9LGx1PXt9LEtpPXt9LHFnPXt9LGV2PXt9LEVTPXt9LENTPXt9LGtTPXt9LGJTPXt9LCRTPXt9LFRTPXt9LE5TPXt9LEVkPXt9LFJTPXt9LE9TPXt9LFBTPXt9LEFTPXt9LE1TPXt9LExTPXt9LERTPXt9LElTPXt9LGpTPXt9LHR2PXt9LG52PXt9LG5tPXt9LHpTPXt9LEZTPXt9LEJTPXt9O2Z1bmN0aW9uIEgodCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZCgiY29kZSIsdCk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllLmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHt0fTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7ZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBraT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsZ1I9a2kmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwsSnQ9a2kmJi9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pLHNvPWtpJiYvXig/IS4qU2VhbW9ua2V5KSg/PS4qRmlyZWZveCkuKi9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQ2Q9a2kmJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIWdSPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLHJ2PWtpJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksYmY9a2kmJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLHZSPWtpJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpdj1raSYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF2UiwkZj1ydnx8YmZ8fGl2PyLCoCI6IuKAiyIseVI9c28/IsKgIjokZix4Uj0vXlteQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdKltcdTA1OTEtXHUwN2ZmXHVmYjFkLVx1ZmRmZFx1ZmU3MC1cdWZlZmNdLyxfUj0vXlteXHUwNTkxLVx1MDdmZlx1ZmIxZC1cdWZkZmRcdWZlNzAtXHVmZWZjXSpbQS1aYS16XHUwMGMwLVx1MDBkNlx1MDBkOC1cdTAwZjZcdTAwZjgtXHUwMmI4XHUwMzAwLVx1MDU5MFx1MDgwMC1cdTFmZmZcdTIwMGVcdTJjMDAtXHVmYjFjXHVmZTAwLVx1ZmU2Zlx1ZmVmZC1cdWZmZmZdLyxGbz17Ym9sZDoxLGNvZGU6MTYsaGlnaGxpZ2h0OjEyOCxpdGFsaWM6MixzdHJpa2V0aHJvdWdoOjQsc3Vic2NyaXB0OjMyLHN1cGVyc2NyaXB0OjY0LHVuZGVybGluZTo4fSx3Uj17ZGlyZWN0aW9ubGVzczoxLHVubWVyZ2VhYmxlOjJ9LE0wPXtjZW50ZXI6MixlbmQ6NixqdXN0aWZ5OjQsbGVmdDoxLHJpZ2h0OjMsc3RhcnQ6NX0sU1I9ezI6ImNlbnRlciIsNjoiZW5kIiw0OiJqdXN0aWZ5IiwxOiJsZWZ0IiwzOiJyaWdodCIsNToic3RhcnQifSxFUj17bm9ybWFsOjAsc2VnbWVudGVkOjIsdG9rZW46MX0sQ1I9ezA6Im5vcm1hbCIsMjoic2VnbWVudGVkIiwxOiJ0b2tlbiJ9LHJtPSExLG92PTA7ZnVuY3Rpb24ga1IodCl7b3Y9dC50aW1lU3RhbXB9ZnVuY3Rpb24gT2godCxlLG4pe3JldHVybiBlLl9fbGV4aWNhbExpbmVCcmVhaz09PXR8fHRbYF9fbGV4aWNhbEtleV8ke24uX2tleX1gXSE9PXZvaWQgMH1mdW5jdGlvbiBiUih0KXtyZXR1cm4gdC5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoKCk9PntsZXQgZT1ydCgpO3JldHVybiBlIT09bnVsbD9lLmNsb25lKCk6bnVsbH0pfWZ1bmN0aW9uIFVTKHQsZSxuKXtybT0hMDtsZXQgcj0xMDA8cGVyZm9ybWFuY2Uubm93KCktb3Y7dHJ5e0huKHQsKCk9PntsZXQgaT1ydCgpfHxiUih0KTt2YXIgbz1uZXcgTWFwLGw9dC5nZXRSb290RWxlbWVudCgpLHM9dC5fZWRpdG9yU3RhdGUsYT10Ll9ibG9ja0N1cnNvckVsZW1lbnQ7bGV0IHU9ITEsYz0iIjtmb3IodmFyIGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9ZVtkXSxoPWYudHlwZSxnPWYudGFyZ2V0LG09RnUoZyxzKTtpZighKG09PT1udWxsJiZnIT09bHx8dHQobSkpKXtpZihoPT09ImNoYXJhY3RlckRhdGEiKXtpZihmPXImJlEobSkpZTp7Zj1pLGg9Zzt2YXIgdz1tO2lmKGdlKGYpKXt2YXIgdj1mLmFuY2hvci5nZXROb2RlKCk7aWYodi5pcyh3KSYmZi5mb3JtYXQhPT12LmdldEZvcm1hdCgpKXtmPSExO2JyZWFrIGV9fWY9aC5ub2RlVHlwZT09PTMmJncuaXNBdHRhY2hlZCgpfWYmJih3PUpyKHQuX3dpbmRvdyksaD1mPW51bGwsdyE9PW51bGwmJncuYW5jaG9yTm9kZT09PWcmJihmPXcuYW5jaG9yT2Zmc2V0LGg9dy5mb2N1c09mZnNldCksZz1nLm5vZGVWYWx1ZSxnIT09bnVsbCYmZHYobSxnLGYsaCwhMSkpfWVsc2UgaWYoaD09PSJjaGlsZExpc3QiKXtmb3IodT0hMCxoPWYuYWRkZWROb2Rlcyx3PTA7dzxoLmxlbmd0aDt3Kyspe3Y9aFt3XTt2YXIgeT1ZUyh2KSxfPXYucGFyZW50Tm9kZTtfPT1udWxsfHx2PT09YXx8eSE9PW51bGx8fHYubm9kZU5hbWU9PT0iQlIiJiZPaCh2LF8sdCl8fChzbyYmKHk9di5pbm5lclRleHR8fHYubm9kZVZhbHVlKSYmKGMrPXkpLF8ucmVtb3ZlQ2hpbGQodikpfWlmKGY9Zi5yZW1vdmVkTm9kZXMsaD1mLmxlbmd0aCwwPGgpe2Zvcih3PTAsdj0wO3Y8aDt2KyspXz1mW3ZdLChfLm5vZGVOYW1lPT09IkJSIiYmT2goXyxnLHQpfHxhPT09XykmJihnLmFwcGVuZENoaWxkKF8pLHcrKyk7aCE9PXcmJihnPT09bCYmKG09cy5fbm9kZU1hcC5nZXQoInJvb3QiKSksby5zZXQoZyxtKSl9fX19aWYoMDxvLnNpemUpZm9yKGxldFtTLEVdb2YgbylpZihCKEUpKWZvcihvPUUuZ2V0Q2hpbGRyZW5LZXlzKCksbD1TLmZpcnN0Q2hpbGQscz0wO3M8by5sZW5ndGg7cysrKWE9dC5nZXRFbGVtZW50QnlLZXkob1tzXSksYSE9PW51bGwmJihsPT1udWxsPyhTLmFwcGVuZENoaWxkKGEpLGw9YSk6bCE9PWEmJlMucmVwbGFjZUNoaWxkKGEsbCksbD1sLm5leHRTaWJsaW5nKTtlbHNlIFEoRSkmJkUubWFya0RpcnR5KCk7aWYobz1uLnRha2VSZWNvcmRzKCksMDxvLmxlbmd0aCl7Zm9yKGw9MDtsPG8ubGVuZ3RoO2wrKylmb3IoYT1vW2xdLHM9YS5hZGRlZE5vZGVzLGE9YS50YXJnZXQsZD0wO2Q8cy5sZW5ndGg7ZCsrKW09c1tkXSxnPW0ucGFyZW50Tm9kZSxnPT1udWxsfHxtLm5vZGVOYW1lIT09IkJSInx8T2gobSxhLHQpfHxnLnJlbW92ZUNoaWxkKG0pO24udGFrZVJlY29yZHMoKX1pIT09bnVsbCYmKHUmJihpLmRpcnR5PSEwLFZyKGkpKSxzbyYmcVModCkmJmkuaW5zZXJ0UmF3VGV4dChjKSl9KX1maW5hbGx5e3JtPSExfX1mdW5jdGlvbiBXUyh0KXtsZXQgZT10Ll9vYnNlcnZlcjtpZihlIT09bnVsbCl7bGV0IG49ZS50YWtlUmVjb3JkcygpO1VTKHQsbixlKX19ZnVuY3Rpb24gVlModCl7b3Y9PT0wJiZOZih0KS5hZGRFdmVudExpc3RlbmVyKCJ0ZXh0SW5wdXQiLGtSLCEwKSx0Ll9vYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcigoZSxuKT0+e1VTKHQsZSxuKX0pfWZ1bmN0aW9uIEwwKHQsZSl7bGV0IG49dC5fX21vZGUscj10Ll9fZm9ybWF0O3Q9dC5fX3N0eWxlO2xldCBpPWUuX19tb2RlLG89ZS5fX2Zvcm1hdDtyZXR1cm4gZT1lLl9fc3R5bGUsKG49PT1udWxsfHxuPT09aSkmJihyPT09bnVsbHx8cj09PW8pJiYodD09PW51bGx8fHQ9PT1lKX1mdW5jdGlvbiBEMCh0LGUpe2xldCBuPXQubWVyZ2VXaXRoU2libGluZyhlKSxyPXB0KCkuX25vcm1hbGl6ZWROb2RlcztyZXR1cm4gci5hZGQodC5fX2tleSksci5hZGQoZS5fX2tleSksbn1mdW5jdGlvbiBIUyh0KXtpZih0Ll9fdGV4dD09PSIiJiZ0LmlzU2ltcGxlVGV4dCgpJiYhdC5pc1VubWVyZ2VhYmxlKCkpdC5yZW1vdmUoKTtlbHNle2Zvcih2YXIgZTsoZT10LmdldFByZXZpb3VzU2libGluZygpKSE9PW51bGwmJlEoZSkmJmUuaXNTaW1wbGVUZXh0KCkmJiFlLmlzVW5tZXJnZWFibGUoKTspaWYoZS5fX3RleHQ9PT0iIillLnJlbW92ZSgpO2Vsc2V7TDAoZSx0KSYmKHQ9RDAoZSx0KSk7YnJlYWt9Zm9yKHZhciBuOyhuPXQuZ2V0TmV4dFNpYmxpbmcoKSkhPT1udWxsJiZRKG4pJiZuLmlzU2ltcGxlVGV4dCgpJiYhbi5pc1VubWVyZ2VhYmxlKCk7KWlmKG4uX190ZXh0PT09IiIpbi5yZW1vdmUoKTtlbHNle0wwKHQsbikmJkQwKHQsbik7YnJlYWt9fX1mdW5jdGlvbiBsdih0KXtyZXR1cm4gSTAodC5hbmNob3IpLEkwKHQuZm9jdXMpLHR9ZnVuY3Rpb24gSTAodCl7Zm9yKDt0LnR5cGU9PT0iZWxlbWVudCI7KXt2YXIgZT10LmdldE5vZGUoKSxuPXQub2Zmc2V0O2lmKG49PT1lLmdldENoaWxkcmVuU2l6ZSgpPyhlPWUuZ2V0Q2hpbGRBdEluZGV4KG4tMSksbj0hMCk6KGU9ZS5nZXRDaGlsZEF0SW5kZXgobiksbj0hMSksUShlKSl7dC5zZXQoZS5fX2tleSxuP2UuZ2V0VGV4dENvbnRlbnRTaXplKCk6MCwidGV4dCIpO2JyZWFrfWVsc2UgaWYoIUIoZSkpYnJlYWs7dC5zZXQoZS5fX2tleSxuP2UuZ2V0Q2hpbGRyZW5TaXplKCk6MCwiZWxlbWVudCIpfX1sZXQgJFI9MSxUUj10eXBlb2YgcXVldWVNaWNyb3Rhc2s9PSJmdW5jdGlvbiI/cXVldWVNaWNyb3Rhc2s6dD0+e1Byb21pc2UucmVzb2x2ZSgpLnRoZW4odCl9O2Z1bmN0aW9uIHN2KHQpe2xldCBlPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoZT09PW51bGwpcmV0dXJuITE7bGV0IG49ZS5ub2RlTmFtZTtyZXR1cm4gdHQoRnUodCkpJiYobj09PSJJTlBVVCJ8fG49PT0iVEVYVEFSRUEifHxlLmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIiYmZS5fX2xleGljYWxFZGl0b3I9PW51bGwpfWZ1bmN0aW9uIHp1KHQsZSxuKXtsZXQgcj10LmdldFJvb3RFbGVtZW50KCk7dHJ5e3JldHVybiByIT09bnVsbCYmci5jb250YWlucyhlKSYmci5jb250YWlucyhuKSYmZSE9PW51bGwmJiFzdihlKSYmYXYoZSk9PT10fWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBhdih0KXtmb3IoO3QhPW51bGw7KXtsZXQgZT10Ll9fbGV4aWNhbEVkaXRvcjtpZihlIT1udWxsKXJldHVybiBlO3Q9VGYodCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaW0odCl7cmV0dXJuIHQuaXNUb2tlbigpfHx0LmlzU2VnbWVudGVkKCl9ZnVuY3Rpb24ga2QodCl7Zm9yKDt0IT1udWxsOyl7aWYodC5ub2RlVHlwZT09PTMpcmV0dXJuIHQ7dD10LmZpcnN0Q2hpbGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gS1ModCxlLG4pe3JldHVybiBlPUZvW2VdLHQmZSYmKG49PT1udWxsfHwhKG4mZSkpP3ReZTpuPT09bnVsbHx8biZlP3R8ZTp0fWZ1bmN0aW9uIFpTKHQpe3JldHVybiBRKHQpfHxjdSh0KXx8dHQodCl9ZnVuY3Rpb24gR1ModCxlKXtpZihlIT1udWxsKXQuX19rZXk9ZTtlbHNle2huKCksOTk8ZHUmJkgoMTQpLGU9cHQoKTt2YXIgbj1RcigpLHI9IiIrJFIrKztuLl9ub2RlTWFwLnNldChyLHQpLEIodCk/ZS5fZGlydHlFbGVtZW50cy5zZXQociwhMCk6ZS5fZGlydHlMZWF2ZXMuYWRkKHIpLGUuX2Nsb25lTm90TmVlZGVkLmFkZChyKSxlLl9kaXJ0eVR5cGU9MSx0Ll9fa2V5PXJ9fWZ1bmN0aW9uIEJvKHQpe3ZhciBlPXQuZ2V0UGFyZW50KCk7aWYoZSE9PW51bGwpe2xldCBpPXQuZ2V0V3JpdGFibGUoKTtlPWUuZ2V0V3JpdGFibGUoKTt2YXIgbj10LmdldFByZXZpb3VzU2libGluZygpO2lmKHQ9dC5nZXROZXh0U2libGluZygpLG49PT1udWxsKWlmKHQhPT1udWxsKXt2YXIgcj10LmdldFdyaXRhYmxlKCk7ZS5fX2ZpcnN0PXQuX19rZXksci5fX3ByZXY9bnVsbH1lbHNlIGUuX19maXJzdD1udWxsO2Vsc2V7aWYocj1uLmdldFdyaXRhYmxlKCksdCE9PW51bGwpe2xldCBvPXQuZ2V0V3JpdGFibGUoKTtvLl9fcHJldj1yLl9fa2V5LHIuX19uZXh0PW8uX19rZXl9ZWxzZSByLl9fbmV4dD1udWxsO2kuX19wcmV2PW51bGx9dD09PW51bGw/biE9PW51bGw/KHQ9bi5nZXRXcml0YWJsZSgpLGUuX19sYXN0PW4uX19rZXksdC5fX25leHQ9bnVsbCk6ZS5fX2xhc3Q9bnVsbDoodD10LmdldFdyaXRhYmxlKCksbiE9PW51bGw/KG49bi5nZXRXcml0YWJsZSgpLG4uX19uZXh0PXQuX19rZXksdC5fX3ByZXY9bi5fX2tleSk6dC5fX3ByZXY9bnVsbCxpLl9fbmV4dD1udWxsKSxlLl9fc2l6ZS0tLGkuX19wYXJlbnQ9bnVsbH19ZnVuY3Rpb24gYmQodCl7OTk8ZHUmJkgoMTQpO3ZhciBlPXQuZ2V0TGF0ZXN0KCksbj1lLl9fcGFyZW50LHI9UXIoKTtsZXQgaT1wdCgpLG89ci5fbm9kZU1hcDtpZihyPWkuX2RpcnR5RWxlbWVudHMsbiE9PW51bGwpZTpmb3IoO24hPT1udWxsOyl7aWYoci5oYXMobikpYnJlYWsgZTtsZXQgbD1vLmdldChuKTtpZihsPT09dm9pZCAwKWJyZWFrO3Iuc2V0KG4sITEpLG49bC5fX3BhcmVudH1lPWUuX19rZXksaS5fZGlydHlUeXBlPTEsQih0KT9yLnNldChlLCEwKTppLl9kaXJ0eUxlYXZlcy5hZGQoZSl9ZnVuY3Rpb24gS3QodCl7aG4oKTt2YXIgZT1wdCgpO2xldCBuPWUuX2NvbXBvc2l0aW9uS2V5O3QhPT1uJiYoZS5fY29tcG9zaXRpb25LZXk9dCxuIT09bnVsbCYmKGU9SXQobiksZSE9PW51bGwmJmUuZ2V0V3JpdGFibGUoKSksdCE9PW51bGwmJih0PUl0KHQpLHQhPT1udWxsJiZ0LmdldFdyaXRhYmxlKCkpKX1mdW5jdGlvbiBaaSgpe3JldHVybiBQcygpP251bGw6cHQoKS5fY29tcG9zaXRpb25LZXl9ZnVuY3Rpb24gSXQodCxlKXtyZXR1cm4gdD0oZXx8UXIoKSkuX25vZGVNYXAuZ2V0KHQpLHQ9PT12b2lkIDA/bnVsbDp0fWZ1bmN0aW9uIFlTKHQsZSl7bGV0IG49cHQoKTtyZXR1cm4gdD10W2BfX2xleGljYWxLZXlfJHtuLl9rZXl9YF0sdCE9PXZvaWQgMD9JdCh0LGUpOm51bGx9ZnVuY3Rpb24gRnUodCxlKXtmb3IoO3QhPW51bGw7KXtsZXQgbj1ZUyh0LGUpO2lmKG4hPT1udWxsKXJldHVybiBuO3Q9VGYodCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gWFModCl7bGV0IGU9T2JqZWN0LmFzc2lnbih7fSx0Ll9kZWNvcmF0b3JzKTtyZXR1cm4gdC5fcGVuZGluZ0RlY29yYXRvcnM9ZX1mdW5jdGlvbiBqMCh0KXtyZXR1cm4gdC5yZWFkKCgpPT5YcigpLmdldFRleHRDb250ZW50KCkpfWZ1bmN0aW9uIE5SKHQsZSl7SG4odCwoKT0+e3ZhciBuPVFyKCk7aWYoIW4uaXNFbXB0eSgpKWlmKGU9PT0icm9vdCIpWHIoKS5tYXJrRGlydHkoKTtlbHNle249bi5fbm9kZU1hcDtmb3IobGV0WyxyXW9mIG4pci5tYXJrRGlydHkoKX19LHQuX3BlbmRpbmdFZGl0b3JTdGF0ZT09PW51bGw/e3RhZzoiaGlzdG9yeS1tZXJnZSJ9OnZvaWQgMCl9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUXIoKS5fbm9kZU1hcC5nZXQoInJvb3QiKX1mdW5jdGlvbiBWcih0KXtobigpO2xldCBlPVFyKCk7dCE9PW51bGwmJih0LmRpcnR5PSEwLHQuX2NhY2hlZE5vZGVzPW51bGwpLGUuX3NlbGVjdGlvbj10fWZ1bmN0aW9uIFVsKHQpe3ZhciBlPXB0KCksbjtlOntmb3Iobj10O24hPW51bGw7KXtsZXQgcj1uW2BfX2xleGljYWxLZXlfJHtlLl9rZXl9YF07aWYociE9PXZvaWQgMCl7bj1yO2JyZWFrIGV9bj1UZihuKX1uPW51bGx9cmV0dXJuIG49PT1udWxsPyhlPWUuZ2V0Um9vdEVsZW1lbnQoKSx0PT09ZT9JdCgicm9vdCIpOm51bGwpOkl0KG4pfWZ1bmN0aW9uIEpTKHQpe3JldHVybi9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZy50ZXN0KHQpfWZ1bmN0aW9uIHV2KHQpe2xldCBlPVtdO2Zvcig7dCE9PW51bGw7KWUucHVzaCh0KSx0PXQuX3BhcmVudEVkaXRvcjtyZXR1cm4gZX1mdW5jdGlvbiBRUygpe3JldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDUpfWZ1bmN0aW9uIGN2KHQsZSxuKXtpZihlPUpyKGUuX3dpbmRvdyksZSE9PW51bGwpe3ZhciByPWUuYW5jaG9yTm9kZSx7YW5jaG9yT2Zmc2V0OmksZm9jdXNPZmZzZXQ6b309ZTtpZihyIT09bnVsbCYmKGU9ci5ub2RlVHlwZT09PTM/ci5ub2RlVmFsdWU6bnVsbCxyPUZ1KHIpLGUhPT1udWxsJiZRKHIpKSl7aWYoZT09PSRmJiZuKXtsZXQgbD1uLmxlbmd0aDtlPW4sbz1pPWx9ZSE9PW51bGwmJmR2KHIsZSxpLG8sdCl9fX1mdW5jdGlvbiBkdih0LGUsbixyLGkpe2xldCBvPXQ7aWYoby5pc0F0dGFjaGVkKCkmJihpfHwhby5pc0RpcnR5KCkpKXtsZXQgdT1vLmlzQ29tcG9zaW5nKCksYz1lO2lmKCh1fHxpKSYmZVtlLmxlbmd0aC0xXT09PSRmJiYoYz1lLnNsaWNlKDAsLTEpKSxlPW8uZ2V0VGV4dENvbnRlbnQoKSxpfHxjIT09ZSlpZihjPT09IiIpaWYoS3QobnVsbCkscnZ8fGJmfHxpdilvLnJlbW92ZSgpO2Vsc2V7bGV0IGQ9cHQoKTtzZXRUaW1lb3V0KCgpPT57ZC51cGRhdGUoKCk9PntvLmlzQXR0YWNoZWQoKSYmby5yZW1vdmUoKX0pfSwyMCl9ZWxzZXtpPW8uZ2V0UGFyZW50KCksZT1PcygpO3ZhciBsPW8uZ2V0VGV4dENvbnRlbnRTaXplKCkscz1aaSgpLGE9by5nZXRLZXkoKTtvLmlzVG9rZW4oKXx8cyE9PW51bGwmJmE9PT1zJiYhdXx8Z2UoZSkmJihpIT09bnVsbCYmIWkuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZlLmFuY2hvci5vZmZzZXQ9PT0wfHxlLmFuY2hvci5rZXk9PT10Ll9fa2V5JiZlLmFuY2hvci5vZmZzZXQ9PT0wJiYhby5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fGUuZm9jdXMua2V5PT09dC5fX2tleSYmZS5mb2N1cy5vZmZzZXQ9PT1sJiYhby5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSk/by5tYXJrRGlydHkoKToodD1ydCgpLGdlKHQpJiZuIT09bnVsbCYmciE9PW51bGwmJih0LnNldFRleHROb2RlUmFuZ2UobyxuLG8sciksby5pc1NlZ21lbnRlZCgpJiYobj1vLmdldFRleHRDb250ZW50KCksbj1MdChuKSxvLnJlcGxhY2Uobiksbz1uKSksby5zZXRUZXh0Q29udGVudChjKSl9fX1mdW5jdGlvbiBSUih0LGUpe2lmKGUuaXNTZWdtZW50ZWQoKSlyZXR1cm4hMDtpZighdC5pc0NvbGxhcHNlZCgpKXJldHVybiExO3Q9dC5hbmNob3Iub2Zmc2V0O2xldCBuPWUuZ2V0UGFyZW50T3JUaHJvdygpLHI9ZS5pc1Rva2VuKCk7cmV0dXJuIHQ9PT0wPygodD0hZS5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8cil8fChlPWUuZ2V0UHJldmlvdXNTaWJsaW5nKCksdD0oUShlKXx8QihlKSYmZS5pc0lubGluZSgpKSYmIWUuY2FuSW5zZXJ0VGV4dEFmdGVyKCkpLHQpOnQ9PT1lLmdldFRleHRDb250ZW50U2l6ZSgpPyFlLmNhbkluc2VydFRleHRBZnRlcigpfHwhbi5jYW5JbnNlcnRUZXh0QWZ0ZXIoKXx8cjohMX1mdW5jdGlvbiBSYSh0LGUpe3QuX19sZXhpY2FsQ2xhc3NOYW1lQ2FjaGU9PT12b2lkIDAmJih0Ll9fbGV4aWNhbENsYXNzTmFtZUNhY2hlPXt9KTtsZXQgbj10Ll9fbGV4aWNhbENsYXNzTmFtZUNhY2hlLHI9bltlXTtyZXR1cm4gciE9PXZvaWQgMD9yOih0PXRbZV0sdHlwZW9mIHQ9PSJzdHJpbmciPyh0PXQuc3BsaXQoIiAiKSxuW2VdPXQpOnQpfWZ1bmN0aW9uIGZ2KHQsZSxuLHIsaSl7bi5zaXplIT09MCYmKG49ci5fX3R5cGUscj1yLl9fa2V5LGU9ZS5nZXQobiksZT09PXZvaWQgMCYmSCgzMyxuKSxuPWUua2xhc3MsZT10LmdldChuKSxlPT09dm9pZCAwJiYoZT1uZXcgTWFwLHQuc2V0KG4sZSkpLHQ9ZS5nZXQociksbj10PT09ImRlc3Ryb3llZCImJmk9PT0iY3JlYXRlZCIsKHQ9PT12b2lkIDB8fG4pJiZlLnNldChyLG4/InVwZGF0ZWQiOmkpKX1mdW5jdGlvbiB6MCh0LGUsbil7bGV0IHI9dC5nZXRQYXJlbnQoKSxpPW47cmV0dXJuIHIhPT1udWxsJiYoZSYmbj09PTA/KGk9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpLHQ9cik6ZXx8biE9PXQuZ2V0Q2hpbGRyZW5TaXplKCl8fChpPXQuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLHQ9cikpLHQuZ2V0Q2hpbGRBdEluZGV4KGU/aS0xOmkpfWZ1bmN0aW9uIG9tKHQsZSl7dmFyIG49dC5vZmZzZXQ7cmV0dXJuIHQudHlwZT09PSJlbGVtZW50Ij8odD10LmdldE5vZGUoKSx6MCh0LGUsbikpOih0PXQuZ2V0Tm9kZSgpLGUmJm49PT0wfHwhZSYmbj09PXQuZ2V0VGV4dENvbnRlbnRTaXplKCk/KG49ZT90LmdldFByZXZpb3VzU2libGluZygpOnQuZ2V0TmV4dFNpYmxpbmcoKSxuPT09bnVsbD96MCh0LmdldFBhcmVudE9yVGhyb3coKSxlLHQuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsoZT8wOjEpKTpuKTpudWxsKX1mdW5jdGlvbiBxUyh0KXtyZXR1cm4gdD0odD1OZih0KS5ldmVudCkmJnQuaW5wdXRUeXBlLHQ9PT0iaW5zZXJ0RnJvbVBhc3RlInx8dD09PSJpbnNlcnRGcm9tUGFzdGVBc1F1b3RhdGlvbiJ9ZnVuY3Rpb24gJGQodCl7cmV0dXJuIW1uKHQpJiYhdC5pc0xhc3RDaGlsZCgpJiYhdC5pc0lubGluZSgpfWZ1bmN0aW9uIFRkKHQsZSl7cmV0dXJuIHQ9dC5fa2V5VG9ET01NYXAuZ2V0KGUpLHQ9PT12b2lkIDAmJkgoNzUsZSksdH1mdW5jdGlvbiBUZih0KXtyZXR1cm4gdD10LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnRFbGVtZW50LHQhPT1udWxsJiZ0Lm5vZGVUeXBlPT09MTE/dC5ob3N0OnR9ZnVuY3Rpb24gTmQodCxlKXtmb3IodD10LmdldFBhcmVudCgpO3QhPT1udWxsOyl7aWYodC5pcyhlKSlyZXR1cm4hMDt0PXQuZ2V0UGFyZW50KCl9cmV0dXJuITF9ZnVuY3Rpb24gTmYodCl7cmV0dXJuIHQ9dC5fd2luZG93LHQ9PT1udWxsJiZIKDc4KSx0fWZ1bmN0aW9uIGVFKHQpe2Zvcih0PXQuZ2V0UGFyZW50T3JUaHJvdygpO3QhPT1udWxsJiYhX3IodCk7KXQ9dC5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIHR9ZnVuY3Rpb24gX3IodCl7cmV0dXJuIG1uKHQpfHxCKHQpJiZ0LmlzU2hhZG93Um9vdCgpfWZ1bmN0aW9uIHRFKHQpe3JldHVybiB0PXQuY29uc3RydWN0b3IuY2xvbmUodCksR1ModCxudWxsKSx0fWZ1bmN0aW9uIEJ1KHQpe3ZhciBlPXB0KCk7bGV0IG49dC5jb25zdHJ1Y3Rvci5nZXRUeXBlKCk7cmV0dXJuIGU9ZS5fbm9kZXMuZ2V0KG4pLGU9PT12b2lkIDAmJkgoOTcpLGU9ZS5yZXBsYWNlLGUhPT1udWxsPyhlPWUodCksZSBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3J8fEgoOTgpLGUpOnR9ZnVuY3Rpb24gUGgodCxlKXt0PXQuZ2V0UGFyZW50KCksIW1uKHQpfHxCKGUpfHx0dChlKXx8SCg5OSl9ZnVuY3Rpb24gQWgodCl7cmV0dXJuKHR0KHQpfHxCKHQpJiYhdC5jYW5CZUVtcHR5KCkpJiYhdC5pc0lubGluZSgpfWZ1bmN0aW9uIGxtKHQsZSxuKXtuLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJjYXJldC1jb2xvciIpLGUuX2Jsb2NrQ3Vyc29yRWxlbWVudD1udWxsLGU9dC5wYXJlbnRFbGVtZW50LGUhPT1udWxsJiZlLnJlbW92ZUNoaWxkKHQpfWZ1bmN0aW9uIEpyKHQpe3JldHVybiBraT8odHx8d2luZG93KS5nZXRTZWxlY3Rpb24oKTpudWxsfWZ1bmN0aW9uIG5FKHQsZSl7bGV0IG49dC5nZXRDaGlsZEF0SW5kZXgoZSk7bj09bnVsbCYmKG49dCksX3IodCkmJkgoMTAyKTtsZXQgcj1sPT57Y29uc3Qgcz1sLmdldFBhcmVudE9yVGhyb3coKSxhPV9yKHMpLHU9bCE9PW58fGE/dEUobCk6bDtpZihhKXJldHVybiBsLmluc2VydEFmdGVyKHUpLFtsLHUsdV07Y29uc3RbYyxkLGZdPXIocyk7cmV0dXJuIGw9bC5nZXROZXh0U2libGluZ3MoKSxmLmFwcGVuZCh1LC4uLmwpLFtjLGQsdV19LFtpLG9dPXIobik7cmV0dXJuW2ksb119ZnVuY3Rpb24gUmQodCxlKXtmb3IoO3QhPT1YcigpJiZ0IT1udWxsOyl7aWYoZSh0KSlyZXR1cm4gdDt0PXQuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gT1IodCl7bGV0IGU9W10sbj1bdF07Zm9yKDswPG4ubGVuZ3RoOyl7bGV0IHI9bi5wb3AoKTtyPT09dm9pZCAwJiZIKDExMiksQihyKSYmbi51bnNoaWZ0KC4uLnIuZ2V0Q2hpbGRyZW4oKSksciE9PXQmJmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBSZih0KXtyZXR1cm4gdC5ub2RlVHlwZT09PTF9ZnVuY3Rpb24gckUodCxlLG4scixpLG8pe2Zvcih0PXQuZ2V0Rmlyc3RDaGlsZCgpO3QhPT1udWxsOyl7bGV0IGw9dC5fX2tleTt0Ll9fcGFyZW50PT09ZSYmKEIodCkmJnJFKHQsbCxuLHIsaSxvKSxuLmhhcyhsKXx8by5kZWxldGUobCksaS5wdXNoKGwpKSx0PXQuZ2V0TmV4dFNpYmxpbmcoKX19ZnVuY3Rpb24gUFIodCxlLG4scil7dD10Ll9ub2RlTWFwLGU9ZS5fbm9kZU1hcDtsZXQgaT1bXTtmb3IobGV0W29db2Ygcil7bGV0IGw9ZS5nZXQobyk7bD09PXZvaWQgMHx8bC5pc0F0dGFjaGVkKCl8fChCKGwpJiZyRShsLG8sdCxlLGksciksdC5oYXMobyl8fHIuZGVsZXRlKG8pLGkucHVzaChvKSl9Zm9yKGxldCBvIG9mIGkpZS5kZWxldGUobyk7Zm9yKGxldCBvIG9mIG4pcj1lLmdldChvKSxyPT09dm9pZCAwfHxyLmlzQXR0YWNoZWQoKXx8KHQuaGFzKG8pfHxuLmRlbGV0ZShvKSxlLmRlbGV0ZShvKSl9bGV0IE50PSIiLGZuPSIiLGxpPSIiLGFvLHRuLHN1LGlFPSExLGh2PSExLE9mLFdjPW51bGwsc20sYW0sWG8sdW8sdW0sYXU7ZnVuY3Rpb24gVmModCxlKXtsZXQgbj1Yby5nZXQodCk7aWYoZSE9PW51bGwpe2xldCByPWZtKHQpO3IucGFyZW50Tm9kZT09PWUmJmUucmVtb3ZlQ2hpbGQocil9dW8uaGFzKHQpfHx0bi5fa2V5VG9ET01NYXAuZGVsZXRlKHQpLEIobikmJih0PU9kKG4sWG8pLGNtKHQsMCx0Lmxlbmd0aC0xLG51bGwpKSxuIT09dm9pZCAwJiZmdihhdSxzdSxPZixuLCJkZXN0cm95ZWQiKX1mdW5jdGlvbiBjbSh0LGUsbixyKXtmb3IoO2U8PW47KytlKXtsZXQgaT10W2VdO2khPT12b2lkIDAmJlZjKGkscil9fWZ1bmN0aW9uICRvKHQsZSl7dC5zZXRQcm9wZXJ0eSgidGV4dC1hbGlnbiIsZSl9ZnVuY3Rpb24gb0UodCxlKXt2YXIgbj1hby50aGVtZS5pbmRlbnQ7aWYodHlwZW9mIG49PSJzdHJpbmciKXtsZXQgcj10LmNsYXNzTGlzdC5jb250YWlucyhuKTswPGUmJiFyP3QuY2xhc3NMaXN0LmFkZChuKToxPmUmJnImJnQuY2xhc3NMaXN0LnJlbW92ZShuKX1uPWdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZSgiLS1sZXhpY2FsLWluZGVudC1iYXNlLXZhbHVlIil8fCI0MHB4Iix0LnN0eWxlLnNldFByb3BlcnR5KCJwYWRkaW5nLWlubGluZS1zdGFydCIsZT09PTA/IiI6YGNhbGMoJHtlfSAqICR7bn0pYCl9ZnVuY3Rpb24gbEUodCxlKXt0PXQuc3R5bGUsZT09PTA/JG8odCwiIik6ZT09PTE/JG8odCwibGVmdCIpOmU9PT0yPyRvKHQsImNlbnRlciIpOmU9PT0zPyRvKHQsInJpZ2h0Iik6ZT09PTQ/JG8odCwianVzdGlmeSIpOmU9PT01PyRvKHQsInN0YXJ0Iik6ZT09PTYmJiRvKHQsImVuZCIpfWZ1bmN0aW9uIEhjKHQsZSxuKXtsZXQgcj11by5nZXQodCk7cj09PXZvaWQgMCYmSCg2MCk7bGV0IGk9ci5jcmVhdGVET00oYW8sdG4pO3ZhciBvPXRuLl9rZXlUb0RPTU1hcDtpZihpWyJfX2xleGljYWxLZXlfIit0bi5fa2V5XT10LG8uc2V0KHQsaSksUShyKT9pLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLXRleHQiLCJ0cnVlIik6dHQocikmJmkuc2V0QXR0cmlidXRlKCJkYXRhLWxleGljYWwtZGVjb3JhdG9yIiwidHJ1ZSIpLEIocikpe2lmKHQ9ci5fX2luZGVudCxvPXIuX19zaXplLHQhPT0wJiZvRShpLHQpLG8hPT0wKXstLW8sdD1PZChyLHVvKTt2YXIgbD1mbjtmbj0iIixkbSh0LHIsMCxvLGksbnVsbCksYUUocixpKSxmbj1sfXQ9ci5fX2Zvcm1hdCx0IT09MCYmbEUoaSx0KSxyLmlzSW5saW5lKCl8fHNFKG51bGwscixpKSwkZChyKSYmKE50Kz1gCgpgLGxpKz1gCgpgKX1lbHNlIG89ci5nZXRUZXh0Q29udGVudCgpLHR0KHIpPyhsPXIuZGVjb3JhdGUodG4sYW8pLGwhPT1udWxsJiZ1RSh0LGwpLGkuY29udGVudEVkaXRhYmxlPSJmYWxzZSIpOlEocikmJihyLmlzRGlyZWN0aW9ubGVzcygpfHwoZm4rPW8pKSxOdCs9byxsaSs9bztyZXR1cm4gZSE9PW51bGwmJihuIT1udWxsP2UuaW5zZXJ0QmVmb3JlKGksbik6KG49ZS5fX2xleGljYWxMaW5lQnJlYWssbiE9bnVsbD9lLmluc2VydEJlZm9yZShpLG4pOmUuYXBwZW5kQ2hpbGQoaSkpKSxmdihhdSxzdSxPZixyLCJjcmVhdGVkIiksaX1mdW5jdGlvbiBkbSh0LGUsbixyLGksbyl7bGV0IGw9TnQ7Zm9yKE50PSIiO248PXI7KytuKUhjKHRbbl0saSxvKTskZChlKSYmKE50Kz1gCgpgKSxpLl9fbGV4aWNhbFRleHRDb250ZW50PU50LE50PWwrTnR9ZnVuY3Rpb24gRjAodCxlKXtyZXR1cm4gdD1lLmdldCh0KSxjdSh0KXx8dHQodCkmJnQuaXNJbmxpbmUoKX1mdW5jdGlvbiBzRSh0LGUsbil7dD10IT09bnVsbCYmKHQuX19zaXplPT09MHx8RjAodC5fX2xhc3QsWG8pKSxlPWUuX19zaXplPT09MHx8RjAoZS5fX2xhc3QsdW8pLHQ/ZXx8KGU9bi5fX2xleGljYWxMaW5lQnJlYWssZSE9bnVsbCYmbi5yZW1vdmVDaGlsZChlKSxuLl9fbGV4aWNhbExpbmVCcmVhaz1udWxsKTplJiYoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpLG4uX19sZXhpY2FsTGluZUJyZWFrPWUsbi5hcHBlbmRDaGlsZChlKSl9ZnVuY3Rpb24gYUUodCxlKXt2YXIgbj1lLl9fbGV4aWNhbERpcjtpZihlLl9fbGV4aWNhbERpclRleHRDb250ZW50IT09Zm58fG4hPT1XYyl7bGV0IG89Zm49PT0iIjtpZihvKXZhciByPVdjO2Vsc2Ugcj1mbixyPXhSLnRlc3Qocik/InJ0bCI6X1IudGVzdChyKT8ibHRyIjpudWxsO2lmKHIhPT1uKXtsZXQgbD1lLmNsYXNzTGlzdCxzPWFvLnRoZW1lO3ZhciBpPW4hPT1udWxsP3Nbbl06dm9pZCAwO2xldCBhPXIhPT1udWxsP3Nbcl06dm9pZCAwO2khPT12b2lkIDAmJih0eXBlb2YgaT09InN0cmluZyImJihpPWkuc3BsaXQoIiAiKSxpPXNbbl09aSksbC5yZW1vdmUoLi4uaSkpLHI9PT1udWxsfHxvJiZyPT09Imx0ciI/ZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpOihhIT09dm9pZCAwJiYodHlwZW9mIGE9PSJzdHJpbmciJiYobj1hLnNwbGl0KCIgIiksYT1zW3JdPW4pLGEhPT12b2lkIDAmJmwuYWRkKC4uLmEpKSxlLmRpcj1yKSxodnx8KHQuZ2V0V3JpdGFibGUoKS5fX2Rpcj1yKX1XYz1yLGUuX19sZXhpY2FsRGlyVGV4dENvbnRlbnQ9Zm4sZS5fX2xleGljYWxEaXI9cn19ZnVuY3Rpb24gT2QodCxlKXtsZXQgbj1bXTtmb3IodD10Ll9fZmlyc3Q7dCE9PW51bGw7KXtsZXQgcj1lLmdldCh0KTtyPT09dm9pZCAwJiZIKDEwMSksbi5wdXNoKHQpLHQ9ci5fX25leHR9cmV0dXJuIG59ZnVuY3Rpb24gcGEodCxlKXt2YXIgbj1Yby5nZXQodCkscj11by5nZXQodCk7biE9PXZvaWQgMCYmciE9PXZvaWQgMHx8SCg2MSk7dmFyIGk9aUV8fGFtLmhhcyh0KXx8c20uaGFzKHQpO2xldCBvPVRkKHRuLHQpO2lmKG49PT1yJiYhaSlyZXR1cm4gQihuKT8ocj1vLl9fbGV4aWNhbFRleHRDb250ZW50LHIhPT12b2lkIDAmJihOdCs9cixsaSs9cikscj1vLl9fbGV4aWNhbERpclRleHRDb250ZW50LHIhPT12b2lkIDAmJihmbis9cikpOihyPW4uZ2V0VGV4dENvbnRlbnQoKSxRKG4pJiYhbi5pc0RpcmVjdGlvbmxlc3MoKSYmKGZuKz1yKSxsaSs9cixOdCs9ciksbztpZihuIT09ciYmaSYmZnYoYXUsc3UsT2YsciwidXBkYXRlZCIpLHIudXBkYXRlRE9NKG4sbyxhbykpcmV0dXJuIHI9SGModCxudWxsLG51bGwpLGU9PT1udWxsJiZIKDYyKSxlLnJlcGxhY2VDaGlsZChyLG8pLFZjKHQsbnVsbCkscjtpZihCKG4pJiZCKHIpKXtpZih0PXIuX19pbmRlbnQsdCE9PW4uX19pbmRlbnQmJm9FKG8sdCksdD1yLl9fZm9ybWF0LHQhPT1uLl9fZm9ybWF0JiZsRShvLHQpLGkpe3Q9cixpPWZuLGZuPSIiLGU9TnQ7dmFyIGw9bi5fX3NpemUscz10Ll9fc2l6ZTtpZihOdD0iIixsPT09MSYmcz09PTEpe3ZhciBhPW4uX19maXJzdCx1PXQuX19maXJzdDtpZihhPT09dSlwYShhLG8pO2Vsc2V7dmFyIGM9Zm0oYSk7dT1IYyh1LG51bGwsbnVsbCksby5yZXBsYWNlQ2hpbGQodSxjKSxWYyhhLG51bGwpfX1lbHNle3U9T2QobixYbyk7dmFyIGQ9T2QodCx1byk7aWYobD09PTApcyE9PTAmJmRtKGQsdCwwLHMtMSxvLG51bGwpO2Vsc2UgaWYocz09PTApbCE9PTAmJihhPW8uX19sZXhpY2FsTGluZUJyZWFrPT1udWxsLGNtKHUsMCxsLTEsYT9udWxsOm8pLGEmJihvLnRleHRDb250ZW50PSIiKSk7ZWxzZXt2YXIgZj11O3U9ZCxkPWwtMSxsPXMtMTtsZXQgZz1vLmZpcnN0Q2hpbGQsbT0wO2ZvcihzPTA7bTw9ZCYmczw9bDspe3ZhciBoPWZbbV07bGV0IHc9dVtzXTtpZihoPT09dylnPU1oKHBhKHcsbykpLG0rKyxzKys7ZWxzZXthPT09dm9pZCAwJiYoYT1uZXcgU2V0KGYpKSxjPT09dm9pZCAwJiYoYz1uZXcgU2V0KHUpKTtsZXQgdj1jLmhhcyhoKSx5PWEuaGFzKHcpO3Y/KHk/KGg9VGQodG4sdyksaD09PWc/Zz1NaChwYSh3LG8pKTooZyE9bnVsbD9vLmluc2VydEJlZm9yZShoLGcpOm8uYXBwZW5kQ2hpbGQoaCkscGEodyxvKSksbSsrKTpIYyh3LG8sZykscysrKTooZz1NaChmbShoKSksVmMoaCxvKSxtKyspfX1hPW0+ZCxjPXM+bCxhJiYhYz8oYT11W2wrMV0sYT1hPT09dm9pZCAwP251bGw6dG4uZ2V0RWxlbWVudEJ5S2V5KGEpLGRtKHUsdCxzLGwsbyxhKSk6YyYmIWEmJmNtKGYsbSxkLG8pfX0kZCh0KSYmKE50Kz1gCgpgKSxvLl9fbGV4aWNhbFRleHRDb250ZW50PU50LE50PWUrTnQsYUUodCxvKSxmbj1pLG1uKHIpfHxyLmlzSW5saW5lKCl8fHNFKG4scixvKX0kZChyKSYmKE50Kz1gCgpgLGxpKz1gCgpgKX1lbHNlIG49ci5nZXRUZXh0Q29udGVudCgpLHR0KHIpPyhpPXIuZGVjb3JhdGUodG4sYW8pLGkhPT1udWxsJiZ1RSh0LGkpKTpRKHIpJiYhci5pc0RpcmVjdGlvbmxlc3MoKSYmKGZuKz1uKSxOdCs9bixsaSs9bjtyZXR1cm4haHYmJm1uKHIpJiZyLl9fY2FjaGVkVGV4dCE9PWxpJiYocj1yLmdldFdyaXRhYmxlKCksci5fX2NhY2hlZFRleHQ9bGkpLG99ZnVuY3Rpb24gdUUodCxlKXtsZXQgbj10bi5fcGVuZGluZ0RlY29yYXRvcnMscj10bi5fZGVjb3JhdG9ycztpZihuPT09bnVsbCl7aWYoclt0XT09PWUpcmV0dXJuO249WFModG4pfW5bdF09ZX1mdW5jdGlvbiBNaCh0KXtyZXR1cm4gdD10Lm5leHRTaWJsaW5nLHQhPT1udWxsJiZ0PT09dG4uX2Jsb2NrQ3Vyc29yRWxlbWVudCYmKHQ9dC5uZXh0U2libGluZyksdH1mdW5jdGlvbiBmbSh0KXtsZXQgZT11bS5nZXQodCk7cmV0dXJuIGU9PT12b2lkIDAmJkgoNzUsdCksZX1sZXQgdGk9T2JqZWN0LmZyZWV6ZSh7fSksaG09W1sia2V5ZG93biIsRlJdLFsicG9pbnRlcmRvd24iLE1SXSxbImNvbXBvc2l0aW9uc3RhcnQiLGpSXSxbImNvbXBvc2l0aW9uZW5kIix6Ul0sWyJpbnB1dCIsSVJdLFsiY2xpY2siLEFSXSxbImN1dCIsdGldLFsiY29weSIsdGldLFsiZHJhZ3N0YXJ0Iix0aV0sWyJkcmFnb3ZlciIsdGldLFsiZHJhZ2VuZCIsdGldLFsicGFzdGUiLHRpXSxbImZvY3VzIix0aV0sWyJibHVyIix0aV0sWyJkcm9wIix0aV1dO0NkJiZobS5wdXNoKFsiYmVmb3JlaW5wdXQiLCh0LGUpPT5EUih0LGUpXSk7bGV0IHV1PTAsY0U9MCxkRT0wLFRsPW51bGwsT2E9MCxwbT0hMSxtbT0hMSxQYT0hMSxtYT0hMSxmRT1bMCwiIiwwLCJyb290IiwwXTtmdW5jdGlvbiBoRSh0LGUsbixyLGkpe2xldCBvPXQuYW5jaG9yLGw9dC5mb2N1cyxzPW8uZ2V0Tm9kZSgpO3ZhciBhPXB0KCk7bGV0IHU9SnIoYS5fd2luZG93KSxjPXUhPT1udWxsP3UuYW5jaG9yTm9kZTpudWxsLGQ9by5rZXk7YT1hLmdldEVsZW1lbnRCeUtleShkKTtsZXQgZj1uLmxlbmd0aDtyZXR1cm4gZCE9PWwua2V5fHwhUShzKXx8KCFpJiYoIUNkfHxkRTxyKzUwKXx8cy5pc0RpcnR5KCkmJjI+Znx8SlMobikpJiZvLm9mZnNldCE9PWwub2Zmc2V0JiYhcy5pc0NvbXBvc2luZygpfHxpbShzKXx8cy5pc0RpcnR5KCkmJjE8Znx8KGl8fCFDZCkmJmEhPT1udWxsJiYhcy5pc0NvbXBvc2luZygpJiZjIT09a2QoYSl8fHUhPT1udWxsJiZlIT09bnVsbCYmKCFlLmNvbGxhcHNlZHx8ZS5zdGFydENvbnRhaW5lciE9PXUuYW5jaG9yTm9kZXx8ZS5zdGFydE9mZnNldCE9PXUuYW5jaG9yT2Zmc2V0KXx8cy5nZXRGb3JtYXQoKSE9PXQuZm9ybWF0fHxzLmdldFN0eWxlKCkhPT10LnN0eWxlfHxSUih0LHMpfWZ1bmN0aW9uIEIwKHQsZSl7cmV0dXJuIHQhPT1udWxsJiZ0Lm5vZGVWYWx1ZSE9PW51bGwmJnQubm9kZVR5cGU9PT0zJiZlIT09MCYmZSE9PXQubm9kZVZhbHVlLmxlbmd0aH1mdW5jdGlvbiBVMCh0LGUsbil7bGV0e2FuY2hvck5vZGU6cixhbmNob3JPZmZzZXQ6aSxmb2N1c05vZGU6byxmb2N1c09mZnNldDpsfT10O3BtJiYocG09ITEsQjAocixpKSYmQjAobyxsKSl8fEhuKGUsKCk9PntpZighbilWcihudWxsKTtlbHNlIGlmKHp1KGUscixvKSl7dmFyIHM9cnQoKTtpZihnZShzKSl7dmFyIGE9cy5hbmNob3IsdT1hLmdldE5vZGUoKTtpZihzLmlzQ29sbGFwc2VkKCkpe3QudHlwZT09PSJSYW5nZSImJnQuYW5jaG9yTm9kZT09PXQuZm9jdXNOb2RlJiYocy5kaXJ0eT0hMCk7dmFyIGM9TmYoZSkuZXZlbnQ7Yz1jP2MudGltZVN0YW1wOnBlcmZvcm1hbmNlLm5vdygpO2xldFtkLGYsaCxnLG1dPWZFO2M8bSsyMDAmJmEub2Zmc2V0PT09aCYmYS5rZXk9PT1nPyhzLmZvcm1hdD1kLHMuc3R5bGU9Zik6YS50eXBlPT09InRleHQiPyhzLmZvcm1hdD11LmdldEZvcm1hdCgpLHMuc3R5bGU9dS5nZXRTdHlsZSgpKTphLnR5cGU9PT0iZWxlbWVudCImJihzLmZvcm1hdD0wLHMuc3R5bGU9IiIpfWVsc2V7YT0yNTUsdT0hMSxjPXMuZ2V0Tm9kZXMoKTtsZXQgZD1jLmxlbmd0aDtmb3IobGV0IGY9MDtmPGQ7ZisrKXtsZXQgaD1jW2ZdO2lmKFEoaCkmJih1PSEwLGEmPWguZ2V0Rm9ybWF0KCksYT09PTApKWJyZWFrfXMuZm9ybWF0PXU/YTowfX1YKGUsa2Ysdm9pZCAwKX19KX1mdW5jdGlvbiBBUih0LGUpe0huKGUsKCk9PntsZXQgbj1ydCgpO3ZhciByPUpyKGUuX3dpbmRvdyk7bGV0IGk9T3MoKTtpZihyKWlmKGdlKG4pKXtsZXQgbD1uLmFuY2hvcjt2YXIgbz1sLmdldE5vZGUoKTtsLnR5cGU9PT0iZWxlbWVudCImJmwub2Zmc2V0PT09MCYmbi5pc0NvbGxhcHNlZCgpJiYhbW4obykmJlhyKCkuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xJiZvLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pc0VtcHR5KCkmJmkhPT1udWxsJiZuLmlzKGkpPyhyLnJlbW92ZUFsbFJhbmdlcygpLG4uZGlydHk9ITApOnQuZGV0YWlsIT09M3x8bi5pc0NvbGxhcHNlZCgpfHwocj1uLmZvY3VzLmdldE5vZGUoKSxvIT09ciYmKEIobyk/by5zZWxlY3QoMCk6by5nZXRQYXJlbnRPclRocm93KCkuc2VsZWN0KDApKSl9ZWxzZSB0LnBvaW50ZXJUeXBlPT09InRvdWNoIiYmKG89ci5hbmNob3JOb2RlLG8hPT1udWxsJiYobz1vLm5vZGVUeXBlLG89PT0xfHxvPT09MykpJiYocj1tdihpLHIsZSksVnIocikpO1goZSxTUyx0KX0pfWZ1bmN0aW9uIE1SKHQsZSl7bGV0IG49dC50YXJnZXQ7dD10LnBvaW50ZXJUeXBlLG4gaW5zdGFuY2VvZiBOb2RlJiZ0IT09InRvdWNoIiYmSG4oZSwoKT0+e3R0KEZ1KG4pKXx8KG1tPSEwKX0pfWZ1bmN0aW9uIHBFKHQpe3JldHVybiB0LmdldFRhcmdldFJhbmdlcz8odD10LmdldFRhcmdldFJhbmdlcygpLHQubGVuZ3RoPT09MD9udWxsOnRbMF0pOm51bGx9ZnVuY3Rpb24gTFIodCxlKXtyZXR1cm4gdCE9PWV8fEIodCl8fEIoZSl8fCF0LmlzVG9rZW4oKXx8IWUuaXNUb2tlbigpfWZ1bmN0aW9uIERSKHQsZSl7bGV0IG49dC5pbnB1dFR5cGUscj1wRSh0KTtuPT09ImRlbGV0ZUNvbXBvc2l0aW9uVGV4dCJ8fHNvJiZxUyhlKXx8biE9PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiZIbihlLCgpPT57bGV0IGk9cnQoKTtpZihuPT09ImRlbGV0ZUNvbnRlbnRCYWNrd2FyZCIpe2lmKGk9PT1udWxsKXt2YXIgbz1PcygpO2lmKCFnZShvKSlyZXR1cm47VnIoby5jbG9uZSgpKX1pZihnZShpKSl7Y0U9PT0yMjkmJnQudGltZVN0YW1wPHV1KzMwJiZlLmlzQ29tcG9zaW5nKCkmJmkuYW5jaG9yLmtleT09PWkuZm9jdXMua2V5PyhLdChudWxsKSx1dT0wLHNldFRpbWVvdXQoKCk9PntIbihlLCgpPT57S3QobnVsbCl9KX0sMzApLGdlKGkpJiYobz1pLmFuY2hvci5nZXROb2RlKCksby5tYXJrRGlydHkoKSxpLmZvcm1hdD1vLmdldEZvcm1hdCgpLGkuc3R5bGU9by5nZXRTdHlsZSgpKSk6KHQucHJldmVudERlZmF1bHQoKSxYKGUsaXUsITApKTtyZXR1cm59fWlmKGdlKGkpKXtvPXQuZGF0YSxUbCE9PW51bGwmJmN2KCExLGUsVGwpLGkuZGlydHkmJlRsPT09bnVsbHx8IWkuaXNDb2xsYXBzZWQoKXx8bW4oaS5hbmNob3IuZ2V0Tm9kZSgpKXx8cj09PW51bGx8fGkuYXBwbHlET01SYW5nZShyKSxUbD1udWxsO3ZhciBsPWkuZm9jdXMscz1pLmFuY2hvci5nZXROb2RlKCk7aWYobD1sLmdldE5vZGUoKSxuPT09Imluc2VydFRleHQifHxuPT09Imluc2VydFRyYW5zcG9zZSIpbz09PWAKYD8odC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxOYSwhMSkpOm89PT1gCgpgPyh0LnByZXZlbnREZWZhdWx0KCksWChlLGVtLHZvaWQgMCkpOm89PW51bGwmJnQuZGF0YVRyYW5zZmVyPyhvPXQuZGF0YVRyYW5zZmVyLmdldERhdGEoInRleHQvcGxhaW4iKSx0LnByZXZlbnREZWZhdWx0KCksaS5pbnNlcnRSYXdUZXh0KG8pKTpvIT1udWxsJiZoRShpLHIsbyx0LnRpbWVTdGFtcCwhMCk/KHQucHJldmVudERlZmF1bHQoKSxYKGUscWwsbykpOlRsPW8sZEU9dC50aW1lU3RhbXA7ZWxzZSBzd2l0Y2godC5wcmV2ZW50RGVmYXVsdCgpLG4pe2Nhc2UiaW5zZXJ0RnJvbVlhbmsiOmNhc2UiaW5zZXJ0RnJvbURyb3AiOmNhc2UiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0IjpYKGUscWwsdCk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tQ29tcG9zaXRpb24iOkt0KG51bGwpLFgoZSxxbCx0KTticmVhaztjYXNlImluc2VydExpbmVCcmVhayI6S3QobnVsbCksWChlLE5hLCExKTticmVhaztjYXNlImluc2VydFBhcmFncmFwaCI6S3QobnVsbCksUGEmJiFiZj8oUGE9ITEsWChlLE5hLCExKSk6WChlLGVtLHZvaWQgMCk7YnJlYWs7Y2FzZSJpbnNlcnRGcm9tUGFzdGUiOmNhc2UiaW5zZXJ0RnJvbVBhc3RlQXNRdW90YXRpb24iOlgoZSxRZyx0KTticmVhaztjYXNlImRlbGV0ZUJ5Q29tcG9zaXRpb24iOkxSKHMsbCkmJlgoZSx0bSx0KTticmVhaztjYXNlImRlbGV0ZUJ5RHJhZyI6Y2FzZSJkZWxldGVCeUN1dCI6WChlLHRtLHQpO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudCI6WChlLGl1LCExKTticmVhaztjYXNlImRlbGV0ZVdvcmRCYWNrd2FyZCI6WChlLG91LCEwKTticmVhaztjYXNlImRlbGV0ZVdvcmRGb3J3YXJkIjpYKGUsb3UsITEpO2JyZWFrO2Nhc2UiZGVsZXRlSGFyZExpbmVCYWNrd2FyZCI6Y2FzZSJkZWxldGVTb2Z0TGluZUJhY2t3YXJkIjpYKGUsbHUsITApO2JyZWFrO2Nhc2UiZGVsZXRlQ29udGVudEZvcndhcmQiOmNhc2UiZGVsZXRlSGFyZExpbmVGb3J3YXJkIjpjYXNlImRlbGV0ZVNvZnRMaW5lRm9yd2FyZCI6WChlLGx1LCExKTticmVhaztjYXNlImZvcm1hdFN0cmlrZVRocm91Z2giOlgoZSxLaSwic3RyaWtldGhyb3VnaCIpO2JyZWFrO2Nhc2UiZm9ybWF0Qm9sZCI6WChlLEtpLCJib2xkIik7YnJlYWs7Y2FzZSJmb3JtYXRJdGFsaWMiOlgoZSxLaSwiaXRhbGljIik7YnJlYWs7Y2FzZSJmb3JtYXRVbmRlcmxpbmUiOlgoZSxLaSwidW5kZXJsaW5lIik7YnJlYWs7Y2FzZSJoaXN0b3J5VW5kbyI6WChlLHFnLHZvaWQgMCk7YnJlYWs7Y2FzZSJoaXN0b3J5UmVkbyI6WChlLGV2LHZvaWQgMCl9fX0pfWZ1bmN0aW9uIElSKHQsZSl7dC5zdG9wUHJvcGFnYXRpb24oKSxIbihlLCgpPT57dmFyIG49cnQoKSxyPXQuZGF0YSxpPXBFKHQpO2lmKHIhPW51bGwmJmdlKG4pJiZoRShuLGkscix0LnRpbWVTdGFtcCwhMSkpe21hJiYoZ20oZSxyKSxtYT0hMSk7dmFyIG89bi5hbmNob3IsbD1vLmdldE5vZGUoKTtpZihpPUpyKGUuX3dpbmRvdyksaT09PW51bGwpcmV0dXJuO2xldCBzPW8ub2Zmc2V0OyhvPUNkJiYhbi5pc0NvbGxhcHNlZCgpJiZRKGwpJiZpLmFuY2hvck5vZGUhPT1udWxsKSYmKGw9bC5nZXRUZXh0Q29udGVudCgpLnNsaWNlKDAscykrcitsLmdldFRleHRDb250ZW50KCkuc2xpY2UocytuLmZvY3VzLm9mZnNldCksaT1pLmFuY2hvck5vZGUsbz1sPT09KGkubm9kZVR5cGU9PT0zP2kubm9kZVZhbHVlOm51bGwpKSxvfHxYKGUscWwscikscj1yLmxlbmd0aCxzbyYmMTxyJiZ0LmlucHV0VHlwZT09PSJpbnNlcnRDb21wb3NpdGlvblRleHQiJiYhZS5pc0NvbXBvc2luZygpJiYobi5hbmNob3Iub2Zmc2V0LT1yKSxydnx8YmZ8fGl2fHwhZS5pc0NvbXBvc2luZygpfHwodXU9MCxLdChudWxsKSl9ZWxzZSBjdighMSxlLHIhPT1udWxsP3I6dm9pZCAwKSxtYSYmKGdtKGUscnx8dm9pZCAwKSxtYT0hMSk7aG4oKSxuPXB0KCksV1Mobil9KSxUbD1udWxsfWZ1bmN0aW9uIGpSKHQsZSl7SG4oZSwoKT0+e2xldCBuPXJ0KCk7aWYoZ2UobikmJiFlLmlzQ29tcG9zaW5nKCkpe2xldCByPW4uYW5jaG9yLGk9bi5hbmNob3IuZ2V0Tm9kZSgpO0t0KHIua2V5KSwodC50aW1lU3RhbXA8dXUrMzB8fHIudHlwZT09PSJlbGVtZW50Inx8IW4uaXNDb2xsYXBzZWQoKXx8aS5nZXRGb3JtYXQoKSE9PW4uZm9ybWF0fHxpLmdldFN0eWxlKCkhPT1uLnN0eWxlKSYmWChlLHFsLHlSKX19KX1mdW5jdGlvbiBnbSh0LGUpe3ZhciBuPXQuX2NvbXBvc2l0aW9uS2V5O2lmKEt0KG51bGwpLG4hPT1udWxsJiZlIT1udWxsKXtpZihlPT09IiIpe2U9SXQobiksdD1rZCh0LmdldEVsZW1lbnRCeUtleShuKSksdCE9PW51bGwmJnQubm9kZVZhbHVlIT09bnVsbCYmUShlKSYmZHYoZSx0Lm5vZGVWYWx1ZSxudWxsLG51bGwsITApO3JldHVybn1pZihlW2UubGVuZ3RoLTFdPT09YApgJiYobj1ydCgpLGdlKG4pKSl7ZT1uLmZvY3VzLG4uYW5jaG9yLnNldChlLmtleSxlLm9mZnNldCxlLnR5cGUpLFgodCxFZCxudWxsKTtyZXR1cm59fWN2KCEwLHQsZSl9ZnVuY3Rpb24gelIodCxlKXtzbz9tYT0hMDpIbihlLCgpPT57Z20oZSx0LmRhdGEpfSl9ZnVuY3Rpb24gRlIodCxlKXtpZih1dT10LnRpbWVTdGFtcCxjRT10LmtleUNvZGUsIWUuaXNDb21wb3NpbmcoKSl7dmFye2tleUNvZGU6bixzaGlmdEtleTpyLGN0cmxLZXk6aSxtZXRhS2V5Om8sYWx0S2V5Omx9PXQ7aWYoIVgoZSxFUyx0KSl7aWYobiE9PTM5fHxpfHxvfHxsKWlmKG4hPT0zOXx8bHx8cnx8IWkmJiFvKWlmKG4hPT0zN3x8aXx8b3x8bClpZihuIT09Mzd8fGx8fHJ8fCFpJiYhbylpZihuIT09Mzh8fGl8fG8paWYobiE9PTQwfHxpfHxvKWlmKG49PT0xMyYmcilQYT0hMCxYKGUsRWQsdCk7ZWxzZSBpZihuPT09MzIpWChlLFJTLHQpO2Vsc2UgaWYoSnQmJmkmJm49PT03OSl0LnByZXZlbnREZWZhdWx0KCksUGE9ITAsWChlLE5hLCEwKTtlbHNlIGlmKG4hPT0xM3x8cil7dmFyIHM9SnQ/bHx8bz8hMTpuPT09OHx8bj09PTcyJiZpOml8fGx8fG8/ITE6bj09PTg7cz9uPT09OD9YKGUsT1MsdCk6KHQucHJldmVudERlZmF1bHQoKSxYKGUsaXUsITApKTpuPT09Mjc/WChlLFBTLHQpOihzPUp0P3J8fGx8fG8/ITE6bj09PTQ2fHxuPT09NjgmJmk6aXx8bHx8bz8hMTpuPT09NDYscz9uPT09NDY/WChlLEFTLHQpOih0LnByZXZlbnREZWZhdWx0KCksWChlLGl1LCExKSk6bj09PTgmJihKdD9sOmkpPyh0LnByZXZlbnREZWZhdWx0KCksWChlLG91LCEwKSk6bj09PTQ2JiYoSnQ/bDppKT8odC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxvdSwhMSkpOkp0JiZvJiZuPT09OD8odC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxsdSwhMCkpOkp0JiZvJiZuPT09NDY/KHQucHJldmVudERlZmF1bHQoKSxYKGUsbHUsITEpKTpuPT09NjYmJiFsJiYoSnQ/bzppKT8odC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxLaSwiYm9sZCIpKTpuPT09ODUmJiFsJiYoSnQ/bzppKT8odC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxLaSwidW5kZXJsaW5lIikpOm49PT03MyYmIWwmJihKdD9vOmkpPyh0LnByZXZlbnREZWZhdWx0KCksWChlLEtpLCJpdGFsaWMiKSk6biE9PTl8fGx8fGl8fG8/bj09PTkwJiYhciYmKEp0P286aSk/KHQucHJldmVudERlZmF1bHQoKSxYKGUscWcsdm9pZCAwKSk6KHM9SnQ/bj09PTkwJiZvJiZyOm49PT04OSYmaXx8bj09PTkwJiZpJiZyLHM/KHQucHJldmVudERlZmF1bHQoKSxYKGUsZXYsdm9pZCAwKSk6UnMoZS5fZWRpdG9yU3RhdGUuX3NlbGVjdGlvbik/KHM9cj8hMTpuPT09Njc/SnQ/bzppOiExLHM/KHQucHJldmVudERlZmF1bHQoKSxYKGUsdHYsdCkpOihzPXI/ITE6bj09PTg4P0p0P286aTohMSxzPyh0LnByZXZlbnREZWZhdWx0KCksWChlLG52LHQpKTpuPT09NjUmJihKdD9vOmkpJiYodC5wcmV2ZW50RGVmYXVsdCgpLFgoZSxubSx0KSkpKTohc28mJm49PT02NSYmKEp0P286aSkmJih0LnByZXZlbnREZWZhdWx0KCksWChlLG5tLHQpKSk6WChlLE1TLHQpKX1lbHNlIFBhPSExLFgoZSxFZCx0KTtlbHNlIFgoZSxOUyx0KTtlbHNlIFgoZSxUUyx0KTtlbHNlIFgoZSwkUyx0KTtlbHNlIFgoZSxiUyx0KTtlbHNlIFgoZSxrUyx0KTtlbHNlIFgoZSxDUyx0KTsoaXx8cnx8bHx8bykmJlgoZSxCUyx0KX19fWZ1bmN0aW9uIG1FKHQpe2xldCBlPXQuX19sZXhpY2FsRXZlbnRIYW5kbGVzO3JldHVybiBlPT09dm9pZCAwJiYoZT1bXSx0Ll9fbGV4aWNhbEV2ZW50SGFuZGxlcz1lKSxlfWxldCBlcz1uZXcgTWFwO2Z1bmN0aW9uIGdFKHQpe3Q9dC50YXJnZXQ7bGV0IGU9SnIodD09bnVsbD9udWxsOnQubm9kZVR5cGU9PT05P3QuZGVmYXVsdFZpZXc6dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTtpZihlIT09bnVsbCl7dmFyIG49YXYoZS5hbmNob3JOb2RlKTtpZihuIT09bnVsbCl7bW0mJihtbT0hMSxIbihuLCgpPT57dmFyIGw9T3MoKSxzPWUuYW5jaG9yTm9kZTtzIT09bnVsbCYmKHM9cy5ub2RlVHlwZSxzPT09MXx8cz09PTMpJiYobD1tdihsLGUsbiksVnIobCkpfSkpLHQ9dXYobiksdD10W3QubGVuZ3RoLTFdO3ZhciByPXQuX2tleSxpPWVzLmdldChyKSxvPWl8fHQ7byE9PW4mJlUwKGUsbywhMSksVTAoZSxuLCEwKSxuIT09dD9lcy5zZXQocixuKTppJiZlcy5kZWxldGUocil9fX1mdW5jdGlvbiBCUih0LGUpe09hPT09MCYmdC5vd25lckRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsZ0UpLE9hKyssdC5fX2xleGljYWxFZGl0b3I9ZTtsZXQgbj1tRSh0KTtmb3IobGV0IHI9MDtyPGhtLmxlbmd0aDtyKyspe2xldFtpLG9dPWhtW3JdLGw9dHlwZW9mIG89PSJmdW5jdGlvbiI/cz0+e3MuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCxlLmlzRWRpdGFibGUoKSYmbyhzLGUpKX06cz0+e2lmKHMuX2xleGljYWxIYW5kbGVkIT09ITAmJihzLl9sZXhpY2FsSGFuZGxlZD0hMCxlLmlzRWRpdGFibGUoKSkpc3dpdGNoKGkpe2Nhc2UiY3V0IjpyZXR1cm4gWChlLG52LHMpO2Nhc2UiY29weSI6cmV0dXJuIFgoZSx0dixzKTtjYXNlInBhc3RlIjpyZXR1cm4gWChlLFFnLHMpO2Nhc2UiZHJhZ3N0YXJ0IjpyZXR1cm4gWChlLERTLHMpO2Nhc2UiZHJhZ292ZXIiOnJldHVybiBYKGUsSVMscyk7Y2FzZSJkcmFnZW5kIjpyZXR1cm4gWChlLGpTLHMpO2Nhc2UiZm9jdXMiOnJldHVybiBYKGUselMscyk7Y2FzZSJibHVyIjpyZXR1cm4gWChlLEZTLHMpO2Nhc2UiZHJvcCI6cmV0dXJuIFgoZSxMUyxzKX19O3QuYWRkRXZlbnRMaXN0ZW5lcihpLGwpLG4ucHVzaCgoKT0+e3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihpLGwpfSl9fWZ1bmN0aW9uIHZtKHQsZSxuKXtobigpO3ZhciByPXQuX19rZXk7bGV0IGk9dC5nZXRQYXJlbnQoKTtpZihpIT09bnVsbCl7dmFyIG89cnQoKTtpZihnZShvKSYmQih0KSl7dmFye2FuY2hvcjpsLGZvY3VzOnN9PW8sYT1sLmdldE5vZGUoKSx1PXMuZ2V0Tm9kZSgpO05kKGEsdCkmJmwuc2V0KHQuX19rZXksMCwiZWxlbWVudCIpLE5kKHUsdCkmJnMuc2V0KHQuX19rZXksMCwiZWxlbWVudCIpfWlmKGE9byx1PSExLGdlKGEpJiZlKXtvPWEuYW5jaG9yO2xldCBjPWEuZm9jdXM7by5rZXk9PT1yJiYoQWQobyx0LGksdC5nZXRQcmV2aW91c1NpYmxpbmcoKSx0LmdldE5leHRTaWJsaW5nKCkpLHU9ITApLGMua2V5PT09ciYmKEFkKGMsdCxpLHQuZ2V0UHJldmlvdXNTaWJsaW5nKCksdC5nZXROZXh0U2libGluZygpKSx1PSEwKX1lbHNlIFJzKGEpJiZlJiZ0LmlzU2VsZWN0ZWQoKSYmdC5zZWxlY3RQcmV2aW91cygpO2dlKGEpJiZlJiYhdT8ocj10LmdldEluZGV4V2l0aGluUGFyZW50KCksQm8odCksUGQoYSxpLHIsLTEpKTpCbyh0KSxufHxfcihpKXx8aS5jYW5CZUVtcHR5KCl8fCFpLmlzRW1wdHkoKXx8dm0oaSxlKSxlJiZtbihpKSYmaS5pc0VtcHR5KCkmJmkuc2VsZWN0RW5kKCl9fWNsYXNzIFV1e3N0YXRpYyBnZXRUeXBlKCl7SCg2NCx0aGlzLm5hbWUpfXN0YXRpYyBjbG9uZSgpe0goNjUsdGhpcy5uYW1lKX1jb25zdHJ1Y3RvcihlKXt0aGlzLl9fdHlwZT10aGlzLmNvbnN0cnVjdG9yLmdldFR5cGUoKSx0aGlzLl9fbmV4dD10aGlzLl9fcHJldj10aGlzLl9fcGFyZW50PW51bGwsR1ModGhpcyxlKX1nZXRUeXBlKCl7cmV0dXJuIHRoaXMuX190eXBlfWlzQXR0YWNoZWQoKXtmb3IodmFyIGU9dGhpcy5fX2tleTtlIT09bnVsbDspe2lmKGU9PT0icm9vdCIpcmV0dXJuITA7aWYoZT1JdChlKSxlPT09bnVsbClicmVhaztlPWUuX19wYXJlbnR9cmV0dXJuITF9aXNTZWxlY3RlZChlKXtpZihlPWV8fHJ0KCksZT09bnVsbClyZXR1cm4hMTtsZXQgbj1lLmdldE5vZGVzKCkuc29tZShyPT5yLl9fa2V5PT09dGhpcy5fX2tleSk7cmV0dXJuIFEodGhpcyk/bjpnZShlKSYmZS5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmZS5mb2N1cy50eXBlPT09ImVsZW1lbnQiJiZlLmFuY2hvci5rZXk9PT1lLmZvY3VzLmtleSYmZS5hbmNob3Iub2Zmc2V0PT09ZS5mb2N1cy5vZmZzZXQ/ITE6bn1nZXRLZXkoKXtyZXR1cm4gdGhpcy5fX2tleX1nZXRJbmRleFdpdGhpblBhcmVudCgpe3ZhciBlPXRoaXMuZ2V0UGFyZW50KCk7aWYoZT09PW51bGwpcmV0dXJuLTE7ZT1lLmdldEZpcnN0Q2hpbGQoKTtsZXQgbj0wO2Zvcig7ZSE9PW51bGw7KXtpZih0aGlzLmlzKGUpKXJldHVybiBuO24rKyxlPWUuZ2V0TmV4dFNpYmxpbmcoKX1yZXR1cm4tMX1nZXRQYXJlbnQoKXtsZXQgZT10aGlzLmdldExhdGVzdCgpLl9fcGFyZW50O3JldHVybiBlPT09bnVsbD9udWxsOkl0KGUpfWdldFBhcmVudE9yVGhyb3coKXtsZXQgZT10aGlzLmdldFBhcmVudCgpO3JldHVybiBlPT09bnVsbCYmSCg2Nix0aGlzLl9fa2V5KSxlfWdldFRvcExldmVsRWxlbWVudCgpe2xldCBlPXRoaXM7Zm9yKDtlIT09bnVsbDspe2xldCBuPWUuZ2V0UGFyZW50KCk7aWYoX3IobikpcmV0dXJuIGU7ZT1ufXJldHVybiBudWxsfWdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKXtsZXQgZT10aGlzLmdldFRvcExldmVsRWxlbWVudCgpO3JldHVybiBlPT09bnVsbCYmSCg2Nyx0aGlzLl9fa2V5KSxlfWdldFBhcmVudHMoKXtsZXQgZT1bXSxuPXRoaXMuZ2V0UGFyZW50KCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4pLG49bi5nZXRQYXJlbnQoKTtyZXR1cm4gZX1nZXRQYXJlbnRLZXlzKCl7bGV0IGU9W10sbj10aGlzLmdldFBhcmVudCgpO2Zvcig7biE9PW51bGw7KWUucHVzaChuLl9fa2V5KSxuPW4uZ2V0UGFyZW50KCk7cmV0dXJuIGV9Z2V0UHJldmlvdXNTaWJsaW5nKCl7bGV0IGU9dGhpcy5nZXRMYXRlc3QoKS5fX3ByZXY7cmV0dXJuIGU9PT1udWxsP251bGw6SXQoZSl9Z2V0UHJldmlvdXNTaWJsaW5ncygpe2xldCBlPVtdO3ZhciBuPXRoaXMuZ2V0UGFyZW50KCk7aWYobj09PW51bGwpcmV0dXJuIGU7Zm9yKG49bi5nZXRGaXJzdENoaWxkKCk7biE9PW51bGwmJiFuLmlzKHRoaXMpOyllLnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIGV9Z2V0TmV4dFNpYmxpbmcoKXtsZXQgZT10aGlzLmdldExhdGVzdCgpLl9fbmV4dDtyZXR1cm4gZT09PW51bGw/bnVsbDpJdChlKX1nZXROZXh0U2libGluZ3MoKXtsZXQgZT1bXSxuPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKTtmb3IoO24hPT1udWxsOyllLnB1c2gobiksbj1uLmdldE5leHRTaWJsaW5nKCk7cmV0dXJuIGV9Z2V0Q29tbW9uQW5jZXN0b3IoZSl7bGV0IG49dGhpcy5nZXRQYXJlbnRzKCk7dmFyIHI9ZS5nZXRQYXJlbnRzKCk7Qih0aGlzKSYmbi51bnNoaWZ0KHRoaXMpLEIoZSkmJnIudW5zaGlmdChlKSxlPW4ubGVuZ3RoO3ZhciBpPXIubGVuZ3RoO2lmKGU9PT0wfHxpPT09MHx8bltlLTFdIT09cltpLTFdKXJldHVybiBudWxsO2ZvcihyPW5ldyBTZXQociksaT0wO2k8ZTtpKyspe2xldCBvPW5baV07aWYoci5oYXMobykpcmV0dXJuIG99cmV0dXJuIG51bGx9aXMoZSl7cmV0dXJuIGU9PW51bGw/ITE6dGhpcy5fX2tleT09PWUuX19rZXl9aXNCZWZvcmUoZSl7aWYodGhpcz09PWUpcmV0dXJuITE7aWYoZS5pc1BhcmVudE9mKHRoaXMpKXJldHVybiEwO2lmKHRoaXMuaXNQYXJlbnRPZihlKSlyZXR1cm4hMTt2YXIgbj10aGlzLmdldENvbW1vbkFuY2VzdG9yKGUpO2xldCByPXRoaXM7Zm9yKDs7KXt2YXIgaT1yLmdldFBhcmVudE9yVGhyb3coKTtpZihpPT09bil7aT1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj1pfWZvcihyPWU7Oyl7aWYoZT1yLmdldFBhcmVudE9yVGhyb3coKSxlPT09bil7bj1yLmdldEluZGV4V2l0aGluUGFyZW50KCk7YnJlYWt9cj1lfXJldHVybiBpPG59aXNQYXJlbnRPZihlKXtsZXQgbj10aGlzLl9fa2V5O2lmKG49PT1lLl9fa2V5KXJldHVybiExO2Zvcig7ZSE9PW51bGw7KXtpZihlLl9fa2V5PT09bilyZXR1cm4hMDtlPWUuZ2V0UGFyZW50KCl9cmV0dXJuITF9Z2V0Tm9kZXNCZXR3ZWVuKGUpe2xldCBuPXRoaXMuaXNCZWZvcmUoZSkscj1bXSxpPW5ldyBTZXQ7Zm9yKHZhciBvPXRoaXM7Oyl7dmFyIGw9by5fX2tleTtpZihpLmhhcyhsKXx8KGkuYWRkKGwpLHIucHVzaChvKSksbz09PWUpYnJlYWs7aWYobD1CKG8pP24/by5nZXRGaXJzdENoaWxkKCk6by5nZXRMYXN0Q2hpbGQoKTpudWxsLGwhPT1udWxsKW89bDtlbHNlIGlmKGw9bj9vLmdldE5leHRTaWJsaW5nKCk6by5nZXRQcmV2aW91c1NpYmxpbmcoKSxsIT09bnVsbClvPWw7ZWxzZXtpZihvPW8uZ2V0UGFyZW50T3JUaHJvdygpLGkuaGFzKG8uX19rZXkpfHxyLnB1c2gobyksbz09PWUpYnJlYWs7bD1vO2RvIGw9PT1udWxsJiZIKDY4KSxvPW4/bC5nZXROZXh0U2libGluZygpOmwuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD1sLmdldFBhcmVudCgpLGwhPT1udWxsJiYobyE9PW51bGx8fGkuaGFzKGwuX19rZXkpfHxyLnB1c2gobCkpO3doaWxlKG89PT1udWxsKX19cmV0dXJuIG58fHIucmV2ZXJzZSgpLHJ9aXNEaXJ0eSgpe2xldCBlPXB0KCkuX2RpcnR5TGVhdmVzO3JldHVybiBlIT09bnVsbCYmZS5oYXModGhpcy5fX2tleSl9Z2V0TGF0ZXN0KCl7bGV0IGU9SXQodGhpcy5fX2tleSk7cmV0dXJuIGU9PT1udWxsJiZIKDExMyksZX1nZXRXcml0YWJsZSgpe2huKCk7dmFyIGU9UXIoKSxuPXB0KCk7ZT1lLl9ub2RlTWFwO2xldCByPXRoaXMuX19rZXksaT10aGlzLmdldExhdGVzdCgpLG89aS5fX3BhcmVudDtuPW4uX2Nsb25lTm90TmVlZGVkO3ZhciBsPXJ0KCk7cmV0dXJuIGwhPT1udWxsJiYobC5fY2FjaGVkTm9kZXM9bnVsbCksbi5oYXMocik/KGJkKGkpLGkpOihsPWkuY29uc3RydWN0b3IuY2xvbmUoaSksbC5fX3BhcmVudD1vLGwuX19uZXh0PWkuX19uZXh0LGwuX19wcmV2PWkuX19wcmV2LEIoaSkmJkIobCk/KGwuX19maXJzdD1pLl9fZmlyc3QsbC5fX2xhc3Q9aS5fX2xhc3QsbC5fX3NpemU9aS5fX3NpemUsbC5fX2luZGVudD1pLl9faW5kZW50LGwuX19mb3JtYXQ9aS5fX2Zvcm1hdCxsLl9fZGlyPWkuX19kaXIpOlEoaSkmJlEobCkmJihsLl9fZm9ybWF0PWkuX19mb3JtYXQsbC5fX3N0eWxlPWkuX19zdHlsZSxsLl9fbW9kZT1pLl9fbW9kZSxsLl9fZGV0YWlsPWkuX19kZXRhaWwpLG4uYWRkKHIpLGwuX19rZXk9cixiZChsKSxlLnNldChyLGwpLGwpfWdldFRleHRDb250ZW50KCl7cmV0dXJuIiJ9Z2V0VGV4dENvbnRlbnRTaXplKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9Y3JlYXRlRE9NKCl7SCg3MCl9dXBkYXRlRE9NKCl7SCg3MSl9ZXhwb3J0RE9NKGUpe3JldHVybntlbGVtZW50OnRoaXMuY3JlYXRlRE9NKGUuX2NvbmZpZyxlKX19ZXhwb3J0SlNPTigpe0goNzIpfXN0YXRpYyBpbXBvcnRKU09OKCl7SCgxOCx0aGlzLm5hbWUpfXN0YXRpYyB0cmFuc2Zvcm0oKXtyZXR1cm4gbnVsbH1yZW1vdmUoZSl7dm0odGhpcywhMCxlKX1yZXBsYWNlKGUsbil7aG4oKTt2YXIgcj1ydCgpO3IhPT1udWxsJiYocj1yLmNsb25lKCkpLFBoKHRoaXMsZSk7bGV0IGk9dGhpcy5nZXRMYXRlc3QoKSxvPXRoaXMuX19rZXksbD1lLl9fa2V5LHM9ZS5nZXRXcml0YWJsZSgpO2U9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYT1lLl9fc2l6ZTtCbyhzKTtsZXQgdT1pLmdldFByZXZpb3VzU2libGluZygpLGM9aS5nZXROZXh0U2libGluZygpLGQ9aS5fX3ByZXYsZj1pLl9fbmV4dCxoPWkuX19wYXJlbnQ7cmV0dXJuIHZtKGksITEsITApLHU9PT1udWxsP2UuX19maXJzdD1sOnUuZ2V0V3JpdGFibGUoKS5fX25leHQ9bCxzLl9fcHJldj1kLGM9PT1udWxsP2UuX19sYXN0PWw6Yy5nZXRXcml0YWJsZSgpLl9fcHJldj1sLHMuX19uZXh0PWYscy5fX3BhcmVudD1oLGUuX19zaXplPWEsbiYmdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goZz0+e3MuYXBwZW5kKGcpfSksZ2UocikmJihWcihyKSxuPXIuYW5jaG9yLHI9ci5mb2N1cyxuLmtleT09PW8mJkgwKG4scyksci5rZXk9PT1vJiZIMChyLHMpKSxaaSgpPT09byYmS3QobCksc31pbnNlcnRBZnRlcihlLG49ITApe2huKCksUGgodGhpcyxlKTt2YXIgcj10aGlzLmdldFdyaXRhYmxlKCk7bGV0IGk9ZS5nZXRXcml0YWJsZSgpO3ZhciBvPWkuZ2V0UGFyZW50KCk7bGV0IGw9cnQoKTt2YXIgcz0hMSxhPSExO2lmKG8hPT1udWxsKXt2YXIgdT1lLmdldEluZGV4V2l0aGluUGFyZW50KCk7Qm8oaSksZ2UobCkmJihhPW8uX19rZXkscz1sLmFuY2hvcixvPWwuZm9jdXMscz1zLnR5cGU9PT0iZWxlbWVudCImJnMua2V5PT09YSYmcy5vZmZzZXQ9PT11KzEsYT1vLnR5cGU9PT0iZWxlbWVudCImJm8ua2V5PT09YSYmby5vZmZzZXQ9PT11KzEpfW89dGhpcy5nZXROZXh0U2libGluZygpLHU9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKTtsZXQgYz1pLl9fa2V5LGQ9ci5fX25leHQ7cmV0dXJuIG89PT1udWxsP3UuX19sYXN0PWM6by5nZXRXcml0YWJsZSgpLl9fcHJldj1jLHUuX19zaXplKyssci5fX25leHQ9YyxpLl9fbmV4dD1kLGkuX19wcmV2PXIuX19rZXksaS5fX3BhcmVudD1yLl9fcGFyZW50LG4mJmdlKGwpJiYobj10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCksUGQobCx1LG4rMSkscj11Ll9fa2V5LHMmJmwuYW5jaG9yLnNldChyLG4rMiwiZWxlbWVudCIpLGEmJmwuZm9jdXMuc2V0KHIsbisyLCJlbGVtZW50IikpLGV9aW5zZXJ0QmVmb3JlKGUsbj0hMCl7aG4oKSxQaCh0aGlzLGUpO3ZhciByPXRoaXMuZ2V0V3JpdGFibGUoKTtsZXQgaT1lLmdldFdyaXRhYmxlKCksbz1pLl9fa2V5O0JvKGkpO2xldCBsPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscz10aGlzLmdldFBhcmVudE9yVGhyb3coKS5nZXRXcml0YWJsZSgpLGE9ci5fX3ByZXYsdT10aGlzLmdldEluZGV4V2l0aGluUGFyZW50KCk7cmV0dXJuIGw9PT1udWxsP3MuX19maXJzdD1vOmwuZ2V0V3JpdGFibGUoKS5fX25leHQ9byxzLl9fc2l6ZSsrLHIuX19wcmV2PW8saS5fX3ByZXY9YSxpLl9fbmV4dD1yLl9fa2V5LGkuX19wYXJlbnQ9ci5fX3BhcmVudCxyPXJ0KCksbiYmZ2UocikmJihuPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLFBkKHIsbix1KSksZX1pc1BhcmVudFJlcXVpcmVkKCl7cmV0dXJuITF9Y3JlYXRlUGFyZW50RWxlbWVudE5vZGUoKXtyZXR1cm4gSm8oKX1zZWxlY3RQcmV2aW91cyhlLG4pe2huKCk7bGV0IHI9dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxpPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO3JldHVybiByPT09bnVsbD9pLnNlbGVjdCgwLDApOkIocik/ci5zZWxlY3QoKTpRKHIpP3Iuc2VsZWN0KGUsbik6KGU9ci5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsaS5zZWxlY3QoZSxlKSl9c2VsZWN0TmV4dChlLG4pe2huKCk7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZygpLGk9dGhpcy5nZXRQYXJlbnRPclRocm93KCk7cmV0dXJuIHI9PT1udWxsP2kuc2VsZWN0KCk6QihyKT9yLnNlbGVjdCgwLDApOlEocik/ci5zZWxlY3QoZSxuKTooZT1yLmdldEluZGV4V2l0aGluUGFyZW50KCksaS5zZWxlY3QoZSxlKSl9bWFya0RpcnR5KCl7dGhpcy5nZXRXcml0YWJsZSgpfX1jbGFzcyBUcyBleHRlbmRzIFV1e3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImxpbmVicmVhayJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgVHMoZS5fX2tleSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9Z2V0VGV4dENvbnRlbnQoKXtyZXR1cm5gCmB9Y3JlYXRlRE9NKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIil9dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybnticjplPT57bGV0IG49ZS5wYXJlbnRFbGVtZW50LHIsaTtyZXR1cm4gbiE9PW51bGwmJigocj1uLmZpcnN0Q2hpbGQpPT09ZXx8ci5uZXh0U2libGluZz09PWUmJnIubm9kZVR5cGU9PT0zJiYoci50ZXh0Q29udGVudHx8IiIpLm1hdGNoKC9eKCB8XHR8XHI/XG4pKyQvKSE9PW51bGwpJiYoKGk9bi5sYXN0Q2hpbGQpPT09ZXx8aS5wcmV2aW91c1NpYmxpbmc9PT1lJiZpLm5vZGVUeXBlPT09MyYmKGkudGV4dENvbnRlbnR8fCIiKS5tYXRjaCgvXiggfFx0fFxyP1xuKSskLykhPT1udWxsKT9udWxsOntjb252ZXJzaW9uOlVSLHByaW9yaXR5OjB9fX19c3RhdGljIGltcG9ydEpTT04oKXtyZXR1cm4gbXMoKX1leHBvcnRKU09OKCl7cmV0dXJue3R5cGU6ImxpbmVicmVhayIsdmVyc2lvbjoxfX19ZnVuY3Rpb24gVVIoKXtyZXR1cm57bm9kZTptcygpfX1mdW5jdGlvbiBtcygpe3JldHVybiBCdShuZXcgVHMpfWZ1bmN0aW9uIGN1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgVHN9ZnVuY3Rpb24gTGgodCxlKXtyZXR1cm4gZSYxNj8iY29kZSI6ZSYxMjg/Im1hcmsiOmUmMzI/InN1YiI6ZSY2ND8ic3VwIjpudWxsfWZ1bmN0aW9uIERoKHQsZSl7cmV0dXJuIGUmMT8ic3Ryb25nIjplJjI/ImVtIjoic3BhbiJ9ZnVuY3Rpb24gSWgodCxlLG4scixpKXt0PXIuY2xhc3NMaXN0LHI9UmEoaSwiYmFzZSIpLHIhPT12b2lkIDAmJnQuYWRkKC4uLnIpLHI9UmEoaSwidW5kZXJsaW5lU3RyaWtldGhyb3VnaCIpO2xldCBvPSExLGw9ZSY4JiZlJjQ7dmFyIHM9biY4JiZuJjQ7ciE9PXZvaWQgMCYmKHM/KG89ITAsbHx8dC5hZGQoLi4ucikpOmwmJnQucmVtb3ZlKC4uLnIpKTtmb3IobGV0IGEgaW4gRm8pcz1Gb1thXSxyPVJhKGksYSksciE9PXZvaWQgMCYmKG4mcz8hb3x8YSE9PSJ1bmRlcmxpbmUiJiZhIT09InN0cmlrZXRocm91Z2giPyghKGUmcyl8fGwmJmE9PT0idW5kZXJsaW5lInx8YT09PSJzdHJpa2V0aHJvdWdoIikmJnQuYWRkKC4uLnIpOmUmcyYmdC5yZW1vdmUoLi4ucik6ZSZzJiZ0LnJlbW92ZSguLi5yKSl9ZnVuY3Rpb24gamgodCxlLG4pe2xldCByPWUuZmlyc3RDaGlsZDtpZihuPW4uaXNDb21wb3NpbmcoKSx0Kz1uPyRmOiIiLHI9PW51bGwpZS50ZXh0Q29udGVudD10O2Vsc2UgaWYoZT1yLm5vZGVWYWx1ZSxlIT09dClpZihufHxzbyl7bj1lLmxlbmd0aDtsZXQgaT10Lmxlbmd0aCxvPTAsbD0wO2Zvcig7bzxuJiZvPGkmJmVbb109PT10W29dOylvKys7Zm9yKDtsK288biYmbCtvPGkmJmVbbi1sLTFdPT09dFtpLWwtMV07KWwrKzt0PVtvLG4tby1sLHQuc2xpY2UobyxpLWwpXTtsZXRbcyxhLHVdPXQ7YSE9PTAmJnIuZGVsZXRlRGF0YShzLGEpLHIuaW5zZXJ0RGF0YShzLHUpfWVsc2Ugci5ub2RlVmFsdWU9dH1mdW5jdGlvbiB2Yyh0LGUpe3JldHVybiBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSksZS5hcHBlbmRDaGlsZCh0KSxlfWNsYXNzIHVsIGV4dGVuZHMgVXV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGV4dCJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgdWwoZS5fX3RleHQsZS5fX2tleSl9Y29uc3RydWN0b3IoZSxuKXtzdXBlcihuKSx0aGlzLl9fdGV4dD1lLHRoaXMuX19mb3JtYXQ9MCx0aGlzLl9fc3R5bGU9IiIsdGhpcy5fX2RldGFpbD10aGlzLl9fbW9kZT0wfWdldEZvcm1hdCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZm9ybWF0fWdldERldGFpbCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsfWdldE1vZGUoKXtsZXQgZT10aGlzLmdldExhdGVzdCgpO3JldHVybiBDUltlLl9fbW9kZV19Z2V0U3R5bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3N0eWxlfWlzVG9rZW4oKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX21vZGU9PT0xfWlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX19rZXk9PT1aaSgpfWlzU2VnbWVudGVkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19tb2RlPT09Mn1pc0RpcmVjdGlvbmxlc3MoKXtyZXR1cm4odGhpcy5nZXRMYXRlc3QoKS5fX2RldGFpbCYxKSE9PTB9aXNVbm1lcmdlYWJsZSgpe3JldHVybih0aGlzLmdldExhdGVzdCgpLl9fZGV0YWlsJjIpIT09MH1oYXNGb3JtYXQoZSl7cmV0dXJuIGU9Rm9bZV0sKHRoaXMuZ2V0Rm9ybWF0KCkmZSkhPT0wfWlzU2ltcGxlVGV4dCgpe3JldHVybiB0aGlzLl9fdHlwZT09PSJ0ZXh0IiYmdGhpcy5fX21vZGU9PT0wfWdldFRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX190ZXh0fWdldEZvcm1hdEZsYWdzKGUsbil7bGV0IHI9dGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdDtyZXR1cm4gS1MocixlLG4pfWNyZWF0ZURPTShlKXt2YXIgbj10aGlzLl9fZm9ybWF0LHI9TGgodGhpcyxuKTtsZXQgaT1EaCh0aGlzLG4pLG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyPT09bnVsbD9pOnIpLGw9bztyZXR1cm4gdGhpcy5oYXNGb3JtYXQoImNvZGUiKSYmby5zZXRBdHRyaWJ1dGUoInNwZWxsY2hlY2siLCJmYWxzZSIpLHIhPT1udWxsJiYobD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGkpLG8uYXBwZW5kQ2hpbGQobCkpLHI9bCxqaCh0aGlzLl9fdGV4dCxyLHRoaXMpLGU9ZS50aGVtZS50ZXh0LGUhPT12b2lkIDAmJkloKGksMCxuLHIsZSksbj10aGlzLl9fc3R5bGUsbiE9PSIiJiYoby5zdHlsZS5jc3NUZXh0PW4pLG99dXBkYXRlRE9NKGUsbixyKXtsZXQgaT10aGlzLl9fdGV4dDt2YXIgbz1lLl9fZm9ybWF0LGw9dGhpcy5fX2Zvcm1hdCxzPUxoKHRoaXMsbyk7bGV0IGE9TGgodGhpcyxsKTt2YXIgdT1EaCh0aGlzLG8pO2xldCBjPURoKHRoaXMsbCk7cmV0dXJuKHM9PT1udWxsP3U6cykhPT0oYT09PW51bGw/YzphKT8hMDpzPT09YSYmdSE9PWM/KG89bi5maXJzdENoaWxkLG89PW51bGwmJkgoNDgpLGU9cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGMpLGpoKGksZSx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiZJaChjLDAsbCxlLHIpLG4ucmVwbGFjZUNoaWxkKHMsbyksITEpOih1PW4sYSE9PW51bGwmJnMhPT1udWxsJiYodT1uLmZpcnN0Q2hpbGQsdT09bnVsbCYmSCg0OSkpLGpoKGksdSx0aGlzKSxyPXIudGhlbWUudGV4dCxyIT09dm9pZCAwJiZvIT09bCYmSWgoYyxvLGwsdSxyKSxsPXRoaXMuX19zdHlsZSxlLl9fc3R5bGUhPT1sJiYobi5zdHlsZS5jc3NUZXh0PWwpLCExKX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJueyIjdGV4dCI6KCk9Pih7Y29udmVyc2lvbjpIUixwcmlvcml0eTowfSksYjooKT0+KHtjb252ZXJzaW9uOlZSLHByaW9yaXR5OjB9KSxjb2RlOigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pLGVtOigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pLGk6KCk9Pih7Y29udmVyc2lvbjpNaSxwcmlvcml0eTowfSksczooKT0+KHtjb252ZXJzaW9uOk1pLHByaW9yaXR5OjB9KSxzcGFuOigpPT4oe2NvbnZlcnNpb246V1IscHJpb3JpdHk6MH0pLHN0cm9uZzooKT0+KHtjb252ZXJzaW9uOk1pLHByaW9yaXR5OjB9KSxzdWI6KCk9Pih7Y29udmVyc2lvbjpNaSxwcmlvcml0eTowfSksc3VwOigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pLHU6KCk9Pih7Y29udmVyc2lvbjpNaSxwcmlvcml0eTowfSl9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPUx0KGUudGV4dCk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldERldGFpbChlLmRldGFpbCksbi5zZXRNb2RlKGUubW9kZSksbi5zZXRTdHlsZShlLnN0eWxlKSxufWV4cG9ydERPTShlKXtyZXR1cm57ZWxlbWVudDplfT1zdXBlci5leHBvcnRET00oZSksZSE9PW51bGwmJlJmKGUpfHxIKDEzMiksZS5zdHlsZS53aGl0ZVNwYWNlPSJwcmUtd3JhcCIsdGhpcy5oYXNGb3JtYXQoImJvbGQiKSYmKGU9dmMoZSwiYiIpKSx0aGlzLmhhc0Zvcm1hdCgiaXRhbGljIikmJihlPXZjKGUsImkiKSksdGhpcy5oYXNGb3JtYXQoInN0cmlrZXRocm91Z2giKSYmKGU9dmMoZSwicyIpKSx0aGlzLmhhc0Zvcm1hdCgidW5kZXJsaW5lIikmJihlPXZjKGUsInUiKSkse2VsZW1lbnQ6ZX19ZXhwb3J0SlNPTigpe3JldHVybntkZXRhaWw6dGhpcy5nZXREZXRhaWwoKSxmb3JtYXQ6dGhpcy5nZXRGb3JtYXQoKSxtb2RlOnRoaXMuZ2V0TW9kZSgpLHN0eWxlOnRoaXMuZ2V0U3R5bGUoKSx0ZXh0OnRoaXMuZ2V0VGV4dENvbnRlbnQoKSx0eXBlOiJ0ZXh0Iix2ZXJzaW9uOjF9fXNlbGVjdGlvblRyYW5zZm9ybSgpe31zZXRGb3JtYXQoZSl7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fZm9ybWF0PXR5cGVvZiBlPT0ic3RyaW5nIj9Gb1tlXTplLG59c2V0RGV0YWlsKGUpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX2RldGFpbD10eXBlb2YgZT09InN0cmluZyI/d1JbZV06ZSxufXNldFN0eWxlKGUpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX3N0eWxlPWUsbn10b2dnbGVGb3JtYXQoZSl7cmV0dXJuIGU9Rm9bZV0sdGhpcy5zZXRGb3JtYXQodGhpcy5nZXRGb3JtYXQoKV5lKX10b2dnbGVEaXJlY3Rpb25sZXNzKCl7bGV0IGU9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBlLl9fZGV0YWlsXj0xLGV9dG9nZ2xlVW5tZXJnZWFibGUoKXtsZXQgZT10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIGUuX19kZXRhaWxePTIsZX1zZXRNb2RlKGUpe2lmKGU9RVJbZV0sdGhpcy5fX21vZGU9PT1lKXJldHVybiB0aGlzO2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX21vZGU9ZSxufXNldFRleHRDb250ZW50KGUpe2lmKHRoaXMuX190ZXh0PT09ZSlyZXR1cm4gdGhpcztsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX190ZXh0PWUsbn1zZWxlY3QoZSxuKXtobigpO2xldCByPXJ0KCk7dmFyIGk9dGhpcy5nZXRUZXh0Q29udGVudCgpO2xldCBvPXRoaXMuX19rZXk7aWYodHlwZW9mIGk9PSJzdHJpbmciPyhpPWkubGVuZ3RoLGU9PT12b2lkIDAmJihlPWkpLG49PT12b2lkIDAmJihuPWkpKTpuPWU9MCxnZShyKSlpPVppKCksaSE9PXIuYW5jaG9yLmtleSYmaSE9PXIuZm9jdXMua2V5fHxLdChvKSxyLnNldFRleHROb2RlUmFuZ2UodGhpcyxlLHRoaXMsbik7ZWxzZSByZXR1cm4geEUobyxlLG8sbiwidGV4dCIsInRleHQiKTtyZXR1cm4gcn1zcGxpY2VUZXh0KGUsbixyLGkpe2xldCBvPXRoaXMuZ2V0V3JpdGFibGUoKSxsPW8uX190ZXh0LHM9ci5sZW5ndGgsYT1lOzA+YSYmKGE9cythLDA+YSYmKGE9MCkpO2xldCB1PXJ0KCk7cmV0dXJuIGkmJmdlKHUpJiYoZSs9cyx1LnNldFRleHROb2RlUmFuZ2UobyxlLG8sZSkpLG49bC5zbGljZSgwLGEpK3IrbC5zbGljZShhK24pLG8uX190ZXh0PW4sb31jYW5JbnNlcnRUZXh0QmVmb3JlKCl7cmV0dXJuITB9Y2FuSW5zZXJ0VGV4dEFmdGVyKCl7cmV0dXJuITB9c3BsaXRUZXh0KC4uLmUpe2huKCk7dmFyIG49dGhpcy5nZXRMYXRlc3QoKSxyPW4uZ2V0VGV4dENvbnRlbnQoKSxpPW4uX19rZXksbz1aaSgpLGw9bmV3IFNldChlKTtlPVtdO2Zvcih2YXIgcz1yLmxlbmd0aCxhPSIiLHU9MDt1PHM7dSsrKWEhPT0iIiYmbC5oYXModSkmJihlLnB1c2goYSksYT0iIiksYSs9clt1XTtpZihhIT09IiImJmUucHVzaChhKSxsPWUubGVuZ3RoLGw9PT0wKXJldHVybltdO2lmKGVbMF09PT1yKXJldHVybltuXTt2YXIgYz1lWzBdO3I9bi5nZXRQYXJlbnRPclRocm93KCksdT1uLmdldEZvcm1hdCgpO2xldCBkPW4uZ2V0U3R5bGUoKSxmPW4uX19kZXRhaWw7cz0hMSxuLmlzU2VnbWVudGVkKCk/KGE9THQoYyksYS5fX2Zvcm1hdD11LGEuX19zdHlsZT1kLGEuX19kZXRhaWw9ZixzPSEwKTooYT1uLmdldFdyaXRhYmxlKCksYS5fX3RleHQ9Yyksbj1ydCgpLGE9W2FdLGM9Yy5sZW5ndGg7Zm9yKGxldCBtPTE7bTxsO20rKyl7dmFyIGg9ZVttXSxnPWgubGVuZ3RoO2g9THQoaCkuZ2V0V3JpdGFibGUoKSxoLl9fZm9ybWF0PXUsaC5fX3N0eWxlPWQsaC5fX2RldGFpbD1mO2xldCB3PWguX19rZXk7aWYoZz1jK2csZ2Uobikpe2xldCB2PW4uYW5jaG9yLHk9bi5mb2N1czt2LmtleT09PWkmJnYudHlwZT09PSJ0ZXh0IiYmdi5vZmZzZXQ+YyYmdi5vZmZzZXQ8PWcmJih2LmtleT13LHYub2Zmc2V0LT1jLG4uZGlydHk9ITApLHkua2V5PT09aSYmeS50eXBlPT09InRleHQiJiZ5Lm9mZnNldD5jJiZ5Lm9mZnNldDw9ZyYmKHkua2V5PXcseS5vZmZzZXQtPWMsbi5kaXJ0eT0hMCl9bz09PWkmJkt0KHcpLGM9ZyxhLnB1c2goaCl9cmV0dXJuIGk9dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKSxvPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxpIT09bnVsbCYmYmQoaSksbyE9PW51bGwmJmJkKG8pLGk9ci5nZXRXcml0YWJsZSgpLG89dGhpcy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHM/KGkuc3BsaWNlKG8sMCxhKSx0aGlzLnJlbW92ZSgpKTppLnNwbGljZShvLDEsYSksZ2UobikmJlBkKG4scixvLGwtMSksYX1tZXJnZVdpdGhTaWJsaW5nKGUpe3ZhciBuPWU9PT10aGlzLmdldFByZXZpb3VzU2libGluZygpO258fGU9PT10aGlzLmdldE5leHRTaWJsaW5nKCl8fEgoNTApO3ZhciByPXRoaXMuX19rZXk7bGV0IGk9ZS5fX2tleSxvPXRoaXMuX190ZXh0LGw9by5sZW5ndGg7WmkoKT09PWkmJkt0KHIpO2xldCBzPXJ0KCk7aWYoZ2Uocykpe2xldCBhPXMuYW5jaG9yLHU9cy5mb2N1czthIT09bnVsbCYmYS5rZXk9PT1pJiYoUTAoYSxuLHIsZSxsKSxzLmRpcnR5PSEwKSx1IT09bnVsbCYmdS5rZXk9PT1pJiYoUTAodSxuLHIsZSxsKSxzLmRpcnR5PSEwKX1yZXR1cm4gcj1lLl9fdGV4dCx0aGlzLnNldFRleHRDb250ZW50KG4/citvOm8rciksbj10aGlzLmdldFdyaXRhYmxlKCksZS5yZW1vdmUoKSxufWlzVGV4dEVudGl0eSgpe3JldHVybiExfX1mdW5jdGlvbiBXUih0KXtsZXQgZT10LnN0eWxlLmZvbnRXZWlnaHQ9PT0iNzAwIixuPXQuc3R5bGUudGV4dERlY29yYXRpb249PT0ibGluZS10aHJvdWdoIixyPXQuc3R5bGUuZm9udFN0eWxlPT09Iml0YWxpYyIsaT10LnN0eWxlLnRleHREZWNvcmF0aW9uPT09InVuZGVybGluZSIsbz10LnN0eWxlLnZlcnRpY2FsQWxpZ247cmV0dXJue2ZvckNoaWxkOmw9PihRKGwpJiYoZSYmbC50b2dnbGVGb3JtYXQoImJvbGQiKSxuJiZsLnRvZ2dsZUZvcm1hdCgic3RyaWtldGhyb3VnaCIpLHImJmwudG9nZ2xlRm9ybWF0KCJpdGFsaWMiKSxpJiZsLnRvZ2dsZUZvcm1hdCgidW5kZXJsaW5lIiksbz09PSJzdWIiJiZsLnRvZ2dsZUZvcm1hdCgic3Vic2NyaXB0Iiksbz09PSJzdXBlciImJmwudG9nZ2xlRm9ybWF0KCJzdXBlcnNjcmlwdCIpKSxsKSxub2RlOm51bGx9fWZ1bmN0aW9uIFZSKHQpe2xldCBlPXQuc3R5bGUuZm9udFdlaWdodD09PSJub3JtYWwiO3JldHVybntmb3JDaGlsZDpuPT4oUShuKSYmIWUmJm4udG9nZ2xlRm9ybWF0KCJib2xkIiksbiksbm9kZTpudWxsfX1sZXQgVzA9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gSFIodCl7dC5wYXJlbnRFbGVtZW50PT09bnVsbCYmSCgxMjkpO2Zvcih2YXIgZT10LnRleHRDb250ZW50fHwiIixuLHI9dC5wYXJlbnROb2RlLGk9W3RdO3IhPT1udWxsJiYobj1XMC5nZXQocikpPT09dm9pZCAwJiYhKHIubm9kZU5hbWU9PT0iUFJFInx8ci5ub2RlVHlwZT09PTEmJnIuc3R5bGUud2hpdGVTcGFjZS5zdGFydHNXaXRoKCJwcmUiKSk7KWkucHVzaChyKSxyPXIucGFyZW50Tm9kZTtmb3Iobj1uPT09dm9pZCAwP3I6bixyPTA7cjxpLmxlbmd0aDtyKyspVzAuc2V0KGlbcl0sbik7aWYobiE9PW51bGwpe2ZvcihlPWUuc3BsaXQoLyhccj9cbnxcdCkvKSx0PVtdLGk9ZS5sZW5ndGgsbj0wO248aTtuKyspcj1lW25dLHI9PT1gCmB8fHI9PT1gXHIKYD90LnB1c2gobXMoKSk6cj09PSIJIj90LnB1c2goUGYoKSk6ciE9PSIiJiZ0LnB1c2goTHQocikpO3JldHVybntub2RlOnR9fWlmKGU9ZS5yZXBsYWNlKC9cci9nLCIiKS5yZXBsYWNlKC9bIFx0XG5dKy9nLCIgIiksZT09PSIiKXJldHVybntub2RlOm51bGx9O2lmKGVbMF09PT0iICIpe2ZvcihpPXQsbj0hMDtpIT09bnVsbCYmKGk9VjAoaSwhMSkpIT09bnVsbDspaWYocj1pLnRleHRDb250ZW50fHwiIiwwPHIubGVuZ3RoKXsvWyBcdFxuXSQvLnRlc3QocikmJihlPWUuc2xpY2UoMSkpLG49ITE7YnJlYWt9biYmKGU9ZS5zbGljZSgxKSl9aWYoZVtlLmxlbmd0aC0xXT09PSIgIil7Zm9yKGk9ITA7dCE9PW51bGwmJih0PVYwKHQsITApKSE9PW51bGw7KWlmKDA8KHQudGV4dENvbnRlbnR8fCIiKS5yZXBsYWNlKC9eKCB8XHR8XHI/XG4pKy8sIiIpLmxlbmd0aCl7aT0hMTticmVha31pJiYoZT1lLnNsaWNlKDAsZS5sZW5ndGgtMSkpfXJldHVybiBlPT09IiI/e25vZGU6bnVsbH06e25vZGU6THQoZSl9fWxldCBLUj1uZXcgUmVnRXhwKC9eKGF8YWJicnxhY3JvbnltfGJ8Y2l0ZXxjb2RlfGRlbHxlbXxpfGluc3xrYmR8bGFiZWx8b3V0cHV0fHF8cnVieXxzfHNhbXB8c3BhbnxzdHJvbmd8c3VifHN1cHx0aW1lfHV8dHR8dmFyKSQvLCJpIik7ZnVuY3Rpb24gVjAodCxlKXtmb3IoOzspe2Zvcih2YXIgbj12b2lkIDA7KG49ZT90Lm5leHRTaWJsaW5nOnQucHJldmlvdXNTaWJsaW5nKT09PW51bGw7KWlmKHQ9dC5wYXJlbnRFbGVtZW50LHQ9PT1udWxsKXJldHVybiBudWxsO2lmKHQ9bix0Lm5vZGVUeXBlPT09MSYmKG49dC5zdHlsZS5kaXNwbGF5LG49PT0iIiYmdC5ub2RlTmFtZS5tYXRjaChLUik9PT1udWxsfHxuIT09IiImJiFuLnN0YXJ0c1dpdGgoImlubGluZSIpKSlyZXR1cm4gbnVsbDtmb3IoOyhuPWU/dC5maXJzdENoaWxkOnQubGFzdENoaWxkKSE9PW51bGw7KXQ9bjtpZih0Lm5vZGVUeXBlPT09MylyZXR1cm4gdDtpZih0Lm5vZGVOYW1lPT09IkJSIilyZXR1cm4gbnVsbH19bGV0IFpSPXtjb2RlOiJjb2RlIixlbToiaXRhbGljIixpOiJpdGFsaWMiLHM6InN0cmlrZXRocm91Z2giLHN0cm9uZzoiYm9sZCIsc3ViOiJzdWJzY3JpcHQiLHN1cDoic3VwZXJzY3JpcHQiLHU6InVuZGVybGluZSJ9O2Z1bmN0aW9uIE1pKHQpe2xldCBlPVpSW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIGU9PT12b2lkIDA/e25vZGU6bnVsbH06e2ZvckNoaWxkOm49PihRKG4pJiYhbi5oYXNGb3JtYXQoZSkmJm4udG9nZ2xlRm9ybWF0KGUpLG4pLG5vZGU6bnVsbH19ZnVuY3Rpb24gTHQodD0iIil7cmV0dXJuIEJ1KG5ldyB1bCh0KSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHVsfWNsYXNzIE5zIGV4dGVuZHMgdWx7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4idGFiIn1zdGF0aWMgY2xvbmUoZSl7bGV0IG49bmV3IE5zKGUuX19rZXkpO3JldHVybiBuLl9fdGV4dD1lLl9fdGV4dCxuLl9fZm9ybWF0PWUuX19mb3JtYXQsbi5fX3N0eWxlPWUuX19zdHlsZSxufWNvbnN0cnVjdG9yKGUpe3N1cGVyKCIJIixlKSx0aGlzLl9fZGV0YWlsPTJ9c3RhdGljIGltcG9ydERPTSgpe3JldHVybiBudWxsfXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPVBmKCk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldFN0eWxlKGUuc3R5bGUpLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToidGFiIix2ZXJzaW9uOjF9fXNldFRleHRDb250ZW50KCl7SCgxMjYpfXNldERldGFpbCgpe0goMTI3KX1zZXRNb2RlKCl7SCgxMjgpfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMX1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMX19ZnVuY3Rpb24gUGYoKXtyZXR1cm4gQnUobmV3IE5zKX1jbGFzcyBIcntjb25zdHJ1Y3RvcihlLG4scil7dGhpcy5fc2VsZWN0aW9uPW51bGwsdGhpcy5rZXk9ZSx0aGlzLm9mZnNldD1uLHRoaXMudHlwZT1yfWlzKGUpe3JldHVybiB0aGlzLmtleT09PWUua2V5JiZ0aGlzLm9mZnNldD09PWUub2Zmc2V0JiZ0aGlzLnR5cGU9PT1lLnR5cGV9aXNCZWZvcmUoZSl7bGV0IG49dGhpcy5nZXROb2RlKCkscj1lLmdldE5vZGUoKSxpPXRoaXMub2Zmc2V0O2lmKGU9ZS5vZmZzZXQsQihuKSl7dmFyIG89bi5nZXREZXNjZW5kYW50QnlJbmRleChpKTtuPW8/P259cmV0dXJuIEIocikmJihvPXIuZ2V0RGVzY2VuZGFudEJ5SW5kZXgoZSkscj1vPz9yKSxuPT09cj9pPGU6bi5pc0JlZm9yZShyKX1nZXROb2RlKCl7bGV0IGU9SXQodGhpcy5rZXkpO3JldHVybiBlPT09bnVsbCYmSCgyMCksZX1zZXQoZSxuLHIpe2xldCBpPXRoaXMuX3NlbGVjdGlvbixvPXRoaXMua2V5O3RoaXMua2V5PWUsdGhpcy5vZmZzZXQ9bix0aGlzLnR5cGU9cixQcygpfHwoWmkoKT09PW8mJkt0KGUpLGkhPT1udWxsJiYoaS5fY2FjaGVkTm9kZXM9bnVsbCxpLmRpcnR5PSEwKSl9fWZ1bmN0aW9uIHpoKHQsZSl7bGV0IG49ZS5fX2tleSxyPXQub2Zmc2V0LGk9ImVsZW1lbnQiO2lmKFEoZSkpaT0idGV4dCIsZT1lLmdldFRleHRDb250ZW50U2l6ZSgpLHI+ZSYmKHI9ZSk7ZWxzZSBpZighQihlKSl7dmFyIG89ZS5nZXROZXh0U2libGluZygpO1Eobyk/KG49by5fX2tleSxyPTAsaT0idGV4dCIpOihvPWUuZ2V0UGFyZW50KCkpJiYobj1vLl9fa2V5LHI9ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEpfXQuc2V0KG4scixpKX1mdW5jdGlvbiBIMCh0LGUpe2lmKEIoZSkpe2xldCBuPWUuZ2V0TGFzdERlc2NlbmRhbnQoKTtCKG4pfHxRKG4pP3poKHQsbik6emgodCxlKX1lbHNlIHpoKHQsZSl9ZnVuY3Rpb24gSzAodCxlLG4scil7bGV0IGk9dC5nZXROb2RlKCksbz1pLmdldENoaWxkQXRJbmRleCh0Lm9mZnNldCksbD1MdCgpLHM9bW4oaSk/Sm8oKS5hcHBlbmQobCk6bDtsLnNldEZvcm1hdChuKSxsLnNldFN0eWxlKHIpLG89PT1udWxsP2kuYXBwZW5kKHMpOihvLmluc2VydEJlZm9yZShzKSxlLnR5cGU9PT0iZWxlbWVudCImJmUua2V5PT09dC5rZXkmJmUub2Zmc2V0IT09dC5vZmZzZXQmJmUuc2V0KGUua2V5LGUub2Zmc2V0KzEsImVsZW1lbnQiKSksdC5pcyhlKSYmZS5zZXQobC5fX2tleSwwLCJ0ZXh0IiksdC5zZXQobC5fX2tleSwwLCJ0ZXh0Iil9ZnVuY3Rpb24gemkodCxlLG4scil7dC5rZXk9ZSx0Lm9mZnNldD1uLHQudHlwZT1yfWNsYXNzIEFme2NvbnN0cnVjdG9yKGUpe3RoaXMuZGlydHk9ITEsdGhpcy5fbm9kZXM9ZSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWlzKGUpe2lmKCFScyhlKSlyZXR1cm4hMTtsZXQgbj10aGlzLl9ub2RlcyxyPWUuX25vZGVzO3JldHVybiBuLnNpemU9PT1yLnNpemUmJkFycmF5LmZyb20obikuZXZlcnkoaT0+ci5oYXMoaSkpfWFkZChlKXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmFkZChlKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWRlbGV0ZShlKXt0aGlzLmRpcnR5PSEwLHRoaXMuX25vZGVzLmRlbGV0ZShlKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWNsZWFyKCl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9ub2Rlcy5jbGVhcigpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9aGFzKGUpe3JldHVybiB0aGlzLl9ub2Rlcy5oYXMoZSl9Y2xvbmUoKXtyZXR1cm4gbmV3IEFmKG5ldyBTZXQodGhpcy5fbm9kZXMpKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXMoZSxuKXtsZXQgcj10aGlzLmdldE5vZGVzKCksaT1yLmxlbmd0aDt2YXIgbz1yW2ktMV07aWYoUShvKSlvPW8uc2VsZWN0KCk7ZWxzZXtsZXQgbD1vLmdldEluZGV4V2l0aGluUGFyZW50KCkrMTtvPW8uZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdChsLGwpfWZvcihvLmluc2VydE5vZGVzKGUsbiksZT0wO2U8aTtlKyspcltlXS5yZW1vdmUoKTtyZXR1cm4hMH1nZXROb2Rlcygpe3ZhciBlPXRoaXMuX2NhY2hlZE5vZGVzO2lmKGUhPT1udWxsKXJldHVybiBlO3ZhciBuPXRoaXMuX25vZGVzO2U9W107Zm9yKGxldCByIG9mIG4pbj1JdChyKSxuIT09bnVsbCYmZS5wdXNoKG4pO3JldHVybiBQcygpfHwodGhpcy5fY2FjaGVkTm9kZXM9ZSksZX1nZXRUZXh0Q29udGVudCgpe2xldCBlPXRoaXMuZ2V0Tm9kZXMoKSxuPSIiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKW4rPWVbcl0uZ2V0VGV4dENvbnRlbnQoKTtyZXR1cm4gbn19ZnVuY3Rpb24gZ2UodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBjbH1mdW5jdGlvbiB5bSh0KXtsZXRbZSwsbl09d0UodCk7dD1uLmdldENoaWxkcmVuKCk7bGV0IHI9dC5sZW5ndGg7dmFyIGk9dFswXS5nZXRDaGlsZHJlbigpLmxlbmd0aDtsZXQgbz1BcnJheShyKTtmb3IodmFyIGw9MDtsPHI7bCsrKW9bbF09QXJyYXkoaSk7Zm9yKGk9MDtpPHI7aSsrKXtsPXRbaV0uZ2V0Q2hpbGRyZW4oKTtsZXQgcz0wO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtmb3IoO29baV1bc107KXMrKztsZXQgdT1sW2FdLGM9dS5fX3Jvd1NwYW58fDEsZD11Ll9fY29sU3Bhbnx8MTtmb3IobGV0IGY9MDtmPGM7ZisrKWZvcihsZXQgaD0wO2g8ZDtoKyspb1tpK2ZdW3MraF09dTtpZihlPT09dSlyZXR1cm57Y29sU3BhbjpkLGNvbHVtbkluZGV4OnMscm93SW5kZXg6aSxyb3dTcGFuOmN9O3MrPWR9fXJldHVybiBudWxsfWNsYXNzIE1me2NvbnN0cnVjdG9yKGUsbixyKXt0aGlzLmdyaWRLZXk9ZSx0aGlzLmFuY2hvcj1uLHRoaXMuZm9jdXM9cix0aGlzLmRpcnR5PSExLHRoaXMuX2NhY2hlZE5vZGVzPW51bGwsbi5fc2VsZWN0aW9uPXRoaXMsci5fc2VsZWN0aW9uPXRoaXN9aXMoZSl7cmV0dXJuIHB2KGUpP3RoaXMuZ3JpZEtleT09PWUuZ3JpZEtleSYmdGhpcy5hbmNob3IuaXMoZS5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKGUuZm9jdXMpOiExfXNldChlLG4scil7dGhpcy5kaXJ0eT0hMCx0aGlzLmdyaWRLZXk9ZSx0aGlzLmFuY2hvci5rZXk9bix0aGlzLmZvY3VzLmtleT1yLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE1mKHRoaXMuZ3JpZEtleSx0aGlzLmFuY2hvcix0aGlzLmZvY3VzKX1pc0NvbGxhcHNlZCgpe3JldHVybiExfWlzQmFja3dhcmQoKXtyZXR1cm4gdGhpcy5mb2N1cy5pc0JlZm9yZSh0aGlzLmFuY2hvcil9Z2V0Q2hhcmFjdGVyT2Zmc2V0cygpe3JldHVybiBLYyh0aGlzKX1leHRyYWN0KCl7cmV0dXJuIHRoaXMuZ2V0Tm9kZXMoKX1pbnNlcnRSYXdUZXh0KCl7fWluc2VydFRleHQoKXt9aW5zZXJ0Tm9kZXMoZSxuKXtsZXQgcj10aGlzLmZvY3VzLmdldE5vZGUoKTtyZXR1cm4gbHYoci5zZWxlY3QoMCxyLmdldENoaWxkcmVuU2l6ZSgpKSkuaW5zZXJ0Tm9kZXMoZSxuKX1nZXRTaGFwZSgpe3ZhciBlPUl0KHRoaXMuYW5jaG9yLmtleSk7aWYoZXIoZSl8fEgoMTAzKSxlPXltKGUpLGU9PT1udWxsKXRocm93IEVycm9yKCJnZXRDZWxsUmVjdDogZXhwZWN0ZWQgdG8gZmluZCBBbmNob3JOb2RlIik7dmFyIG49SXQodGhpcy5mb2N1cy5rZXkpO2VyKG4pfHxIKDEwNCk7bGV0IHI9eW0obik7aWYocj09PW51bGwpdGhyb3cgRXJyb3IoImdldENlbGxSZWN0OiBleHBlY3RlZCB0byBmaW5kIGZvY3VzQ2VsbE5vZGUiKTtuPU1hdGgubWluKGUuY29sdW1uSW5kZXgsci5jb2x1bW5JbmRleCk7bGV0IGk9TWF0aC5tYXgoZS5jb2x1bW5JbmRleCxyLmNvbHVtbkluZGV4KSxvPU1hdGgubWluKGUucm93SW5kZXgsci5yb3dJbmRleCk7cmV0dXJuIGU9TWF0aC5tYXgoZS5yb3dJbmRleCxyLnJvd0luZGV4KSx7ZnJvbVg6TWF0aC5taW4obixpKSxmcm9tWTpNYXRoLm1pbihvLGUpLHRvWDpNYXRoLm1heChuLGkpLHRvWTpNYXRoLm1heChvLGUpfX1nZXROb2Rlcygpe2Z1bmN0aW9uIGUodyl7bGV0e2NlbGw6dixzdGFydENvbHVtbjp5LHN0YXJ0Um93Ol99PXc7YT1NYXRoLm1pbihhLHkpLHU9TWF0aC5taW4odSxfKSxjPU1hdGgubWF4KGMseSt2Ll9fY29sU3Bhbi0xKSxkPU1hdGgubWF4KGQsXyt2Ll9fcm93U3Bhbi0xKX12YXIgbj10aGlzLl9jYWNoZWROb2RlcztpZihuIT09bnVsbClyZXR1cm4gbjt2YXIgcj10aGlzLmFuY2hvci5nZXROb2RlKCk7bj10aGlzLmZvY3VzLmdldE5vZGUoKSxyPVJkKHIsZXIpO3ZhciBpPVJkKG4sZXIpO2VyKHIpfHxIKDEwMyksZXIoaSl8fEgoMTA0KSxuPXIuZ2V0UGFyZW50KCksZnUobil8fEgoMTA1KSxuPW4uZ2V0UGFyZW50KCkseHYobil8fEgoMTA2KTtsZXRbbyxsLHNdPV9FKG4scixpKSxhPU1hdGgubWluKGwuc3RhcnRDb2x1bW4scy5zdGFydENvbHVtbiksdT1NYXRoLm1pbihsLnN0YXJ0Um93LHMuc3RhcnRSb3cpLGM9TWF0aC5tYXgobC5zdGFydENvbHVtbitsLmNlbGwuX19jb2xTcGFuLTEscy5zdGFydENvbHVtbitzLmNlbGwuX19jb2xTcGFuLTEpLGQ9TWF0aC5tYXgobC5zdGFydFJvdytsLmNlbGwuX19yb3dTcGFuLTEscy5zdGFydFJvdytzLmNlbGwuX19yb3dTcGFuLTEpO3I9YSxpPXU7Zm9yKHZhciBmPWEsaD11O2E8cnx8dTxpfHxjPmZ8fGQ+aDspe2lmKGE8cil7dmFyIGc9aC1pOy0tcjtmb3IodmFyIG09MDttPD1nO20rKyllKG9baSttXVtyXSl9aWYodTxpKWZvcihnPWYtciwtLWksbT0wO208PWc7bSsrKWUob1tpXVtyK21dKTtpZihjPmYpZm9yKGc9aC1pLGYrPTEsbT0wO208PWc7bSsrKWUob1tpK21dW2ZdKTtpZihkPmgpZm9yKGc9Zi1yLGgrPTEsbT0wO208PWc7bSsrKWUob1toXVtyK21dKX1mb3Iobj1bbl0scj1udWxsLGk9dTtpPD1kO2krKylmb3IoZj1hO2Y8PWM7ZisrKSh7Y2VsbDpofT1vW2ldW2ZdKSxnPWguZ2V0UGFyZW50KCksZnUoZyl8fEgoMTA3KSxnIT09ciYmbi5wdXNoKGcpLG4ucHVzaChoLC4uLk9SKGgpKSxyPWc7cmV0dXJuIFBzKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz1uKSxufWdldFRleHRDb250ZW50KCl7bGV0IGU9dGhpcy5nZXROb2RlcygpLG49IiI7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspbis9ZVtyXS5nZXRUZXh0Q29udGVudCgpO3JldHVybiBufX1mdW5jdGlvbiBwdih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1mfWNsYXNzIGNse2NvbnN0cnVjdG9yKGUsbixyLGkpe3RoaXMuYW5jaG9yPWUsdGhpcy5mb2N1cz1uLHRoaXMuZGlydHk9ITEsdGhpcy5mb3JtYXQ9cix0aGlzLnN0eWxlPWksdGhpcy5fY2FjaGVkTm9kZXM9bnVsbCxlLl9zZWxlY3Rpb249dGhpcyxuLl9zZWxlY3Rpb249dGhpc31pcyhlKXtyZXR1cm4gZ2UoZSk/dGhpcy5hbmNob3IuaXMoZS5hbmNob3IpJiZ0aGlzLmZvY3VzLmlzKGUuZm9jdXMpJiZ0aGlzLmZvcm1hdD09PWUuZm9ybWF0JiZ0aGlzLnN0eWxlPT09ZS5zdHlsZTohMX1pc0JhY2t3YXJkKCl7cmV0dXJuIHRoaXMuZm9jdXMuaXNCZWZvcmUodGhpcy5hbmNob3IpfWlzQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuYW5jaG9yLmlzKHRoaXMuZm9jdXMpfWdldE5vZGVzKCl7dmFyIGU9dGhpcy5fY2FjaGVkTm9kZXM7aWYoZSE9PW51bGwpcmV0dXJuIGU7ZT10aGlzLmFuY2hvcjt2YXIgbj10aGlzLmZvY3VzLHI9ZS5pc0JlZm9yZShuKSxpPXI/ZTpuO3I9cj9uOmUsZT1pLmdldE5vZGUoKSxuPXIuZ2V0Tm9kZSgpO2xldCBvPWkub2Zmc2V0O3JldHVybiBpPXIub2Zmc2V0LEIoZSkmJihyPWUuZ2V0RGVzY2VuZGFudEJ5SW5kZXgobyksZT1yPz9lKSxCKG4pJiYocj1uLmdldERlc2NlbmRhbnRCeUluZGV4KGkpLHIhPT1udWxsJiZyIT09ZSYmbi5nZXRDaGlsZEF0SW5kZXgoaSk9PT1yJiYocj1yLmdldFByZXZpb3VzU2libGluZygpKSxuPXI/P24pLGU9ZS5pcyhuKT9CKGUpJiYwPGUuZ2V0Q2hpbGRyZW5TaXplKCk/W106W2VdOmUuZ2V0Tm9kZXNCZXR3ZWVuKG4pLFBzKCl8fCh0aGlzLl9jYWNoZWROb2Rlcz1lKSxlfXNldFRleHROb2RlUmFuZ2UoZSxuLHIsaSl7emkodGhpcy5hbmNob3IsZS5fX2tleSxuLCJ0ZXh0IiksemkodGhpcy5mb2N1cyxyLl9fa2V5LGksInRleHQiKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsLHRoaXMuZGlydHk9ITB9Z2V0VGV4dENvbnRlbnQoKXtsZXQgZT10aGlzLmdldE5vZGVzKCk7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIiO2xldCBuPWVbMF0scj1lW2UubGVuZ3RoLTFdLGk9dGhpcy5hbmNob3Isbz10aGlzLmZvY3VzLGw9aS5pc0JlZm9yZShvKSxbcyxhXT1LYyh0aGlzKSx1PSIiLGM9ITA7Zm9yKGxldCBkPTA7ZDxlLmxlbmd0aDtkKyspe2xldCBmPWVbZF07aWYoQihmKSYmIWYuaXNJbmxpbmUoKSljfHwodSs9YApgKSxjPSFmLmlzRW1wdHkoKTtlbHNlIGlmKGM9ITEsUShmKSl7bGV0IGg9Zi5nZXRUZXh0Q29udGVudCgpO2Y9PT1uP2Y9PT1yPyhpLnR5cGUhPT0iZWxlbWVudCJ8fG8udHlwZSE9PSJlbGVtZW50Inx8by5vZmZzZXQ9PT1pLm9mZnNldCkmJihoPXM8YT9oLnNsaWNlKHMsYSk6aC5zbGljZShhLHMpKTpoPWw/aC5zbGljZShzKTpoLnNsaWNlKGEpOmY9PT1yJiYoaD1sP2guc2xpY2UoMCxhKTpoLnNsaWNlKDAscykpLHUrPWh9ZWxzZSF0dChmKSYmIWN1KGYpfHxmPT09ciYmdGhpcy5pc0NvbGxhcHNlZCgpfHwodSs9Zi5nZXRUZXh0Q29udGVudCgpKX1yZXR1cm4gdX1hcHBseURPTVJhbmdlKGUpe2xldCBuPXB0KCkscj1uLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbjtpZihlPXlFKGUuc3RhcnRDb250YWluZXIsZS5zdGFydE9mZnNldCxlLmVuZENvbnRhaW5lcixlLmVuZE9mZnNldCxuLHIpLGUhPT1udWxsKXt2YXJbaSxvXT1lO3ppKHRoaXMuYW5jaG9yLGkua2V5LGkub2Zmc2V0LGkudHlwZSksemkodGhpcy5mb2N1cyxvLmtleSxvLm9mZnNldCxvLnR5cGUpLHRoaXMuX2NhY2hlZE5vZGVzPW51bGx9fWNsb25lKCl7bGV0IGU9dGhpcy5hbmNob3Isbj10aGlzLmZvY3VzO3JldHVybiBuZXcgY2wobmV3IEhyKGUua2V5LGUub2Zmc2V0LGUudHlwZSksbmV3IEhyKG4ua2V5LG4ub2Zmc2V0LG4udHlwZSksdGhpcy5mb3JtYXQsdGhpcy5zdHlsZSl9dG9nZ2xlRm9ybWF0KGUpe3RoaXMuZm9ybWF0PUtTKHRoaXMuZm9ybWF0LGUsbnVsbCksdGhpcy5kaXJ0eT0hMH1zZXRTdHlsZShlKXt0aGlzLnN0eWxlPWUsdGhpcy5kaXJ0eT0hMH1oYXNGb3JtYXQoZSl7cmV0dXJuKHRoaXMuZm9ybWF0JkZvW2VdKSE9PTB9aW5zZXJ0UmF3VGV4dChlKXtlPWUuc3BsaXQoLyhccj9cbnxcdCkvKTtsZXQgbj1bXSxyPWUubGVuZ3RoO2ZvcihsZXQgaT0wO2k8cjtpKyspe2xldCBvPWVbaV07bz09PWAKYHx8bz09PWBccgpgP24ucHVzaChtcygpKTpvPT09IgkiP24ucHVzaChQZigpKTpuLnB1c2goTHQobykpfXRoaXMuaW5zZXJ0Tm9kZXMobil9aW5zZXJ0VGV4dChlKXt2YXIgbj10aGlzLmFuY2hvcixyPXRoaXMuZm9jdXMsaT10aGlzLmlzQ29sbGFwc2VkKCl8fG4uaXNCZWZvcmUociksbz10aGlzLmZvcm1hdCxsPXRoaXMuc3R5bGU7aSYmbi50eXBlPT09ImVsZW1lbnQiP0swKG4scixvLGwpOml8fHIudHlwZSE9PSJlbGVtZW50Inx8SzAocixuLG8sbCk7dmFyIHM9dGhpcy5nZXROb2RlcygpLGE9cy5sZW5ndGgsdT1pP3I6bjtyPShpP246cikub2Zmc2V0O3ZhciBjPXUub2Zmc2V0O249c1swXSxRKG4pfHxIKDI2KSxpPW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg7dmFyIGQ9bi5nZXRQYXJlbnRPclRocm93KCksZj1zW2EtMV07aWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09aSYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRBZnRlcigpfHwhZC5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSYmbi5nZXROZXh0U2libGluZygpPT09bnVsbCkpe3ZhciBoPW4uZ2V0TmV4dFNpYmxpbmcoKTtpZihRKGgpJiZoLmNhbkluc2VydFRleHRCZWZvcmUoKSYmIWltKGgpfHwoaD1MdCgpLGguc2V0Rm9ybWF0KG8pLGQuY2FuSW5zZXJ0VGV4dEFmdGVyKCk/bi5pbnNlcnRBZnRlcihoKTpkLmluc2VydEFmdGVyKGgpKSxoLnNlbGVjdCgwLDApLG49aCxlIT09IiIpe3RoaXMuaW5zZXJ0VGV4dChlKTtyZXR1cm59fWVsc2UgaWYodGhpcy5pc0NvbGxhcHNlZCgpJiZyPT09MCYmKG4uaXNTZWdtZW50ZWQoKXx8bi5pc1Rva2VuKCl8fCFuLmNhbkluc2VydFRleHRCZWZvcmUoKXx8IWQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZuLmdldFByZXZpb3VzU2libGluZygpPT09bnVsbCkpe2lmKGg9bi5nZXRQcmV2aW91c1NpYmxpbmcoKSwoIVEoaCl8fGltKGgpKSYmKGg9THQoKSxoLnNldEZvcm1hdChvKSxkLmNhbkluc2VydFRleHRCZWZvcmUoKT9uLmluc2VydEJlZm9yZShoKTpkLmluc2VydEJlZm9yZShoKSksaC5zZWxlY3QoKSxuPWgsZSE9PSIiKXt0aGlzLmluc2VydFRleHQoZSk7cmV0dXJufX1lbHNlIGlmKG4uaXNTZWdtZW50ZWQoKSYmciE9PWkpZD1MdChuLmdldFRleHRDb250ZW50KCkpLGQuc2V0Rm9ybWF0KG8pLG4ucmVwbGFjZShkKSxuPWQ7ZWxzZSBpZighKHRoaXMuaXNDb2xsYXBzZWQoKXx8ZT09PSIifHwoaD1mLmdldFBhcmVudCgpLGQuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZkLmNhbkluc2VydFRleHRBZnRlcigpJiYoIUIoaCl8fGguY2FuSW5zZXJ0VGV4dEJlZm9yZSgpJiZoLmNhbkluc2VydFRleHRBZnRlcigpKSkpKXt0aGlzLmluc2VydFRleHQoIiIpLHZFKHRoaXMuYW5jaG9yLHRoaXMuZm9jdXMsbnVsbCksdGhpcy5pbnNlcnRUZXh0KGUpO3JldHVybn1pZihhPT09MSlpZihuLmlzVG9rZW4oKSllPUx0KGUpLGUuc2VsZWN0KCksbi5yZXBsYWNlKGUpO2Vsc2V7aWYocz1uLmdldEZvcm1hdCgpLGE9bi5nZXRTdHlsZSgpLHI9PT1jJiYocyE9PW98fGEhPT1sKSlpZihuLmdldFRleHRDb250ZW50KCk9PT0iIiluLnNldEZvcm1hdChvKSxuLnNldFN0eWxlKGwpO2Vsc2V7cz1MdChlKSxzLnNldEZvcm1hdChvKSxzLnNldFN0eWxlKGwpLHMuc2VsZWN0KCkscj09PTA/bi5pbnNlcnRCZWZvcmUocywhMSk6KFthXT1uLnNwbGl0VGV4dChyKSxhLmluc2VydEFmdGVyKHMsITEpKSxzLmlzQ29tcG9zaW5nKCkmJnRoaXMuYW5jaG9yLnR5cGU9PT0idGV4dCImJih0aGlzLmFuY2hvci5vZmZzZXQtPWUubGVuZ3RoKTtyZXR1cm59bj1uLnNwbGljZVRleHQocixjLXIsZSwhMCksbi5nZXRUZXh0Q29udGVudCgpPT09IiI/bi5yZW1vdmUoKTp0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYobi5pc0NvbXBvc2luZygpP3RoaXMuYW5jaG9yLm9mZnNldC09ZS5sZW5ndGg6KHRoaXMuZm9ybWF0PXMsdGhpcy5zdHlsZT1hKSl9ZWxzZXtpZihvPW5ldyBTZXQoWy4uLm4uZ2V0UGFyZW50S2V5cygpLC4uLmYuZ2V0UGFyZW50S2V5cygpXSksaD1CKG4pP246bi5nZXRQYXJlbnRPclRocm93KCksbD1CKGYpP2Y6Zi5nZXRQYXJlbnRPclRocm93KCksZD1mLCFoLmlzKGwpJiZsLmlzSW5saW5lKCkpZG8gZD1sLGw9bC5nZXRQYXJlbnRPclRocm93KCk7d2hpbGUobC5pc0lubGluZSgpKTtpZih1LnR5cGU9PT0idGV4dCImJihjIT09MHx8Zi5nZXRUZXh0Q29udGVudCgpPT09IiIpfHx1LnR5cGU9PT0iZWxlbWVudCImJmYuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKTxjKWlmKFEoZikmJiFmLmlzVG9rZW4oKSYmYyE9PWYuZ2V0VGV4dENvbnRlbnRTaXplKCkpe2lmKGYuaXNTZWdtZW50ZWQoKSl7dmFyIGc9THQoZi5nZXRUZXh0Q29udGVudCgpKTtmLnJlcGxhY2UoZyksZj1nfW1uKHUuZ2V0Tm9kZSgpKXx8KGY9Zi5zcGxpY2VUZXh0KDAsYywiIikpLG8uYWRkKGYuX19rZXkpfWVsc2UgdT1mLmdldFBhcmVudE9yVGhyb3coKSx1LmNhbkJlRW1wdHkoKXx8dS5nZXRDaGlsZHJlblNpemUoKSE9PTE/Zi5yZW1vdmUoKTp1LnJlbW92ZSgpO2Vsc2Ugby5hZGQoZi5fX2tleSk7Zm9yKHU9bC5nZXRDaGlsZHJlbigpLGM9bmV3IFNldChzKSxmPWguaXMobCksaD1oLmlzSW5saW5lKCkmJm4uZ2V0TmV4dFNpYmxpbmcoKT09PW51bGw/aDpuLGc9dS5sZW5ndGgtMTswPD1nO2ctLSl7bGV0IG09dVtnXTtpZihtLmlzKG4pfHxCKG0pJiZtLmlzUGFyZW50T2YobikpYnJlYWs7bS5pc0F0dGFjaGVkKCkmJighYy5oYXMobSl8fG0uaXMoZCk/Znx8aC5pbnNlcnRBZnRlcihtLCExKTptLnJlbW92ZSgpKX1pZighZilmb3IodT1sLGM9bnVsbDt1IT09bnVsbDspbD11LmdldENoaWxkcmVuKCksZj1sLmxlbmd0aCwoZj09PTB8fGxbZi0xXS5pcyhjKSkmJihvLmRlbGV0ZSh1Ll9fa2V5KSxjPXUpLHU9dS5nZXRQYXJlbnQoKTtmb3Iobi5pc1Rva2VuKCk/cj09PWk/bi5zZWxlY3QoKTooZT1MdChlKSxlLnNlbGVjdCgpLG4ucmVwbGFjZShlKSk6KG49bi5zcGxpY2VUZXh0KHIsaS1yLGUsITApLG4uZ2V0VGV4dENvbnRlbnQoKT09PSIiP24ucmVtb3ZlKCk6bi5pc0NvbXBvc2luZygpJiZ0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYodGhpcy5hbmNob3Iub2Zmc2V0LT1lLmxlbmd0aCkpLGU9MTtlPGE7ZSsrKW49c1tlXSxvLmhhcyhuLl9fa2V5KXx8bi5yZW1vdmUoKX19cmVtb3ZlVGV4dCgpe3RoaXMuaW5zZXJ0VGV4dCgiIil9Zm9ybWF0VGV4dChlKXtpZih0aGlzLmlzQ29sbGFwc2VkKCkpdGhpcy50b2dnbGVGb3JtYXQoZSksS3QobnVsbCk7ZWxzZXt2YXIgbj10aGlzLmdldE5vZGVzKCkscj1bXTtmb3IodmFyIGkgb2YgbilRKGkpJiZyLnB1c2goaSk7dmFyIG89ci5sZW5ndGg7aWYobz09PTApdGhpcy50b2dnbGVGb3JtYXQoZSksS3QobnVsbCk7ZWxzZXtpPXRoaXMuYW5jaG9yO3ZhciBsPXRoaXMuZm9jdXMscz10aGlzLmlzQmFja3dhcmQoKTtuPXM/bDppLGk9cz9pOmw7dmFyIGE9MCx1PXJbMF07aWYobD1uLnR5cGU9PT0iZWxlbWVudCI/MDpuLm9mZnNldCxuLnR5cGU9PT0idGV4dCImJmw9PT11LmdldFRleHRDb250ZW50U2l6ZSgpJiYoYT0xLHU9clsxXSxsPTApLHUhPW51bGwpe3M9dS5nZXRGb3JtYXRGbGFncyhlLG51bGwpO3ZhciBjPW8tMSxkPXJbY107aWYobz1pLnR5cGU9PT0idGV4dCI/aS5vZmZzZXQ6ZC5nZXRUZXh0Q29udGVudFNpemUoKSx1LmlzKGQpKWwhPT1vJiYobD09PTAmJm89PT11LmdldFRleHRDb250ZW50U2l6ZSgpP3Uuc2V0Rm9ybWF0KHMpOihlPXUuc3BsaXRUZXh0KGwsbyksZT1sPT09MD9lWzBdOmVbMV0sZS5zZXRGb3JtYXQocyksbi50eXBlPT09InRleHQiJiZuLnNldChlLl9fa2V5LDAsInRleHQiKSxpLnR5cGU9PT0idGV4dCImJmkuc2V0KGUuX19rZXksby1sLCJ0ZXh0IikpLHRoaXMuZm9ybWF0PXMpO2Vsc2V7bCE9PTAmJihbLHVdPXUuc3BsaXRUZXh0KGwpLGw9MCksdS5zZXRGb3JtYXQocyk7dmFyIGY9ZC5nZXRGb3JtYXRGbGFncyhlLHMpO2ZvcigwPG8mJihvIT09ZC5nZXRUZXh0Q29udGVudFNpemUoKSYmKFtkXT1kLnNwbGl0VGV4dChvKSksZC5zZXRGb3JtYXQoZikpLGErPTE7YTxjO2ErKyl7bGV0IGg9clthXTtpZighaC5pc1Rva2VuKCkpe2xldCBnPWguZ2V0Rm9ybWF0RmxhZ3MoZSxmKTtoLnNldEZvcm1hdChnKX19bi50eXBlPT09InRleHQiJiZuLnNldCh1Ll9fa2V5LGwsInRleHQiKSxpLnR5cGU9PT0idGV4dCImJmkuc2V0KGQuX19rZXksbywidGV4dCIpLHRoaXMuZm9ybWF0PXN8Zn19fX19aW5zZXJ0Tm9kZXMoZSxuKXtpZighdGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmlzQmFja3dhcmQoKT90aGlzLmFuY2hvcjp0aGlzLmZvY3VzLGk9ci5nZXROb2RlKCkuZ2V0TmV4dFNpYmxpbmcoKTtpZihpPWk/aS5nZXRLZXkoKTpudWxsLHI9KHI9ci5nZXROb2RlKCkuZ2V0UHJldmlvdXNTaWJsaW5nKCkpP3IuZ2V0S2V5KCk6bnVsbCx0aGlzLnJlbW92ZVRleHQoKSx0aGlzLmlzQ29sbGFwc2VkKCkmJnRoaXMuZm9jdXMudHlwZT09PSJlbGVtZW50Iil7aWYodGhpcy5mb2N1cy5rZXk9PT1pJiZ0aGlzLmZvY3VzLm9mZnNldD09PTApe3ZhciBvPUx0KCk7dGhpcy5mb2N1cy5nZXROb2RlKCkuaW5zZXJ0QmVmb3JlKG8pfWVsc2UgdGhpcy5mb2N1cy5rZXk9PT1yJiZ0aGlzLmZvY3VzLm9mZnNldD09PXRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmdldENoaWxkcmVuU2l6ZSgpJiYobz1MdCgpLHRoaXMuZm9jdXMuZ2V0Tm9kZSgpLmluc2VydEFmdGVyKG8pKTtvJiYodGhpcy5mb2N1cy5zZXQoby5fX2tleSwwLCJ0ZXh0IiksdGhpcy5hbmNob3Iuc2V0KG8uX19rZXksMCwidGV4dCIpKX19bz10aGlzLmFuY2hvcixyPW8ub2Zmc2V0O3ZhciBsPW8uZ2V0Tm9kZSgpO2k9bCxvLnR5cGU9PT0iZWxlbWVudCImJihvPW8uZ2V0Tm9kZSgpLGk9by5nZXRDaGlsZEF0SW5kZXgoci0xKSxpPWk9PT1udWxsP286aSksbz1bXTt2YXIgcz1sLmdldE5leHRTaWJsaW5ncygpLGE9X3IobCk/bnVsbDpsLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKTtpZihRKGwpKWlmKGk9bC5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxyPT09MCYmaSE9PTApaT1sLmdldFByZXZpb3VzU2libGluZygpLGk9aSE9PW51bGw/aTpsLmdldFBhcmVudE9yVGhyb3coKSxvLnB1c2gobCk7ZWxzZSBpZihyPT09aSlpPWw7ZWxzZXtpZihsLmlzVG9rZW4oKSlyZXR1cm4hMTtbaSxsXT1sLnNwbGl0VGV4dChyKSxvLnB1c2gobCl9bD1pLG8ucHVzaCguLi5zKSxzPWVbMF07dmFyIHU9ITEsYz1udWxsO2ZvcihsZXQgZz0wO2c8ZS5sZW5ndGg7ZysrKXt2YXIgZD1lW2ddO2lmKF9yKGkpfHx0dChpKXx8IUIoZCl8fGQuaXNJbmxpbmUoKSl1JiYhQihkKSYmIXR0KGQpJiZfcihpLmdldFBhcmVudCgpKSYmSCgyOCk7ZWxzZXtpZihkLmlzKHMpKXtpZihCKGkpJiZpLmlzRW1wdHkoKSYmaS5jYW5SZXBsYWNlV2l0aChkKSl7aS5yZXBsYWNlKGQpLGk9ZCx1PSEwO2NvbnRpbnVlfWlmKHU9ZC5nZXRGaXJzdERlc2NlbmRhbnQoKSxaUyh1KSl7Zm9yKHZhciBmPXUuZ2V0UGFyZW50T3JUaHJvdygpO2YuaXNJbmxpbmUoKTspZj1mLmdldFBhcmVudE9yVGhyb3coKTtpZihjPWYuZ2V0Q2hpbGRyZW4oKSx1PWMubGVuZ3RoLEIoaSkpe3ZhciBoPWkuZ2V0Rmlyc3RDaGlsZCgpO2ZvcihsZXQgbT0wO208dTttKyspe2xldCB3PWNbbV07aD09PW51bGw/aS5hcHBlbmQodyk6aC5pbnNlcnRBZnRlcih3KSxoPXd9fWVsc2V7Zm9yKGg9dS0xOzA8PWg7aC0tKWkuaW5zZXJ0QWZ0ZXIoY1toXSk7aT1pLmdldFBhcmVudE9yVGhyb3coKX1pZihjPWNbdS0xXSxmLnJlbW92ZSgpLHU9ITAsZi5pcyhkKSljb250aW51ZX19UShpKSYmKGE9PT1udWxsJiZIKDI3KSxpPWEpfXU9ITEsQihpKSYmIWkuaXNJbmxpbmUoKT8oYz1kLHR0KGQpJiYhZC5pc0lubGluZSgpP2k9ZS5sZW5ndGg9PT0xJiZpLmNhbkJlRW1wdHkoKSYmaS5pc0VtcHR5KCk/aS5pbnNlcnRCZWZvcmUoZCwhMSk6aS5pbnNlcnRBZnRlcihkLCExKTpCKGQpPyhkLmNhbkJlRW1wdHkoKXx8IWQuaXNFbXB0eSgpKSYmKG1uKGkpPyhmPWkuZ2V0Q2hpbGRBdEluZGV4KHIpLGYhPT1udWxsP2YuaW5zZXJ0QmVmb3JlKGQpOmkuYXBwZW5kKGQpLGk9ZCk6ZC5pc0lubGluZSgpPyhpLmFwcGVuZChkKSxpPWQpOmk9aS5pbnNlcnRBZnRlcihkLCExKSk6KGY9aS5nZXRGaXJzdENoaWxkKCksZiE9PW51bGw/Zi5pbnNlcnRCZWZvcmUoZCk6aS5hcHBlbmQoZCksaT1kKSk6IUIoZCl8fEIoZCkmJmQuaXNJbmxpbmUoKXx8dHQoaSkmJiFpLmlzSW5saW5lKCk/KGM9ZCxnZSh0aGlzKSYmdHQoZCkmJihCKGkpfHxRKGkpKSYmIWQuaXNJbmxpbmUoKT8oUShpKT8oZj1pLmdldFBhcmVudE9yVGhyb3coKSxbaV09aS5zcGxpdFRleHQociksaT1pLmdldEluZGV4V2l0aGluUGFyZW50KCkrMSk6KGY9aSxpPXIpLFssaV09bkUoZixpKSxpPWkuaW5zZXJ0QmVmb3JlKGQpKTppPWkuaW5zZXJ0QWZ0ZXIoZCwhMSkpOihkPWkuZ2V0UGFyZW50T3JUaHJvdygpLGN1KGkpJiZpLnJlbW92ZSgpLGk9ZCxnLS0pfWlmKG4mJihRKGwpP2wuc2VsZWN0KCk6KGU9aS5nZXRQcmV2aW91c1NpYmxpbmcoKSxRKGUpP2Uuc2VsZWN0KCk6KGU9aS5nZXRJbmRleFdpdGhpblBhcmVudCgpLGkuZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdChlLGUpKSkpLEIoaSkpe2lmKGU9UShjKT9jOkIoYykmJmMuaXNJbmxpbmUoKT9jLmdldExhc3REZXNjZW5kYW50KCk6aS5nZXRMYXN0RGVzY2VuZGFudCgpLG58fChlPT09bnVsbD9pLnNlbGVjdCgpOlEoZSk/ZS5nZXRUZXh0Q29udGVudCgpPT09IiI/ZS5zZWxlY3RQcmV2aW91cygpOmUuc2VsZWN0KCk6ZS5zZWxlY3ROZXh0KCkpLG8ubGVuZ3RoIT09MClmb3Iobj1pLGU9by5sZW5ndGgtMTswPD1lO2UtLSlyPW9bZV0sYT1yLmdldFBhcmVudE9yVGhyb3coKSwhQihpKXx8eG0ocil8fHR0KHIpJiYoIXIuaXNJbmxpbmUoKXx8ci5pc0lzb2xhdGVkKCkpP0IoaSl8fHhtKHIpP0IocikmJiFyLmNhbkluc2VydEFmdGVyKGkpPyhsPWEuY29uc3RydWN0b3IuY2xvbmUoYSksQihsKXx8SCgyOSksbC5hcHBlbmQociksaS5pbnNlcnRBZnRlcihsKSk6aS5pbnNlcnRBZnRlcihyKTooaS5pbnNlcnRCZWZvcmUociksaT1yKToobj09PWk/aS5hcHBlbmQocik6aS5pbnNlcnRCZWZvcmUociksaT1yKSxhLmlzRW1wdHkoKSYmIWEuY2FuQmVFbXB0eSgpJiZhLnJlbW92ZSgpfWVsc2Ugbnx8KFEoaSk/aS5zZWxlY3QoKToobj1pLmdldFBhcmVudE9yVGhyb3coKSxlPWkuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLG4uc2VsZWN0KGUsZSkpKTtyZXR1cm4hMH1pbnNlcnRQYXJhZ3JhcGgoKXt0aGlzLmlzQ29sbGFwc2VkKCl8fHRoaXMucmVtb3ZlVGV4dCgpO3ZhciBlPXRoaXMuYW5jaG9yLG49ZS5vZmZzZXQscj1bXTtpZihlLnR5cGU9PT0idGV4dCIpe3ZhciBpPWUuZ2V0Tm9kZSgpLG89aS5nZXROZXh0U2libGluZ3MoKS5yZXZlcnNlKCksbD1pLmdldFBhcmVudE9yVGhyb3coKSxzPWwuaXNJbmxpbmUoKSxhPXM/bC5nZXRUZXh0Q29udGVudFNpemUoKTppLmdldFRleHRDb250ZW50U2l6ZSgpO249PT0wP28ucHVzaChpKToocyYmKHI9bC5nZXROZXh0U2libGluZ3MoKSksbj09PWF8fHMmJm49PT1pLmdldFRleHRDb250ZW50U2l6ZSgpfHwoWyxpXT1pLnNwbGl0VGV4dChuKSxvLnB1c2goaSkpKX1lbHNle2lmKGw9ZS5nZXROb2RlKCksX3IobCkpe289Sm8oKSxyPWwuZ2V0Q2hpbGRBdEluZGV4KG4pLG8uc2VsZWN0KCksciE9PW51bGw/ci5pbnNlcnRCZWZvcmUobywhMSk6bC5hcHBlbmQobyk7cmV0dXJufW89bC5nZXRDaGlsZHJlbigpLnNsaWNlKG4pLnJldmVyc2UoKX1pZihpPW8ubGVuZ3RoLG49PT0wJiYwPGkmJmwuaXNJbmxpbmUoKSl7aWYocj1sLmdldFBhcmVudE9yVGhyb3coKSxvPXIuaW5zZXJ0TmV3QWZ0ZXIodGhpcywhMSksQihvKSlmb3Iocj1yLmdldENoaWxkcmVuKCksbD0wO2w8ci5sZW5ndGg7bCsrKW8uYXBwZW5kKHJbbF0pfWVsc2UgaWYocz1sLmluc2VydE5ld0FmdGVyKHRoaXMsITEpLHM9PT1udWxsKXRoaXMuaW5zZXJ0TGluZUJyZWFrKCk7ZWxzZSBpZihCKHMpKWlmKGE9bC5nZXRGaXJzdENoaWxkKCksbj09PTAmJihsLmlzKGUuZ2V0Tm9kZSgpKXx8YSYmYS5pcyhlLmdldE5vZGUoKSkpJiYwPGkpbC5pbnNlcnRCZWZvcmUocyk7ZWxzZXtpZihsPW51bGwsbj1yLmxlbmd0aCxlPXMuZ2V0UGFyZW50T3JUaHJvdygpLDA8bilmb3IoYT0wO2E8bjthKyspZS5hcHBlbmQoclthXSk7aWYoaSE9PTApZm9yKHI9MDtyPGk7cisrKW49b1tyXSxsPT09bnVsbD9zLmFwcGVuZChuKTpsLmluc2VydEJlZm9yZShuKSxsPW47cy5jYW5CZUVtcHR5KCl8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wP3Muc2VsZWN0U3RhcnQoKToocy5zZWxlY3RQcmV2aW91cygpLHMucmVtb3ZlKCkpfX1pbnNlcnRMaW5lQnJlYWsoZSl7bGV0IG49bXMoKTt2YXIgcj10aGlzLmFuY2hvcjtyLnR5cGU9PT0iZWxlbWVudCImJihyPXIuZ2V0Tm9kZSgpLG1uKHIpJiZ0aGlzLmluc2VydFBhcmFncmFwaCgpKSxlP3RoaXMuaW5zZXJ0Tm9kZXMoW25dLCEwKTp0aGlzLmluc2VydE5vZGVzKFtuXSkmJm4uc2VsZWN0TmV4dCgwLDApfWdldENoYXJhY3Rlck9mZnNldHMoKXtyZXR1cm4gS2ModGhpcyl9ZXh0cmFjdCgpe3ZhciBlPXRoaXMuZ2V0Tm9kZXMoKSxuPWUubGVuZ3RoLHI9bi0xLGk9dGhpcy5hbmNob3I7bGV0IG89dGhpcy5mb2N1czt2YXIgbD1lWzBdO2xldCBzPWVbcl0sW2EsdV09S2ModGhpcyk7cmV0dXJuIG49PT0wP1tdOm49PT0xP1EobCkmJiF0aGlzLmlzQ29sbGFwc2VkKCk/KGU9YT51P3U6YSxyPWwuc3BsaXRUZXh0KGUsYT51P2E6dSksZT1lPT09MD9yWzBdOnJbMV0sZSE9bnVsbD9bZV06W10pOltsXToobj1pLmlzQmVmb3JlKG8pLFEobCkmJihpPW4/YTp1LGk9PT1sLmdldFRleHRDb250ZW50U2l6ZSgpP2Uuc2hpZnQoKTppIT09MCYmKFssbF09bC5zcGxpdFRleHQoaSksZVswXT1sKSksUShzKSYmKGw9cy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxuPW4/dTphLG49PT0wP2UucG9wKCk6biE9PWwmJihbc109cy5zcGxpdFRleHQobiksZVtyXT1zKSksZSl9bW9kaWZ5KGUsbixyKXt2YXIgaT10aGlzLmZvY3VzLG89dGhpcy5hbmNob3IsbD1lPT09Im1vdmUiLHM9b20oaSxuKTtpZih0dChzKSYmIXMuaXNJc29sYXRlZCgpKWwmJnMuaXNLZXlib2FyZFNlbGVjdGFibGUoKT8obj1fbSgpLG4uYWRkKHMuX19rZXkpLFZyKG4pKTooZT1uP3MuZ2V0UHJldmlvdXNTaWJsaW5nKCk6cy5nZXROZXh0U2libGluZygpLFEoZSk/KHM9ZS5fX2tleSxuPW4/ZS5nZXRUZXh0Q29udGVudCgpLmxlbmd0aDowLGkuc2V0KHMsbiwidGV4dCIpLGwmJm8uc2V0KHMsbiwidGV4dCIpKToocj1zLmdldFBhcmVudE9yVGhyb3coKSxCKGUpPyhyPWUuX19rZXkscz1uP2UuZ2V0Q2hpbGRyZW5TaXplKCk6MCk6KHM9cy5nZXRJbmRleFdpdGhpblBhcmVudCgpLHI9ci5fX2tleSxufHxzKyspLGkuc2V0KHIscywiZWxlbWVudCIpLGwmJm8uc2V0KHIscywiZWxlbWVudCIpKSk7ZWxzZSBpZihvPXB0KCksaT1KcihvLl93aW5kb3cpKXt2YXIgYT1vLl9ibG9ja0N1cnNvckVsZW1lbnQsdT1vLl9yb290RWxlbWVudDtpZih1PT09bnVsbHx8YT09PW51bGx8fCFCKHMpfHxzLmlzSW5saW5lKCl8fHMuY2FuQmVFbXB0eSgpfHxsbShhLG8sdSksaS5tb2RpZnkoZSxuPyJiYWNrd2FyZCI6ImZvcndhcmQiLHIpLDA8aS5yYW5nZUNvdW50JiYocz1pLmdldFJhbmdlQXQoMCksbz10aGlzLmFuY2hvci5nZXROb2RlKCksbz1tbihvKT9vOmVFKG8pLHRoaXMuYXBwbHlET01SYW5nZShzKSx0aGlzLmRpcnR5PSEwLCFsKSl7Zm9yKGw9dGhpcy5nZXROb2RlcygpLGU9W10scj0hMSxhPTA7YTxsLmxlbmd0aDthKyspdT1sW2FdLE5kKHUsbyk/ZS5wdXNoKHUpOnI9ITA7ciYmMDxlLmxlbmd0aCYmKG4/KG49ZVswXSxCKG4pP24uc2VsZWN0U3RhcnQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RTdGFydCgpKToobj1lW2UubGVuZ3RoLTFdLEIobik/bi5zZWxlY3RFbmQoKTpuLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3RFbmQoKSkpLChpLmFuY2hvck5vZGUhPT1zLnN0YXJ0Q29udGFpbmVyfHxpLmFuY2hvck9mZnNldCE9PXMuc3RhcnRPZmZzZXQpJiYobj10aGlzLmZvY3VzLGw9dGhpcy5hbmNob3IsaT1sLmtleSxzPWwub2Zmc2V0LG89bC50eXBlLHppKGwsbi5rZXksbi5vZmZzZXQsbi50eXBlKSx6aShuLGkscyxvKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsKX19fWRlbGV0ZUNoYXJhY3RlcihlKXtsZXQgbj10aGlzLmlzQ29sbGFwc2VkKCk7aWYodGhpcy5pc0NvbGxhcHNlZCgpKXt2YXIgcj10aGlzLmFuY2hvcixpPXRoaXMuZm9jdXMsbz1yLmdldE5vZGUoKTtpZighZSYmKHIudHlwZT09PSJlbGVtZW50IiYmQihvKSYmci5vZmZzZXQ9PT1vLmdldENoaWxkcmVuU2l6ZSgpfHxyLnR5cGU9PT0idGV4dCImJnIub2Zmc2V0PT09by5nZXRUZXh0Q29udGVudFNpemUoKSkpe3ZhciBsPW8uZ2V0UGFyZW50KCk7aWYobD1vLmdldE5leHRTaWJsaW5nKCl8fChsPT09bnVsbD9udWxsOmwuZ2V0TmV4dFNpYmxpbmcoKSksQihsKSYmbC5pc1NoYWRvd1Jvb3QoKSlyZXR1cm59aWYobD1vbShpLGUpLHR0KGwpJiYhbC5pc0lzb2xhdGVkKCkpe2wuaXNLZXlib2FyZFNlbGVjdGFibGUoKSYmQihvKSYmby5nZXRDaGlsZHJlblNpemUoKT09PTA/KG8ucmVtb3ZlKCksZT1fbSgpLGUuYWRkKGwuX19rZXkpLFZyKGUpKToobC5yZW1vdmUoKSxwdCgpLmRpc3BhdGNoQ29tbWFuZChrZix2b2lkIDApKTtyZXR1cm59aWYoIWUmJkIobCkmJkIobykmJm8uaXNFbXB0eSgpKXtvLnJlbW92ZSgpLGwuc2VsZWN0U3RhcnQoKTtyZXR1cm59aWYodGhpcy5tb2RpZnkoImV4dGVuZCIsZSwiY2hhcmFjdGVyIiksdGhpcy5pc0NvbGxhcHNlZCgpKXtpZihlJiZyLm9mZnNldD09PTAmJihyLnR5cGU9PT0iZWxlbWVudCI/ci5nZXROb2RlKCk6ci5nZXROb2RlKCkuZ2V0UGFyZW50T3JUaHJvdygpKS5jb2xsYXBzZUF0U3RhcnQodGhpcykpcmV0dXJufWVsc2V7aWYobD1pLnR5cGU9PT0idGV4dCI/aS5nZXROb2RlKCk6bnVsbCxvPXIudHlwZT09PSJ0ZXh0Ij9yLmdldE5vZGUoKTpudWxsLGwhPT1udWxsJiZsLmlzU2VnbWVudGVkKCkpe2lmKHI9aS5vZmZzZXQsaT1sLmdldFRleHRDb250ZW50U2l6ZSgpLGwuaXMobyl8fGUmJnIhPT1pfHwhZSYmciE9PTApe0cwKGwsZSxyKTtyZXR1cm59fWVsc2UgaWYobyE9PW51bGwmJm8uaXNTZWdtZW50ZWQoKSYmKHI9ci5vZmZzZXQsaT1vLmdldFRleHRDb250ZW50U2l6ZSgpLG8uaXMobCl8fGUmJnIhPT0wfHwhZSYmciE9PWkpKXtHMChvLGUscik7cmV0dXJufWlmKG89dGhpcy5hbmNob3IsbD10aGlzLmZvY3VzLHI9by5nZXROb2RlKCksaT1sLmdldE5vZGUoKSxyPT09aSYmby50eXBlPT09InRleHQiJiZsLnR5cGU9PT0idGV4dCIpe3ZhciBzPW8ub2Zmc2V0LGE9bC5vZmZzZXQ7bGV0IHU9czxhO2k9dT9zOmEsYT11P2E6cyxzPWEtMSxpIT09cyYmKHI9ci5nZXRUZXh0Q29udGVudCgpLnNsaWNlKGksYSksSlMocil8fChlP2wub2Zmc2V0PXM6by5vZmZzZXQ9cykpfX19dGhpcy5yZW1vdmVUZXh0KCksZSYmIW4mJnRoaXMuaXNDb2xsYXBzZWQoKSYmdGhpcy5hbmNob3IudHlwZT09PSJlbGVtZW50IiYmdGhpcy5hbmNob3Iub2Zmc2V0PT09MCYmKGU9dGhpcy5hbmNob3IuZ2V0Tm9kZSgpLGUuaXNFbXB0eSgpJiZtbihlLmdldFBhcmVudCgpKSYmZS5nZXRJbmRleFdpdGhpblBhcmVudCgpPT09MCYmZS5jb2xsYXBzZUF0U3RhcnQodGhpcykpfWRlbGV0ZUxpbmUoZSl7dGhpcy5pc0NvbGxhcHNlZCgpJiYodGhpcy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmdGhpcy5tb2RpZnkoImV4dGVuZCIsZSwibGluZWJvdW5kYXJ5IiksKGU/dGhpcy5mb2N1czp0aGlzLmFuY2hvcikub2Zmc2V0PT09MCYmdGhpcy5tb2RpZnkoImV4dGVuZCIsZSwiY2hhcmFjdGVyIikpLHRoaXMucmVtb3ZlVGV4dCgpfWRlbGV0ZVdvcmQoZSl7dGhpcy5pc0NvbGxhcHNlZCgpJiZ0aGlzLm1vZGlmeSgiZXh0ZW5kIixlLCJ3b3JkIiksdGhpcy5yZW1vdmVUZXh0KCl9fWZ1bmN0aW9uIFJzKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQWZ9ZnVuY3Rpb24gWjAodCl7bGV0IGU9dC5vZmZzZXQ7cmV0dXJuIHQudHlwZT09PSJ0ZXh0Ij9lOih0PXQuZ2V0Tm9kZSgpLGU9PT10LmdldENoaWxkcmVuU2l6ZSgpP3QuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg6MCl9ZnVuY3Rpb24gS2ModCl7bGV0IGU9dC5hbmNob3I7cmV0dXJuIHQ9dC5mb2N1cyxlLnR5cGU9PT0iZWxlbWVudCImJnQudHlwZT09PSJlbGVtZW50IiYmZS5rZXk9PT10LmtleSYmZS5vZmZzZXQ9PT10Lm9mZnNldD9bMCwwXTpbWjAoZSksWjAodCldfWZ1bmN0aW9uIEcwKHQsZSxuKXtsZXQgcj10LmdldFRleHRDb250ZW50KCkuc3BsaXQoLyg/PVxzKS9nKSxpPXIubGVuZ3RoLG89MCxsPTA7Zm9yKGxldCBzPTA7czxpO3MrKyl7bGV0IGE9cltzXSx1PXM9PT1pLTE7aWYobD1vLG8rPWEubGVuZ3RoLGUmJm89PT1ufHxvPm58fHUpe3Iuc3BsaWNlKHMsMSksdSYmKGw9dm9pZCAwKTticmVha319ZT1yLmpvaW4oIiIpLnRyaW0oKSxlPT09IiI/dC5yZW1vdmUoKToodC5zZXRUZXh0Q29udGVudChlKSx0LnNlbGVjdChsLGwpKX1mdW5jdGlvbiBZMCh0LGUsbixyKXt2YXIgaT1lO2lmKHQubm9kZVR5cGU9PT0xKXtsZXQgcz0hMTt2YXIgbz10LmNoaWxkTm9kZXMsbD1vLmxlbmd0aDtpPT09bCYmKHM9ITAsaT1sLTEpO2xldCBhPW9baV07aWYobD0hMSxhPT09ci5fYmxvY2tDdXJzb3JFbGVtZW50PyhhPW9baSsxXSxsPSEwKTpyLl9ibG9ja0N1cnNvckVsZW1lbnQhPT1udWxsJiZpLS0scj1VbChhKSxRKHIpKWk9cz9yLmdldFRleHRDb250ZW50U2l6ZSgpOjA7ZWxzZXtpZihvPVVsKHQpLG89PT1udWxsKXJldHVybiBudWxsO2lmKEIobyk/KHQ9by5nZXRDaGlsZEF0SW5kZXgoaSksKGU9Qih0KSkmJihlPXQuZ2V0UGFyZW50KCksZT1uPT09bnVsbHx8ZT09PW51bGx8fCFlLmNhbkJlRW1wdHkoKXx8ZSE9PW4uZ2V0Tm9kZSgpKSxlJiYobj1zP3QuZ2V0TGFzdERlc2NlbmRhbnQoKTp0LmdldEZpcnN0RGVzY2VuZGFudCgpLG49PT1udWxsPyhvPXQsaT0wKToodD1uLG89Qih0KT90OnQuZ2V0UGFyZW50T3JUaHJvdygpKSksUSh0KT8ocj10LG89bnVsbCxpPXM/dC5nZXRUZXh0Q29udGVudFNpemUoKTowKTp0IT09byYmcyYmIWwmJmkrKyk6KGk9by5nZXRJbmRleFdpdGhpblBhcmVudCgpLGk9ZT09PTAmJnR0KG8pJiZVbCh0KT09PW8/aTppKzEsbz1vLmdldFBhcmVudE9yVGhyb3coKSksQihvKSlyZXR1cm4gbmV3IEhyKG8uX19rZXksaSwiZWxlbWVudCIpfX1lbHNlIHI9VWwodCk7cmV0dXJuIFEocik/bmV3IEhyKHIuX19rZXksaSwidGV4dCIpOm51bGx9ZnVuY3Rpb24gWDAodCxlLG4pe3ZhciByPXQub2Zmc2V0LGk9dC5nZXROb2RlKCk7cj09PTA/KHI9aS5nZXRQcmV2aW91c1NpYmxpbmcoKSxpPWkuZ2V0UGFyZW50KCksZT8obnx8IWUpJiZyPT09bnVsbCYmQihpKSYmaS5pc0lubGluZSgpJiYoZT1pLmdldFByZXZpb3VzU2libGluZygpLFEoZSkmJih0LmtleT1lLl9fa2V5LHQub2Zmc2V0PWUuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgpKTpCKHIpJiYhbiYmci5pc0lubGluZSgpPyh0LmtleT1yLl9fa2V5LHQub2Zmc2V0PXIuZ2V0Q2hpbGRyZW5TaXplKCksdC50eXBlPSJlbGVtZW50Iik6UShyKSYmKHQua2V5PXIuX19rZXksdC5vZmZzZXQ9ci5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCkpOnI9PT1pLmdldFRleHRDb250ZW50KCkubGVuZ3RoJiYocj1pLmdldE5leHRTaWJsaW5nKCksaT1pLmdldFBhcmVudCgpLGUmJkIocikmJnIuaXNJbmxpbmUoKT8odC5rZXk9ci5fX2tleSx0Lm9mZnNldD0wLHQudHlwZT0iZWxlbWVudCIpOihufHxlKSYmcj09PW51bGwmJkIoaSkmJmkuaXNJbmxpbmUoKSYmIWkuY2FuSW5zZXJ0VGV4dEFmdGVyKCkmJihlPWkuZ2V0TmV4dFNpYmxpbmcoKSxRKGUpJiYodC5rZXk9ZS5fX2tleSx0Lm9mZnNldD0wKSkpfWZ1bmN0aW9uIHZFKHQsZSxuKXtpZih0LnR5cGU9PT0idGV4dCImJmUudHlwZT09PSJ0ZXh0Iil7dmFyIHI9dC5pc0JlZm9yZShlKTtsZXQgaT10LmlzKGUpO1gwKHQscixpKSxYMChlLCFyLGkpLGkmJihlLmtleT10LmtleSxlLm9mZnNldD10Lm9mZnNldCxlLnR5cGU9dC50eXBlKSxyPXB0KCksci5pc0NvbXBvc2luZygpJiZyLl9jb21wb3NpdGlvbktleSE9PXQua2V5JiZnZShuKSYmKHI9bi5hbmNob3Isbj1uLmZvY3VzLHppKHQsci5rZXksci5vZmZzZXQsci50eXBlKSx6aShlLG4ua2V5LG4ub2Zmc2V0LG4udHlwZSkpfX1mdW5jdGlvbiB5RSh0LGUsbixyLGksbyl7cmV0dXJuIHQ9PT1udWxsfHxuPT09bnVsbHx8IXp1KGksdCxuKXx8KGU9WTAodCxlLGdlKG8pP28uYW5jaG9yOm51bGwsaSksZT09PW51bGwpfHwocj1ZMChuLHIsZ2Uobyk/by5mb2N1czpudWxsLGkpLHI9PT1udWxsfHxlLnR5cGU9PT0iZWxlbWVudCImJnIudHlwZT09PSJlbGVtZW50IiYmKHQ9VWwodCksbj1VbChuKSx0dCh0KSYmdHQobikpKT9udWxsOih2RShlLHIsbyksW2Uscl0pfWZ1bmN0aW9uIHhtKHQpe3JldHVybiBCKHQpJiYhdC5pc0lubGluZSgpfWZ1bmN0aW9uIHhFKHQsZSxuLHIsaSxvKXtsZXQgbD1RcigpO3JldHVybiB0PW5ldyBjbChuZXcgSHIodCxlLGkpLG5ldyBIcihuLHIsbyksMCwiIiksdC5kaXJ0eT0hMCxsLl9zZWxlY3Rpb249dH1mdW5jdGlvbiBfbSgpe3JldHVybiBuZXcgQWYobmV3IFNldCl9ZnVuY3Rpb24gR1IodCl7bGV0IGU9dC5nZXRFZGl0b3JTdGF0ZSgpLl9zZWxlY3Rpb24sbj1Kcih0Ll93aW5kb3cpO3JldHVybiBScyhlKXx8cHYoZSk/ZS5jbG9uZSgpOm12KGUsbix0KX1mdW5jdGlvbiBtdih0LGUsbil7dmFyIHI9bi5fd2luZG93O2lmKHI9PT1udWxsKXJldHVybiBudWxsO3ZhciBpPXIuZXZlbnQsbz1pP2kudHlwZTp2b2lkIDA7cj1vPT09InNlbGVjdGlvbmNoYW5nZSIsaT0hcm0mJihyfHxvPT09ImJlZm9yZWlucHV0Inx8bz09PSJjb21wb3NpdGlvbnN0YXJ0Inx8bz09PSJjb21wb3NpdGlvbmVuZCJ8fG89PT0iY2xpY2siJiZpJiZpLmRldGFpbD09PTN8fG89PT0iZHJvcCJ8fG89PT12b2lkIDApO2xldCBsO2lmKCFnZSh0KXx8aSl7aWYoZT09PW51bGwpcmV0dXJuIG51bGw7aWYoaT1lLmFuY2hvck5vZGUsbz1lLmZvY3VzTm9kZSxsPWUuYW5jaG9yT2Zmc2V0LGU9ZS5mb2N1c09mZnNldCxyJiZnZSh0KSYmIXp1KG4saSxvKSlyZXR1cm4gdC5jbG9uZSgpfWVsc2UgcmV0dXJuIHQuY2xvbmUoKTtpZihuPXlFKGksbCxvLGUsbix0KSxuPT09bnVsbClyZXR1cm4gbnVsbDtsZXRbcyxhXT1uO3JldHVybiBuZXcgY2wocyxhLGdlKHQpP3QuZm9ybWF0OjAsZ2UodCk/dC5zdHlsZToiIil9ZnVuY3Rpb24gcnQoKXtyZXR1cm4gUXIoKS5fc2VsZWN0aW9ufWZ1bmN0aW9uIE9zKCl7cmV0dXJuIHB0KCkuX2VkaXRvclN0YXRlLl9zZWxlY3Rpb259ZnVuY3Rpb24gUGQodCxlLG4scj0xKXt2YXIgaT10LmFuY2hvcixvPXQuZm9jdXMsbD1pLmdldE5vZGUoKSxzPW8uZ2V0Tm9kZSgpO2lmKGUuaXMobCl8fGUuaXMocykpe2lmKGw9ZS5fX2tleSx0LmlzQ29sbGFwc2VkKCkpZT1pLm9mZnNldCwobjw9ZSYmMDxyfHxuPGUmJjA+cikmJihuPU1hdGgubWF4KDAsZStyKSxpLnNldChsLG4sImVsZW1lbnQiKSxvLnNldChsLG4sImVsZW1lbnQiKSxKMCh0KSk7ZWxzZXtsZXQgdT10LmlzQmFja3dhcmQoKTtzPXU/bzppO3ZhciBhPXMuZ2V0Tm9kZSgpO2k9dT9pOm8sbz1pLmdldE5vZGUoKSxlLmlzKGEpJiYoYT1zLm9mZnNldCwobjw9YSYmMDxyfHxuPGEmJjA+cikmJnMuc2V0KGwsTWF0aC5tYXgoMCxhK3IpLCJlbGVtZW50IikpLGUuaXMobykmJihlPWkub2Zmc2V0LChuPD1lJiYwPHJ8fG48ZSYmMD5yKSYmaS5zZXQobCxNYXRoLm1heCgwLGUrciksImVsZW1lbnQiKSl9SjAodCl9fWZ1bmN0aW9uIEowKHQpe3ZhciBlPXQuYW5jaG9yLG49ZS5vZmZzZXQ7bGV0IHI9dC5mb2N1czt2YXIgaT1yLm9mZnNldCxvPWUuZ2V0Tm9kZSgpLGw9ci5nZXROb2RlKCk7aWYodC5pc0NvbGxhcHNlZCgpKUIobykmJihsPW8uZ2V0Q2hpbGRyZW5TaXplKCksbD0oaT1uPj1sKT9vLmdldENoaWxkQXRJbmRleChsLTEpOm8uZ2V0Q2hpbGRBdEluZGV4KG4pLFEobCkmJihuPTAsaSYmKG49bC5nZXRUZXh0Q29udGVudFNpemUoKSksZS5zZXQobC5fX2tleSxuLCJ0ZXh0Iiksci5zZXQobC5fX2tleSxuLCJ0ZXh0IikpKTtlbHNle2lmKEIobykpe2xldCBzPW8uZ2V0Q2hpbGRyZW5TaXplKCk7bj0odD1uPj1zKT9vLmdldENoaWxkQXRJbmRleChzLTEpOm8uZ2V0Q2hpbGRBdEluZGV4KG4pLFEobikmJihvPTAsdCYmKG89bi5nZXRUZXh0Q29udGVudFNpemUoKSksZS5zZXQobi5fX2tleSxvLCJ0ZXh0IikpfUIobCkmJihuPWwuZ2V0Q2hpbGRyZW5TaXplKCksaT0oZT1pPj1uKT9sLmdldENoaWxkQXRJbmRleChuLTEpOmwuZ2V0Q2hpbGRBdEluZGV4KGkpLFEoaSkmJihsPTAsZSYmKGw9aS5nZXRUZXh0Q29udGVudFNpemUoKSksci5zZXQoaS5fX2tleSxsLCJ0ZXh0IikpKX19ZnVuY3Rpb24gWVIodCxlKXtpZihlPWUuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLHQ9dC5fc2VsZWN0aW9uLGdlKHQpKXt2YXIgbj10LmFuY2hvcjtsZXQgcj10LmZvY3VzLGk7bi50eXBlPT09InRleHQiJiYoaT1uLmdldE5vZGUoKSxpLnNlbGVjdGlvblRyYW5zZm9ybShlLHQpKSxyLnR5cGU9PT0idGV4dCImJihuPXIuZ2V0Tm9kZSgpLGkhPT1uJiZuLnNlbGVjdGlvblRyYW5zZm9ybShlLHQpKX19ZnVuY3Rpb24gQWQodCxlLG4scixpKXtsZXQgbz1udWxsLGw9MCxzPW51bGw7ciE9PW51bGw/KG89ci5fX2tleSxRKHIpPyhsPXIuZ2V0VGV4dENvbnRlbnRTaXplKCkscz0idGV4dCIpOkIocikmJihsPXIuZ2V0Q2hpbGRyZW5TaXplKCkscz0iZWxlbWVudCIpKTppIT09bnVsbCYmKG89aS5fX2tleSxRKGkpP3M9InRleHQiOkIoaSkmJihzPSJlbGVtZW50IikpLG8hPT1udWxsJiZzIT09bnVsbD90LnNldChvLGwscyk6KGw9ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpLGw9PT0tMSYmKGw9bi5nZXRDaGlsZHJlblNpemUoKSksdC5zZXQobi5fX2tleSxsLCJlbGVtZW50IikpfWZ1bmN0aW9uIFEwKHQsZSxuLHIsaSl7dC50eXBlPT09InRleHQiPyh0LmtleT1uLGV8fCh0Lm9mZnNldCs9aSkpOnQub2Zmc2V0PnIuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSYmLS10Lm9mZnNldH1mdW5jdGlvbiBfRSh0LGUsbil7bGV0IHI9W10saT1udWxsLG89bnVsbDt0PXQuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIGw9dFtjXTtmdShsKXx8SCgxMDgpO3ZhciBzPWwuZ2V0Q2hpbGRyZW4oKTtsPTA7Zm9yKGxldCBkIG9mIHMpe2ZvcihlcihkKXx8SCgxMDkpO3JbY10hPT12b2lkIDAmJnJbY11bbF0hPT12b2lkIDA7KWwrKztzPWM7dmFyIGE9bCx1PWQ7bGV0IGY9e2NlbGw6dSxzdGFydENvbHVtbjphLHN0YXJ0Um93OnN9LGg9dS5fX3Jvd1NwYW4sZz11Ll9fY29sU3Bhbjtmb3IobGV0IG09MDttPGg7bSsrKXtyW3MrbV09PT12b2lkIDAmJihyW3MrbV09W10pO2ZvcihsZXQgdz0wO3c8Zzt3KyspcltzK21dW2Erd109Zn1lLmlzKHUpJiYoaT1mKSxuLmlzKHUpJiYobz1mKSxsKz1kLl9fY29sU3Bhbn19cmV0dXJuIGk9PT1udWxsJiZIKDExMCksbz09PW51bGwmJkgoMTExKSxbcixpLG9dfWZ1bmN0aW9uIHdFKHQpe3QgaW5zdGFuY2VvZiB5dnx8KHQgaW5zdGFuY2VvZiBVdT8odD1SZCh0LGVyKSxlcih0KXx8SCgxMTQpKToodD1SZCh0LmdldE5vZGUoKSxlciksZXIodCl8fEgoMTE0KSkpO2xldCBlPXQuZ2V0UGFyZW50KCk7ZnUoZSl8fEgoMTE1KTtsZXQgbj1lLmdldFBhcmVudCgpO3JldHVybiB4dihuKXx8SCgxMTYpLFt0LGUsbl19bGV0IGp0PW51bGwsenQ9bnVsbCxBbj0hMSxGaD0hMSxkdT0wLHEwPXtjaGFyYWN0ZXJEYXRhOiEwLGNoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfTtmdW5jdGlvbiBQcygpe3JldHVybiBBbnx8anQhPT1udWxsJiZqdC5fcmVhZE9ubHl9ZnVuY3Rpb24gaG4oKXtBbiYmSCgxMyl9ZnVuY3Rpb24gUXIoKXtyZXR1cm4ganQ9PT1udWxsJiZIKDE1KSxqdH1mdW5jdGlvbiBwdCgpe3JldHVybiB6dD09PW51bGwmJkgoMTYpLHp0fWZ1bmN0aW9uIGV4KHQsZSxuKXt2YXIgcj1lLl9fdHlwZTtsZXQgaT10Ll9ub2Rlcy5nZXQocik7Zm9yKGk9PT12b2lkIDAmJkgoMzAsciksdD1uLmdldChyKSx0PT09dm9pZCAwJiYodD1BcnJheS5mcm9tKGkudHJhbnNmb3Jtcyksbi5zZXQocix0KSksbj10Lmxlbmd0aCxyPTA7cjxuJiYodFtyXShlKSxlLmlzQXR0YWNoZWQoKSk7cisrKTt9ZnVuY3Rpb24gWFIodCxlKXtlPWUuX2RpcnR5TGVhdmVzLHQ9dC5fbm9kZU1hcDtmb3IobGV0IG4gb2YgZSllPXQuZ2V0KG4pLFEoZSkmJmUuaXNBdHRhY2hlZCgpJiZlLmlzU2ltcGxlVGV4dCgpJiYhZS5pc1VubWVyZ2VhYmxlKCkmJkhTKGUpfWZ1bmN0aW9uIEpSKHQsZSl7bGV0IG49ZS5fZGlydHlMZWF2ZXMscj1lLl9kaXJ0eUVsZW1lbnRzO3Q9dC5fbm9kZU1hcDtsZXQgaT1aaSgpLG89bmV3IE1hcDt2YXIgbD1uO2xldCBzPWwuc2l6ZTtmb3IodmFyIGE9cix1PWEuc2l6ZTswPHN8fDA8dTspe2lmKDA8cyl7ZS5fZGlydHlMZWF2ZXM9bmV3IFNldDtmb3IobGV0IGMgb2YgbClsPXQuZ2V0KGMpLFEobCkmJmwuaXNBdHRhY2hlZCgpJiZsLmlzU2ltcGxlVGV4dCgpJiYhbC5pc1VubWVyZ2VhYmxlKCkmJkhTKGwpLGwhPT12b2lkIDAmJmwhPT12b2lkIDAmJmwuX19rZXkhPT1pJiZsLmlzQXR0YWNoZWQoKSYmZXgoZSxsLG8pLG4uYWRkKGMpO2lmKGw9ZS5fZGlydHlMZWF2ZXMscz1sLnNpemUsMDxzKXtkdSsrO2NvbnRpbnVlfX1lLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LGUuX2RpcnR5RWxlbWVudHM9bmV3IE1hcDtmb3IobGV0IGMgb2YgYSlhPWNbMF0sdT1jWzFdLChhPT09InJvb3QifHx1KSYmKGw9dC5nZXQoYSksbCE9PXZvaWQgMCYmbCE9PXZvaWQgMCYmbC5fX2tleSE9PWkmJmwuaXNBdHRhY2hlZCgpJiZleChlLGwsbyksci5zZXQoYSx1KSk7bD1lLl9kaXJ0eUxlYXZlcyxzPWwuc2l6ZSxhPWUuX2RpcnR5RWxlbWVudHMsdT1hLnNpemUsZHUrK31lLl9kaXJ0eUxlYXZlcz1uLGUuX2RpcnR5RWxlbWVudHM9cn1mdW5jdGlvbiBndih0LGUpe3ZhciBuPXQudHlwZSxyPWUuZ2V0KG4pO2lmKHI9PT12b2lkIDAmJkgoMTcsbiksbj1yLmtsYXNzLHQudHlwZSE9PW4uZ2V0VHlwZSgpJiZIKDE4LG4ubmFtZSksbj1uLmltcG9ydEpTT04odCksdD10LmNoaWxkcmVuLEIobikmJkFycmF5LmlzQXJyYXkodCkpZm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7bGV0IGk9Z3YodFtyXSxlKTtuLmFwcGVuZChpKX1yZXR1cm4gbn1mdW5jdGlvbiB0eCh0LGUpe2xldCBuPWp0LHI9QW4saT16dDtqdD10LEFuPSEwLHp0PW51bGw7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtqdD1uLEFuPXIsenQ9aX19ZnVuY3Rpb24gVW8odCxlKXtsZXQgbj10Ll9wZW5kaW5nRWRpdG9yU3RhdGUscj10Ll9yb290RWxlbWVudCxpPXQuX2hlYWRsZXNzfHxyPT09bnVsbDtpZihuIT09bnVsbCl7dmFyIG89dC5fZWRpdG9yU3RhdGUsbD1vLl9zZWxlY3Rpb24scz1uLl9zZWxlY3Rpb24sYT10Ll9kaXJ0eVR5cGUhPT0wLHU9anQsYz1BbixkPXp0LGY9dC5fdXBkYXRpbmcsaD10Ll9vYnNlcnZlcixnPW51bGw7aWYodC5fcGVuZGluZ0VkaXRvclN0YXRlPW51bGwsdC5fZWRpdG9yU3RhdGU9biwhaSYmYSYmaCE9PW51bGwpe3p0PXQsanQ9bixBbj0hMSx0Ll91cGRhdGluZz0hMDt0cnl7bGV0IGplPXQuX2RpcnR5VHlwZSxUdD10Ll9kaXJ0eUVsZW1lbnRzLGF0PXQuX2RpcnR5TGVhdmVzO2guZGlzY29ubmVjdCgpO3ZhciBtPWplLHc9VHQsdj1hdDtmbj1saT1OdD0iIixpRT1tPT09MixXYz1udWxsLHRuPXQsYW89dC5fY29uZmlnLHN1PXQuX25vZGVzLE9mPXRuLl9saXN0ZW5lcnMubXV0YXRpb24sc209dyxhbT12LFhvPW8uX25vZGVNYXAsdW89bi5fbm9kZU1hcCxodj1uLl9yZWFkT25seSx1bT1uZXcgTWFwKHQuX2tleVRvRE9NTWFwKTtsZXQgbG49bmV3IE1hcDthdT1sbixwYSgicm9vdCIsbnVsbCksYXU9dW09YW89dW89WG89YW09c209c3U9dG49dm9pZCAwLGc9bG59Y2F0Y2goamUpe2lmKGplIGluc3RhbmNlb2YgRXJyb3ImJnQuX29uRXJyb3IoamUpLEZoKXRocm93IGplO2tFKHQsbnVsbCxyLG4pLFZTKHQpLHQuX2RpcnR5VHlwZT0yLEZoPSEwLFVvKHQsbyksRmg9ITE7cmV0dXJufWZpbmFsbHl7aC5vYnNlcnZlKHIscTApLHQuX3VwZGF0aW5nPWYsanQ9dSxBbj1jLHp0PWR9fW4uX3JlYWRPbmx5fHwobi5fcmVhZE9ubHk9ITApO3ZhciB5PXQuX2RpcnR5TGVhdmVzLF89dC5fZGlydHlFbGVtZW50cyxTPXQuX25vcm1hbGl6ZWROb2RlcyxFPXQuX3VwZGF0ZVRhZ3MsJD10Ll9kZWZlcnJlZDthJiYodC5fZGlydHlUeXBlPTAsdC5fY2xvbmVOb3ROZWVkZWQuY2xlYXIoKSx0Ll9kaXJ0eUxlYXZlcz1uZXcgU2V0LHQuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCx0Ll9ub3JtYWxpemVkTm9kZXM9bmV3IFNldCx0Ll91cGRhdGVUYWdzPW5ldyBTZXQpO3ZhciBDPXQuX2RlY29yYXRvcnMsTj10Ll9wZW5kaW5nRGVjb3JhdG9yc3x8QyxBPW4uX25vZGVNYXAsaztmb3IoayBpbiBOKUEuaGFzKGspfHwoTj09PUMmJihOPVhTKHQpKSxkZWxldGUgTltrXSk7dmFyIE09aT9udWxsOkpyKHQuX3dpbmRvdyk7aWYodC5fZWRpdGFibGUmJk0hPT1udWxsJiYoYXx8cz09PW51bGx8fHMuZGlydHkpKXt6dD10LGp0PW47dHJ5e2lmKGghPT1udWxsJiZoLmRpc2Nvbm5lY3QoKSxhfHxzPT09bnVsbHx8cy5kaXJ0eSl7bGV0IGplPXQuX2Jsb2NrQ3Vyc29yRWxlbWVudDtqZSE9PW51bGwmJmxtKGplLHQscik7ZTp7bGV0IFR0PU0uYW5jaG9yTm9kZSxhdD1NLmZvY3VzTm9kZSxsbj1NLmFuY2hvck9mZnNldCxFbj1NLmZvY3VzT2Zmc2V0LF90PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIShFLmhhcygiY29sbGFib3JhdGlvbiIpJiZfdCE9PXJ8fF90IT09bnVsbCYmc3YoX3QpKSlpZihnZShzKSl7dmFyIEQ9cy5hbmNob3IsaWU9cy5mb2N1cyxWPUQua2V5LEs9aWUua2V5LFI9VGQodCxWKSxQPVRkKHQsSyksYj1ELm9mZnNldCx6PWllLm9mZnNldCxqPXMuZm9ybWF0LFo9cy5zdHlsZSxuZT1zLmlzQ29sbGFwc2VkKCksa2U9Uix5ZT1QLFdlPSExO2lmKEQudHlwZT09PSJ0ZXh0Iil7a2U9a2QoUik7bGV0IEF0PUQuZ2V0Tm9kZSgpO1dlPUF0LmdldEZvcm1hdCgpIT09anx8QXQuZ2V0U3R5bGUoKSE9PVp9ZWxzZSBnZShsKSYmbC5hbmNob3IudHlwZT09PSJ0ZXh0IiYmKFdlPSEwKTtpZihpZS50eXBlPT09InRleHQiJiYoeWU9a2QoUCkpLGtlIT09bnVsbCYmeWUhPT1udWxsKXtpZihuZSYmKGw9PT1udWxsfHxXZXx8Z2UobCkmJihsLmZvcm1hdCE9PWp8fGwuc3R5bGUhPT1aKSkpe3ZhciBGZT1wZXJmb3JtYW5jZS5ub3coKTtmRT1baixaLGIsVixGZV19aWYobG49PT1iJiZFbj09PXomJlR0PT09a2UmJmF0PT09eWUmJihNLnR5cGUhPT0iUmFuZ2UifHwhbmUpJiYoX3QhPT1udWxsJiZyLmNvbnRhaW5zKF90KXx8ci5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEQudHlwZSE9PSJlbGVtZW50IikpYnJlYWsgZTt0cnl7TS5zZXRCYXNlQW5kRXh0ZW50KGtlLGIseWUseil9Y2F0Y2h7fWlmKCFFLmhhcygic2tpcC1zY3JvbGwtaW50by12aWV3IikmJnMuaXNDb2xsYXBzZWQoKSYmciE9PW51bGwmJnI9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXtsZXQgQXQ9cyBpbnN0YW5jZW9mIGNsJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiP2tlLmNoaWxkTm9kZXNbYl18fG51bGw6MDxNLnJhbmdlQ291bnQ/TS5nZXRSYW5nZUF0KDApOm51bGw7aWYoQXQhPT1udWxsKXtsZXQgc247aWYoQXQgaW5zdGFuY2VvZiBUZXh0KXtsZXQgZ3Q9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtndC5zZWxlY3ROb2RlKEF0KSxzbj1ndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1lbHNlIHNuPUF0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBMbj1yLm93bmVyRG9jdW1lbnQsZWk9TG4uZGVmYXVsdFZpZXc7aWYoZWkhPT1udWxsKWZvcih2YXJ7dG9wOnRlLGJvdHRvbTpJZX09c24sJGUsUmUsU2U9cjtTZSE9PW51bGw7KXtsZXQgZ3Q9U2U9PT1Mbi5ib2R5O2lmKGd0KSRlPTAsUmU9TmYodCkuaW5uZXJIZWlnaHQ7ZWxzZXtsZXQgQ289U2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JGU9Q28udG9wLFJlPUNvLmJvdHRvbX1sZXQgUnI9MDtpZih0ZTwkZT9Scj0tKCRlLXRlKTpJZT5SZSYmKFJyPUllLVJlKSxSciE9PTApaWYoZ3QpZWkuc2Nyb2xsQnkoMCxScik7ZWxzZXtsZXQgQ289U2Uuc2Nyb2xsVG9wO1NlLnNjcm9sbFRvcCs9UnI7bGV0IFdzPVNlLnNjcm9sbFRvcC1Dbzt0ZS09V3MsSWUtPVdzfWlmKGd0KWJyZWFrO1NlPVRmKFNlKX19fXBtPSEwfX1lbHNlIGwhPT1udWxsJiZ6dSh0LFR0LGF0KSYmTS5yZW1vdmVBbGxSYW5nZXMoKX19ZTp7bGV0IGplPXQuX2Jsb2NrQ3Vyc29yRWxlbWVudDtpZihnZShzKSYmcy5pc0NvbGxhcHNlZCgpJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiJiZyLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXtsZXQgVHQ9cy5hbmNob3IsYXQ9VHQuZ2V0Tm9kZSgpLGxuPVR0Lm9mZnNldCxFbj1hdC5nZXRDaGlsZHJlblNpemUoKSxfdD0hMSxBdD1udWxsO2lmKGxuPT09RW4pe2xldCBzbj1hdC5nZXRDaGlsZEF0SW5kZXgobG4tMSk7QWgoc24pJiYoX3Q9ITApfWVsc2V7bGV0IHNuPWF0LmdldENoaWxkQXRJbmRleChsbik7aWYoQWgoc24pKXtsZXQgTG49c24uZ2V0UHJldmlvdXNTaWJsaW5nKCk7KExuPT09bnVsbHx8QWgoTG4pKSYmKF90PSEwLEF0PXQuZ2V0RWxlbWVudEJ5S2V5KHNuLl9fa2V5KSl9fWlmKF90KXtsZXQgc249dC5nZXRFbGVtZW50QnlLZXkoYXQuX19rZXkpO2lmKGplPT09bnVsbCl7bGV0IExuPXQuX2NvbmZpZy50aGVtZSxlaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlaS5jb250ZW50RWRpdGFibGU9ImZhbHNlIixlaS5zZXRBdHRyaWJ1dGUoImRhdGEtbGV4aWNhbC1jdXJzb3IiLCJ0cnVlIik7bGV0IGd0PUxuLmJsb2NrQ3Vyc29yO2lmKGd0IT09dm9pZCAwKXtpZih0eXBlb2YgZ3Q9PSJzdHJpbmciKXtsZXQgUnI9Z3Quc3BsaXQoIiAiKTtndD1Mbi5ibG9ja0N1cnNvcj1Scn1ndCE9PXZvaWQgMCYmZWkuY2xhc3NMaXN0LmFkZCguLi5ndCl9dC5fYmxvY2tDdXJzb3JFbGVtZW50PWplPWVpfXIuc3R5bGUuY2FyZXRDb2xvcj0idHJhbnNwYXJlbnQiLEF0PT09bnVsbD9zbi5hcHBlbmRDaGlsZChqZSk6c24uaW5zZXJ0QmVmb3JlKGplLEF0KTticmVhayBlfX1qZSE9PW51bGwmJmxtKGplLHQscil9aCE9PW51bGwmJmgub2JzZXJ2ZShyLHEwKX1maW5hbGx5e3p0PWQsanQ9dX19aWYoZyE9PW51bGwpe3ZhciBMZT1nO2xldCBqZT1BcnJheS5mcm9tKHQuX2xpc3RlbmVycy5tdXRhdGlvbiksVHQ9amUubGVuZ3RoO2ZvcihsZXQgYXQ9MDthdDxUdDthdCsrKXtsZXRbbG4sRW5dPWplW2F0XSxfdD1MZS5nZXQoRW4pO190IT09dm9pZCAwJiZsbihfdCx7ZGlydHlMZWF2ZXM6eSxwcmV2RWRpdG9yU3RhdGU6byx1cGRhdGVUYWdzOkV9KX19Z2Uocyl8fHM9PT1udWxsfHxsIT09bnVsbCYmbC5pcyhzKXx8dC5kaXNwYXRjaENvbW1hbmQoa2Ysdm9pZCAwKTt2YXIgSmU9dC5fcGVuZGluZ0RlY29yYXRvcnM7SmUhPT1udWxsJiYodC5fZGVjb3JhdG9ycz1KZSx0Ll9wZW5kaW5nRGVjb3JhdG9ycz1udWxsLEFhKCJkZWNvcmF0b3IiLHQsITAsSmUpKTt2YXIgV3Q9ajAoZXx8byksU249ajAobik7aWYoV3QhPT1TbiYmQWEoInRleHRjb250ZW50Iix0LCEwLFNuKSxBYSgidXBkYXRlIix0LCEwLHtkaXJ0eUVsZW1lbnRzOl8sZGlydHlMZWF2ZXM6eSxlZGl0b3JTdGF0ZTpuLG5vcm1hbGl6ZWROb2RlczpTLHByZXZFZGl0b3JTdGF0ZTplfHxvLHRhZ3M6RX0pLHQuX2RlZmVycmVkPVtdLCQubGVuZ3RoIT09MCl7bGV0IGplPXQuX3VwZGF0aW5nO3QuX3VwZGF0aW5nPSEwO3RyeXtmb3IobGV0IFR0PTA7VHQ8JC5sZW5ndGg7VHQrKykkW1R0XSgpfWZpbmFsbHl7dC5fdXBkYXRpbmc9amV9fXZhciBjcj10Ll91cGRhdGVzO2lmKGNyLmxlbmd0aCE9PTApe2xldCBqZT1jci5zaGlmdCgpO2lmKGplKXtsZXRbVHQsYXRdPWplO1NFKHQsVHQsYXQpfX19fWZ1bmN0aW9uIEFhKHQsZSxuLC4uLnIpe2xldCBpPWUuX3VwZGF0aW5nO2UuX3VwZGF0aW5nPW47dHJ5e2xldCBvPUFycmF5LmZyb20oZS5fbGlzdGVuZXJzW3RdKTtmb3IodD0wO3Q8by5sZW5ndGg7dCsrKW9bdF0uYXBwbHkobnVsbCxyKX1maW5hbGx5e2UuX3VwZGF0aW5nPWl9fWZ1bmN0aW9uIFgodCxlLG4pe2lmKHQuX3VwZGF0aW5nPT09ITF8fHp0IT09dCl7bGV0IG89ITE7cmV0dXJuIHQudXBkYXRlKCgpPT57bz1YKHQsZSxuKX0pLG99bGV0IHI9dXYodCk7Zm9yKGxldCBvPTQ7MDw9bztvLS0pZm9yKGxldCBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBpPXJbbF0uX2NvbW1hbmRzLmdldChlKTtpZihpIT09dm9pZCAwJiYoaT1pW29dLGkhPT12b2lkIDApKXtpPUFycmF5LmZyb20oaSk7bGV0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzO2ErKylpZihpW2FdKG4sdCk9PT0hMClyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gbngodCxlKXtsZXQgbj10Ll91cGRhdGVzO2ZvcihlPWV8fCExO24ubGVuZ3RoIT09MDspe3ZhciByPW4uc2hpZnQoKTtpZihyKXtsZXRbaSxvXT1yLGw7byE9PXZvaWQgMCYmKHI9by5vblVwZGF0ZSxsPW8udGFnLG8uc2tpcFRyYW5zZm9ybXMmJihlPSEwKSxyJiZ0Ll9kZWZlcnJlZC5wdXNoKHIpLGwmJnQuX3VwZGF0ZVRhZ3MuYWRkKGwpKSxpKCl9fXJldHVybiBlfWZ1bmN0aW9uIFNFKHQsZSxuKXtsZXQgcj10Ll91cGRhdGVUYWdzO3ZhciBpLG89aT0hMTtpZihuIT09dm9pZCAwKXt2YXIgbD1uLm9uVXBkYXRlO2k9bi50YWcsaSE9bnVsbCYmci5hZGQoaSksaT1uLnNraXBUcmFuc2Zvcm1zfHwhMSxvPW4uZGlzY3JldGV8fCExfWwmJnQuX2RlZmVycmVkLnB1c2gobCksbj10Ll9lZGl0b3JTdGF0ZSxsPXQuX3BlbmRpbmdFZGl0b3JTdGF0ZTtsZXQgcz0hMTsobD09PW51bGx8fGwuX3JlYWRPbmx5KSYmKGw9dC5fcGVuZGluZ0VkaXRvclN0YXRlPW5ldyBMZihuZXcgTWFwKChsfHxuKS5fbm9kZU1hcCkpLHM9ITApLGwuX2ZsdXNoU3luYz1vLG89anQ7bGV0IGE9QW4sdT16dCxjPXQuX3VwZGF0aW5nO2p0PWwsQW49ITEsdC5fdXBkYXRpbmc9ITAsenQ9dDt0cnl7cyYmKHQuX2hlYWRsZXNzP24uX3NlbGVjdGlvbiE9bnVsbCYmKGwuX3NlbGVjdGlvbj1uLl9zZWxlY3Rpb24uY2xvbmUoKSk6bC5fc2VsZWN0aW9uPUdSKHQpKTtsZXQgZD10Ll9jb21wb3NpdGlvbktleTtlKCksaT1ueCh0LGkpLFlSKGwsdCksdC5fZGlydHlUeXBlIT09MCYmKGk/WFIobCx0KTpKUihsLHQpLG54KHQpLFBSKG4sbCx0Ll9kaXJ0eUxlYXZlcyx0Ll9kaXJ0eUVsZW1lbnRzKSksZCE9PXQuX2NvbXBvc2l0aW9uS2V5JiYobC5fZmx1c2hTeW5jPSEwKTtsZXQgZj1sLl9zZWxlY3Rpb247aWYoZ2UoZikpe2xldCBoPWwuX25vZGVNYXAsZz1mLmZvY3VzLmtleTtoLmdldChmLmFuY2hvci5rZXkpIT09dm9pZCAwJiZoLmdldChnKSE9PXZvaWQgMHx8SCgxOSl9ZWxzZSBScyhmKSYmZi5fbm9kZXMuc2l6ZT09PTAmJihsLl9zZWxlY3Rpb249bnVsbCl9Y2F0Y2goZCl7ZCBpbnN0YW5jZW9mIEVycm9yJiZ0Ll9vbkVycm9yKGQpLHQuX3BlbmRpbmdFZGl0b3JTdGF0ZT1uLHQuX2RpcnR5VHlwZT0yLHQuX2Nsb25lTm90TmVlZGVkLmNsZWFyKCksdC5fZGlydHlMZWF2ZXM9bmV3IFNldCx0Ll9kaXJ0eUVsZW1lbnRzLmNsZWFyKCksVW8odCk7cmV0dXJufWZpbmFsbHl7anQ9byxBbj1hLHp0PXUsdC5fdXBkYXRpbmc9YyxkdT0wfXQuX2RpcnR5VHlwZSE9PTB8fFFSKGwsdCk/bC5fZmx1c2hTeW5jPyhsLl9mbHVzaFN5bmM9ITEsVW8odCkpOnMmJlRSKCgpPT57VW8odCl9KToobC5fZmx1c2hTeW5jPSExLHMmJihyLmNsZWFyKCksdC5fZGVmZXJyZWQ9W10sdC5fcGVuZGluZ0VkaXRvclN0YXRlPW51bGwpKX1mdW5jdGlvbiBIbih0LGUsbil7dC5fdXBkYXRpbmc/dC5fdXBkYXRlcy5wdXNoKFtlLG5dKTpTRSh0LGUsbil9Y2xhc3MgRUUgZXh0ZW5kcyBVdXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1kZWNvcmF0ZSgpe0goNDcpfWlzSXNvbGF0ZWQoKXtyZXR1cm4hMX1pc0lubGluZSgpe3JldHVybiEwfWlzS2V5Ym9hcmRTZWxlY3RhYmxlKCl7cmV0dXJuITB9fWZ1bmN0aW9uIHR0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRUV9Y2xhc3MgZGwgZXh0ZW5kcyBVdXtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9fbGFzdD10aGlzLl9fZmlyc3Q9bnVsbCx0aGlzLl9faW5kZW50PXRoaXMuX19mb3JtYXQ9dGhpcy5fX3NpemU9MCx0aGlzLl9fZGlyPW51bGx9Z2V0Rm9ybWF0KCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19mb3JtYXR9Z2V0Rm9ybWF0VHlwZSgpe2xldCBlPXRoaXMuZ2V0Rm9ybWF0KCk7cmV0dXJuIFNSW2VdfHwiIn1nZXRJbmRlbnQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2luZGVudH1nZXRDaGlsZHJlbigpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4pLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldENoaWxkcmVuS2V5cygpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4uX19rZXkpLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldENoaWxkcmVuU2l6ZSgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wfWlzRGlydHkoKXtsZXQgZT1wdCgpLl9kaXJ0eUVsZW1lbnRzO3JldHVybiBlIT09bnVsbCYmZS5oYXModGhpcy5fX2tleSl9aXNMYXN0Q2hpbGQoKXtsZXQgZT10aGlzLmdldExhdGVzdCgpLG49dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0TGFzdENoaWxkKCk7cmV0dXJuIG4hPT1udWxsJiZuLmlzKGUpfWdldEFsbFRleHROb2Rlcygpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspe2lmKFEobikmJmUucHVzaChuKSxCKG4pKXtsZXQgcj1uLmdldEFsbFRleHROb2RlcygpO2UucHVzaCguLi5yKX1uPW4uZ2V0TmV4dFNpYmxpbmcoKX1yZXR1cm4gZX1nZXRGaXJzdERlc2NlbmRhbnQoKXtsZXQgZT10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO2UhPT1udWxsOyl7aWYoQihlKSl7bGV0IG49ZS5nZXRGaXJzdENoaWxkKCk7aWYobiE9PW51bGwpe2U9bjtjb250aW51ZX19YnJlYWt9cmV0dXJuIGV9Z2V0TGFzdERlc2NlbmRhbnQoKXtsZXQgZT10aGlzLmdldExhc3RDaGlsZCgpO2Zvcig7ZSE9PW51bGw7KXtpZihCKGUpKXtsZXQgbj1lLmdldExhc3RDaGlsZCgpO2lmKG4hPT1udWxsKXtlPW47Y29udGludWV9fWJyZWFrfXJldHVybiBlfWdldERlc2NlbmRhbnRCeUluZGV4KGUpe2xldCBuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO3JldHVybiBlPj1yPyhlPW5bci0xXSxCKGUpJiZlLmdldExhc3REZXNjZW5kYW50KCl8fGV8fG51bGwpOihlPW5bZV0sQihlKSYmZS5nZXRGaXJzdERlc2NlbmRhbnQoKXx8ZXx8bnVsbCl9Z2V0Rmlyc3RDaGlsZCgpe2xldCBlPXRoaXMuZ2V0TGF0ZXN0KCkuX19maXJzdDtyZXR1cm4gZT09PW51bGw/bnVsbDpJdChlKX1nZXRGaXJzdENoaWxkT3JUaHJvdygpe2xldCBlPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpO3JldHVybiBlPT09bnVsbCYmSCg0NSx0aGlzLl9fa2V5KSxlfWdldExhc3RDaGlsZCgpe2xldCBlPXRoaXMuZ2V0TGF0ZXN0KCkuX19sYXN0O3JldHVybiBlPT09bnVsbD9udWxsOkl0KGUpfWdldExhc3RDaGlsZE9yVGhyb3coKXtsZXQgZT10aGlzLmdldExhc3RDaGlsZCgpO3JldHVybiBlPT09bnVsbCYmSCg5Nix0aGlzLl9fa2V5KSxlfWdldENoaWxkQXRJbmRleChlKXt2YXIgbj10aGlzLmdldENoaWxkcmVuU2l6ZSgpO2xldCByO2lmKGU8bi8yKXtmb3Iocj10aGlzLmdldEZpcnN0Q2hpbGQoKSxuPTA7ciE9PW51bGwmJm48PWU7KXtpZihuPT09ZSlyZXR1cm4gcjtyPXIuZ2V0TmV4dFNpYmxpbmcoKSxuKyt9cmV0dXJuIG51bGx9Zm9yKHI9dGhpcy5nZXRMYXN0Q2hpbGQoKSwtLW47ciE9PW51bGwmJm4+PWU7KXtpZihuPT09ZSlyZXR1cm4gcjtyPXIuZ2V0UHJldmlvdXNTaWJsaW5nKCksbi0tfXJldHVybiBudWxsfWdldFRleHRDb250ZW50KCl7bGV0IGU9IiIsbj10aGlzLmdldENoaWxkcmVuKCkscj1uLmxlbmd0aDtmb3IobGV0IGk9MDtpPHI7aSsrKXtsZXQgbz1uW2ldO2UrPW8uZ2V0VGV4dENvbnRlbnQoKSxCKG8pJiZpIT09ci0xJiYhby5pc0lubGluZSgpJiYoZSs9YAoKYCl9cmV0dXJuIGV9Z2V0VGV4dENvbnRlbnRTaXplKCl7bGV0IGU9MCxuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8cjtpKyspe2xldCBvPW5baV07ZSs9by5nZXRUZXh0Q29udGVudFNpemUoKSxCKG8pJiZpIT09ci0xJiYhby5pc0lubGluZSgpJiYoZSs9Mil9cmV0dXJuIGV9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19kaXJ9aGFzRm9ybWF0KGUpe3JldHVybiBlIT09IiI/KGU9TTBbZV0sKHRoaXMuZ2V0Rm9ybWF0KCkmZSkhPT0wKTohMX1zZWxlY3QoZSxuKXtobigpO2xldCByPXJ0KCksaT1lLG89bjt2YXIgbD10aGlzLmdldENoaWxkcmVuU2l6ZSgpO2lmKCF0aGlzLmNhbkJlRW1wdHkoKSl7aWYoZT09PTAmJm49PT0wKXtpZihlPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpLFEoZSl8fEIoZSkpcmV0dXJuIGUuc2VsZWN0KDAsMCl9ZWxzZSBpZighKGUhPT12b2lkIDAmJmUhPT1sfHxuIT09dm9pZCAwJiZuIT09bCkmJihlPXRoaXMuZ2V0TGFzdENoaWxkKCksUShlKXx8QihlKSkpcmV0dXJuIGUuc2VsZWN0KCl9aWYoaT09PXZvaWQgMCYmKGk9bCksbz09PXZvaWQgMCYmKG89bCksbD10aGlzLl9fa2V5LGdlKHIpKXIuYW5jaG9yLnNldChsLGksImVsZW1lbnQiKSxyLmZvY3VzLnNldChsLG8sImVsZW1lbnQiKSxyLmRpcnR5PSEwO2Vsc2UgcmV0dXJuIHhFKGwsaSxsLG8sImVsZW1lbnQiLCJlbGVtZW50Iik7cmV0dXJuIHJ9c2VsZWN0U3RhcnQoKXtsZXQgZT10aGlzLmdldEZpcnN0RGVzY2VuZGFudCgpO3JldHVybiBCKGUpfHxRKGUpP2Uuc2VsZWN0KDAsMCk6ZSE9PW51bGw/ZS5zZWxlY3RQcmV2aW91cygpOnRoaXMuc2VsZWN0KDAsMCl9c2VsZWN0RW5kKCl7bGV0IGU9dGhpcy5nZXRMYXN0RGVzY2VuZGFudCgpO3JldHVybiBCKGUpfHxRKGUpP2Uuc2VsZWN0KCk6ZSE9PW51bGw/ZS5zZWxlY3ROZXh0KCk6dGhpcy5zZWxlY3QoKX1jbGVhcigpe2xldCBlPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobj0+bi5yZW1vdmUoKSksZX1hcHBlbmQoLi4uZSl7cmV0dXJuIHRoaXMuc3BsaWNlKHRoaXMuZ2V0Q2hpbGRyZW5TaXplKCksMCxlKX1zZXREaXJlY3Rpb24oZSl7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fZGlyPWUsbn1zZXRGb3JtYXQoZSl7cmV0dXJuIHRoaXMuZ2V0V3JpdGFibGUoKS5fX2Zvcm1hdD1lIT09IiI/TTBbZV06MCx0aGlzfXNldEluZGVudChlKXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9faW5kZW50PWUsdGhpc31zcGxpY2UoZSxuLHIpe2xldCBpPXIubGVuZ3RoLG89dGhpcy5nZXRDaGlsZHJlblNpemUoKSxsPXRoaXMuZ2V0V3JpdGFibGUoKSxzPWwuX19rZXk7dmFyIGE9W10sdT1bXTtsZXQgYz10aGlzLmdldENoaWxkQXRJbmRleChlK24pLGQ9bnVsbCxmPW8tbitpO2lmKGUhPT0wKWlmKGU9PT1vKWQ9dGhpcy5nZXRMYXN0Q2hpbGQoKTtlbHNle3ZhciBoPXRoaXMuZ2V0Q2hpbGRBdEluZGV4KGUpO2ghPT1udWxsJiYoZD1oLmdldFByZXZpb3VzU2libGluZygpKX1pZigwPG4pe3ZhciBnPWQ9PT1udWxsP3RoaXMuZ2V0Rmlyc3RDaGlsZCgpOmQuZ2V0TmV4dFNpYmxpbmcoKTtmb3IoaD0wO2g8bjtoKyspe2c9PT1udWxsJiZIKDEwMCk7dmFyIG09Zy5nZXROZXh0U2libGluZygpLHc9Zy5fX2tleTtnPWcuZ2V0V3JpdGFibGUoKSxCbyhnKSx1LnB1c2godyksZz1tfX1mb3IoaD1kLG09MDttPGk7bSsrKXt3PXJbbV0saCE9PW51bGwmJncuaXMoaCkmJihkPWg9aC5nZXRQcmV2aW91c1NpYmxpbmcoKSksZz13LmdldFdyaXRhYmxlKCksZy5fX3BhcmVudD09PXMmJmYtLSxCbyhnKTtsZXQgdj13Ll9fa2V5O2g9PT1udWxsPyhsLl9fZmlyc3Q9dixnLl9fcHJldj1udWxsKTooaD1oLmdldFdyaXRhYmxlKCksaC5fX25leHQ9dixnLl9fcHJldj1oLl9fa2V5KSx3Ll9fa2V5PT09cyYmSCg3NiksZy5fX3BhcmVudD1zLGEucHVzaCh2KSxoPXd9aWYoZStuPT09bz9oIT09bnVsbCYmKGguZ2V0V3JpdGFibGUoKS5fX25leHQ9bnVsbCxsLl9fbGFzdD1oLl9fa2V5KTpjIT09bnVsbCYmKGU9Yy5nZXRXcml0YWJsZSgpLGghPT1udWxsPyhuPWguZ2V0V3JpdGFibGUoKSxlLl9fcHJldj1oLl9fa2V5LG4uX19uZXh0PWMuX19rZXkpOmUuX19wcmV2PW51bGwpLGwuX19zaXplPWYsdS5sZW5ndGgmJihlPXJ0KCksZ2UoZSkpKXt1PW5ldyBTZXQodSksYT1uZXcgU2V0KGEpO2xldHthbmNob3I6dixmb2N1czp5fT1lO3J4KHYsdSxhKSYmQWQodix2LmdldE5vZGUoKSx0aGlzLGQsYykscngoeSx1LGEpJiZBZCh5LHkuZ2V0Tm9kZSgpLHRoaXMsZCxjKSxmIT09MHx8dGhpcy5jYW5CZUVtcHR5KCl8fF9yKHRoaXMpfHx0aGlzLnJlbW92ZSgpfXJldHVybiBsfWV4cG9ydEpTT04oKXtyZXR1cm57Y2hpbGRyZW46W10sZGlyZWN0aW9uOnRoaXMuZ2V0RGlyZWN0aW9uKCksZm9ybWF0OnRoaXMuZ2V0Rm9ybWF0VHlwZSgpLGluZGVudDp0aGlzLmdldEluZGVudCgpLHR5cGU6ImVsZW1lbnQiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIoKXtyZXR1cm4gbnVsbH1jYW5JbmRlbnQoKXtyZXR1cm4hMH1jb2xsYXBzZUF0U3RhcnQoKXtyZXR1cm4hMX1leGNsdWRlRnJvbUNvcHkoKXtyZXR1cm4hMX1jYW5FeHRyYWN0Q29udGVudHMoKXtyZXR1cm4hMH1jYW5SZXBsYWNlV2l0aCgpe3JldHVybiEwfWNhbkluc2VydEFmdGVyKCl7cmV0dXJuITB9Y2FuQmVFbXB0eSgpe3JldHVybiEwfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMH1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMH1pc0lubGluZSgpe3JldHVybiExfWlzU2hhZG93Um9vdCgpe3JldHVybiExfWNhbk1lcmdlV2l0aCgpe3JldHVybiExfWV4dHJhY3RXaXRoQ2hpbGQoKXtyZXR1cm4hMX19ZnVuY3Rpb24gQih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGRsfWZ1bmN0aW9uIHJ4KHQsZSxuKXtmb3IodD10LmdldE5vZGUoKTt0Oyl7bGV0IHI9dC5fX2tleTtpZihlLmhhcyhyKSYmIW4uaGFzKHIpKXJldHVybiEwO3Q9dC5nZXRQYXJlbnQoKX1yZXR1cm4hMX1jbGFzcyBBcyBleHRlbmRzIGRse3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInJvb3QifXN0YXRpYyBjbG9uZSgpe3JldHVybiBuZXcgQXN9Y29uc3RydWN0b3IoKXtzdXBlcigicm9vdCIpLHRoaXMuX19jYWNoZWRUZXh0PW51bGx9Z2V0VG9wTGV2ZWxFbGVtZW50T3JUaHJvdygpe0goNTEpfWdldFRleHRDb250ZW50KCl7bGV0IGU9dGhpcy5fX2NhY2hlZFRleHQ7cmV0dXJuIVBzKCkmJnB0KCkuX2RpcnR5VHlwZSE9PTB8fGU9PT1udWxsP3N1cGVyLmdldFRleHRDb250ZW50KCk6ZX1yZW1vdmUoKXtIKDUyKX1yZXBsYWNlKCl7SCg1Myl9aW5zZXJ0QmVmb3JlKCl7SCg1NCl9aW5zZXJ0QWZ0ZXIoKXtIKDU1KX11cGRhdGVET00oKXtyZXR1cm4hMX1hcHBlbmQoLi4uZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl07QihyKXx8dHQocil8fEgoNTYpfXJldHVybiBzdXBlci5hcHBlbmQoLi4uZSl9c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49WHIoKTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1leHBvcnRKU09OKCl7cmV0dXJue2NoaWxkcmVuOltdLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpLGZvcm1hdDp0aGlzLmdldEZvcm1hdFR5cGUoKSxpbmRlbnQ6dGhpcy5nZXRJbmRlbnQoKSx0eXBlOiJyb290Iix2ZXJzaW9uOjF9fWNvbGxhcHNlQXRTdGFydCgpe3JldHVybiEwfX1mdW5jdGlvbiBtbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEFzfWZ1bmN0aW9uIFFSKHQsZSl7aWYoZT1lLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbix0PXQuX3NlbGVjdGlvbix0IT09bnVsbCl7aWYodC5kaXJ0eXx8IXQuaXMoZSkpcmV0dXJuITB9ZWxzZSBpZihlIT09bnVsbClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB2digpe3JldHVybiBuZXcgTGYobmV3IE1hcChbWyJyb290IixuZXcgQXNdXSkpfWZ1bmN0aW9uIENFKHQpe2xldCBlPXQuZXhwb3J0SlNPTigpO3ZhciBuPXQuY29uc3RydWN0b3I7ZS50eXBlIT09bi5nZXRUeXBlKCkmJkgoMTMwLG4ubmFtZSk7bGV0IHI9ZS5jaGlsZHJlbjtpZihCKHQpKWZvcihBcnJheS5pc0FycmF5KHIpfHxIKDU5LG4ubmFtZSksdD10LmdldENoaWxkcmVuKCksbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1DRSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIGV9Y2xhc3MgTGZ7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9ub2RlTWFwPWUsdGhpcy5fc2VsZWN0aW9uPW58fG51bGwsdGhpcy5fcmVhZE9ubHk9dGhpcy5fZmx1c2hTeW5jPSExfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fbm9kZU1hcC5zaXplPT09MSYmdGhpcy5fc2VsZWN0aW9uPT09bnVsbH1yZWFkKGUpe3JldHVybiB0eCh0aGlzLGUpfWNsb25lKGUpe3JldHVybiBlPW5ldyBMZih0aGlzLl9ub2RlTWFwLGU9PT12b2lkIDA/dGhpcy5fc2VsZWN0aW9uOmUpLGUuX3JlYWRPbmx5PSEwLGV9dG9KU09OKCl7cmV0dXJuIHR4KHRoaXMsKCk9Pih7cm9vdDpDRShYcigpKX0pKX19Y2xhc3MgTXMgZXh0ZW5kcyBkbHtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJwYXJhZ3JhcGgifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IE1zKGUuX19rZXkpfWNyZWF0ZURPTShlKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7cmV0dXJuIGU9UmEoZS50aGVtZSwicGFyYWdyYXBoIiksZSE9PXZvaWQgMCYmbi5jbGFzc0xpc3QuYWRkKC4uLmUpLG59dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntwOigpPT4oe2NvbnZlcnNpb246cVIscHJpb3JpdHk6MH0pfX1leHBvcnRET00oZSl7aWYoe2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUmJlJmKGUpKXt0aGlzLmlzRW1wdHkoKSYmZS5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7dmFyIG49dGhpcy5nZXRGb3JtYXRUeXBlKCk7ZS5zdHlsZS50ZXh0QWxpZ249biwobj10aGlzLmdldERpcmVjdGlvbigpKSYmKGUuZGlyPW4pLG49dGhpcy5nZXRJbmRlbnQoKSwwPG4mJihlLnN0eWxlLnRleHRJbmRlbnQ9YCR7MjAqbn1weGApfXJldHVybntlbGVtZW50OmV9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPUpvKCk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldEluZGVudChlLmluZGVudCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToicGFyYWdyYXBoIix2ZXJzaW9uOjF9fWluc2VydE5ld0FmdGVyKGUsbil7ZT1KbygpO2xldCByPXRoaXMuZ2V0RGlyZWN0aW9uKCk7cmV0dXJuIGUuc2V0RGlyZWN0aW9uKHIpLHRoaXMuaW5zZXJ0QWZ0ZXIoZSxuKSxlfWNvbGxhcHNlQXRTdGFydCgpe2xldCBlPXRoaXMuZ2V0Q2hpbGRyZW4oKTtpZihlLmxlbmd0aD09PTB8fFEoZVswXSkmJmVbMF0uZ2V0VGV4dENvbnRlbnQoKS50cmltKCk9PT0iIil7aWYodGhpcy5nZXROZXh0U2libGluZygpIT09bnVsbClyZXR1cm4gdGhpcy5zZWxlY3ROZXh0KCksdGhpcy5yZW1vdmUoKSwhMDtpZih0aGlzLmdldFByZXZpb3VzU2libGluZygpIT09bnVsbClyZXR1cm4gdGhpcy5zZWxlY3RQcmV2aW91cygpLHRoaXMucmVtb3ZlKCksITB9cmV0dXJuITF9fWZ1bmN0aW9uIHFSKHQpe2xldCBlPUpvKCk7cmV0dXJuIHQuc3R5bGUmJihlLnNldEZvcm1hdCh0LnN0eWxlLnRleHRBbGlnbiksdD1wYXJzZUludCh0LnN0eWxlLnRleHRJbmRlbnQsMTApLzIwLDA8dCYmZS5zZXRJbmRlbnQodCkpLHtub2RlOmV9fWZ1bmN0aW9uIEpvKCl7cmV0dXJuIEJ1KG5ldyBNcyl9ZnVuY3Rpb24ga0UodCxlLG4scil7bGV0IGk9dC5fa2V5VG9ET01NYXA7aS5jbGVhcigpLHQuX2VkaXRvclN0YXRlPXZ2KCksdC5fcGVuZGluZ0VkaXRvclN0YXRlPXIsdC5fY29tcG9zaXRpb25LZXk9bnVsbCx0Ll9kaXJ0eVR5cGU9MCx0Ll9jbG9uZU5vdE5lZWRlZC5jbGVhcigpLHQuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdC5fZGlydHlFbGVtZW50cy5jbGVhcigpLHQuX25vcm1hbGl6ZWROb2Rlcz1uZXcgU2V0LHQuX3VwZGF0ZVRhZ3M9bmV3IFNldCx0Ll91cGRhdGVzPVtdLHQuX2Jsb2NrQ3Vyc29yRWxlbWVudD1udWxsLHI9dC5fb2JzZXJ2ZXIsciE9PW51bGwmJihyLmRpc2Nvbm5lY3QoKSx0Ll9vYnNlcnZlcj1udWxsKSxlIT09bnVsbCYmKGUudGV4dENvbnRlbnQ9IiIpLG4hPT1udWxsJiYobi50ZXh0Q29udGVudD0iIixpLnNldCgicm9vdCIsbikpfWZ1bmN0aW9uIGVPKHQpe2xldCBlPW5ldyBNYXAsbj1uZXcgU2V0O3JldHVybiB0LmZvckVhY2gocj0+e2lmKHI9ci5rbGFzcy5pbXBvcnRET00hPW51bGw/ci5rbGFzcy5pbXBvcnRET00uYmluZChyLmtsYXNzKTpudWxsLHIhPW51bGwmJiFuLmhhcyhyKSl7bi5hZGQocik7dmFyIGk9cigpO2khPT1udWxsJiZPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntsZXQgbD1lLmdldChvKTtsPT09dm9pZCAwJiYobD1bXSxlLnNldChvLGwpKSxsLnB1c2goaVtvXSl9KX19KSxlfWNsYXNzIHRPe2NvbnN0cnVjdG9yKGUsbixyLGksbyxsLHMpe3RoaXMuX3BhcmVudEVkaXRvcj1uLHRoaXMuX3Jvb3RFbGVtZW50PW51bGwsdGhpcy5fZWRpdG9yU3RhdGU9ZSx0aGlzLl9jb21wb3NpdGlvbktleT10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCx0aGlzLl9kZWZlcnJlZD1bXSx0aGlzLl9rZXlUb0RPTU1hcD1uZXcgTWFwLHRoaXMuX3VwZGF0ZXM9W10sdGhpcy5fdXBkYXRpbmc9ITEsdGhpcy5fbGlzdGVuZXJzPXtkZWNvcmF0b3I6bmV3IFNldCxlZGl0YWJsZTpuZXcgU2V0LG11dGF0aW9uOm5ldyBNYXAscm9vdDpuZXcgU2V0LHRleHRjb250ZW50Om5ldyBTZXQsdXBkYXRlOm5ldyBTZXR9LHRoaXMuX2NvbW1hbmRzPW5ldyBNYXAsdGhpcy5fY29uZmlnPWksdGhpcy5fbm9kZXM9cix0aGlzLl9kZWNvcmF0b3JzPXt9LHRoaXMuX3BlbmRpbmdEZWNvcmF0b3JzPW51bGwsdGhpcy5fZGlydHlUeXBlPTAsdGhpcy5fY2xvbmVOb3ROZWVkZWQ9bmV3IFNldCx0aGlzLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LHRoaXMuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCx0aGlzLl9ub3JtYWxpemVkTm9kZXM9bmV3IFNldCx0aGlzLl91cGRhdGVUYWdzPW5ldyBTZXQsdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9rZXk9UVMoKSx0aGlzLl9vbkVycm9yPW8sdGhpcy5faHRtbENvbnZlcnNpb25zPWwsdGhpcy5fZWRpdGFibGU9cyx0aGlzLl9oZWFkbGVzcz1uIT09bnVsbCYmbi5faGVhZGxlc3MsdGhpcy5fYmxvY2tDdXJzb3JFbGVtZW50PXRoaXMuX3dpbmRvdz1udWxsfWlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2l0aW9uS2V5IT1udWxsfXJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoZSl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLnVwZGF0ZTtyZXR1cm4gbi5hZGQoZSksKCk9PntuLmRlbGV0ZShlKX19cmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKGUpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5lZGl0YWJsZTtyZXR1cm4gbi5hZGQoZSksKCk9PntuLmRlbGV0ZShlKX19cmVnaXN0ZXJEZWNvcmF0b3JMaXN0ZW5lcihlKXtsZXQgbj10aGlzLl9saXN0ZW5lcnMuZGVjb3JhdG9yO3JldHVybiBuLmFkZChlKSwoKT0+e24uZGVsZXRlKGUpfX1yZWdpc3RlclRleHRDb250ZW50TGlzdGVuZXIoZSl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLnRleHRjb250ZW50O3JldHVybiBuLmFkZChlKSwoKT0+e24uZGVsZXRlKGUpfX1yZWdpc3RlclJvb3RMaXN0ZW5lcihlKXtsZXQgbj10aGlzLl9saXN0ZW5lcnMucm9vdDtyZXR1cm4gZSh0aGlzLl9yb290RWxlbWVudCxudWxsKSxuLmFkZChlKSwoKT0+e2UobnVsbCx0aGlzLl9yb290RWxlbWVudCksbi5kZWxldGUoZSl9fXJlZ2lzdGVyQ29tbWFuZChlLG4scil7cj09PXZvaWQgMCYmSCgzNSk7bGV0IGk9dGhpcy5fY29tbWFuZHM7aS5oYXMoZSl8fGkuc2V0KGUsW25ldyBTZXQsbmV3IFNldCxuZXcgU2V0LG5ldyBTZXQsbmV3IFNldF0pO2xldCBvPWkuZ2V0KGUpO289PT12b2lkIDAmJkgoMzYsU3RyaW5nKGUpKTtsZXQgbD1vW3JdO3JldHVybiBsLmFkZChuKSwoKT0+e2wuZGVsZXRlKG4pLG8uZXZlcnkocz0+cy5zaXplPT09MCkmJmkuZGVsZXRlKGUpfX1yZWdpc3Rlck11dGF0aW9uTGlzdGVuZXIoZSxuKXt0aGlzLl9ub2Rlcy5nZXQoZS5nZXRUeXBlKCkpPT09dm9pZCAwJiZIKDM3LGUubmFtZSk7bGV0IHI9dGhpcy5fbGlzdGVuZXJzLm11dGF0aW9uO3JldHVybiByLnNldChuLGUpLCgpPT57ci5kZWxldGUobil9fXJlZ2lzdGVyTm9kZVRyYW5zZm9ybVRvS2xhc3MoZSxuKXt2YXIgcj1lLmdldFR5cGUoKTtyZXR1cm4gcj10aGlzLl9ub2Rlcy5nZXQocikscj09PXZvaWQgMCYmSCgzNyxlLm5hbWUpLHIudHJhbnNmb3Jtcy5hZGQobikscn1yZWdpc3Rlck5vZGVUcmFuc2Zvcm0oZSxuKXt2YXIgcj10aGlzLnJlZ2lzdGVyTm9kZVRyYW5zZm9ybVRvS2xhc3MoZSxuKTtsZXQgaT1bcl07cmV0dXJuIHI9ci5yZXBsYWNlV2l0aEtsYXNzLHIhPW51bGwmJihyPXRoaXMucmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyhyLG4pLGkucHVzaChyKSksTlIodGhpcyxlLmdldFR5cGUoKSksKCk9PntpLmZvckVhY2gobz0+by50cmFuc2Zvcm1zLmRlbGV0ZShuKSl9fWhhc05vZGUoZSl7cmV0dXJuIHRoaXMuX25vZGVzLmhhcyhlLmdldFR5cGUoKSl9aGFzTm9kZXMoZSl7cmV0dXJuIGUuZXZlcnkodGhpcy5oYXNOb2RlLmJpbmQodGhpcykpfWRpc3BhdGNoQ29tbWFuZChlLG4pe3JldHVybiBYKHRoaXMsZSxuKX1nZXREZWNvcmF0b3JzKCl7cmV0dXJuIHRoaXMuX2RlY29yYXRvcnN9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnR9Z2V0S2V5KCl7cmV0dXJuIHRoaXMuX2tleX1zZXRSb290RWxlbWVudChlKXtsZXQgbj10aGlzLl9yb290RWxlbWVudDtpZihlIT09bil7bGV0IGw9UmEodGhpcy5fY29uZmlnLnRoZW1lLCJyb290Iik7dmFyIHI9dGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlfHx0aGlzLl9lZGl0b3JTdGF0ZTtpZih0aGlzLl9yb290RWxlbWVudD1lLGtFKHRoaXMsbixlLHIpLG4hPT1udWxsKXtpZighdGhpcy5fY29uZmlnLmRpc2FibGVFdmVudHMpe09hIT09MCYmKE9hLS0sT2E9PT0wJiZuLm93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixnRSkpO3ZhciBpPW4uX19sZXhpY2FsRWRpdG9yO2lmKGkhPW51bGwpe2lmKGkuX3BhcmVudEVkaXRvciE9PW51bGwpe3ZhciBvPXV2KGkpO289b1tvLmxlbmd0aC0xXS5fa2V5LGVzLmdldChvKT09PWkmJmVzLmRlbGV0ZShvKX1lbHNlIGVzLmRlbGV0ZShpLl9rZXkpO24uX19sZXhpY2FsRWRpdG9yPW51bGx9Zm9yKGk9bUUobiksbz0wO288aS5sZW5ndGg7bysrKWlbb10oKTtuLl9fbGV4aWNhbEV2ZW50SGFuZGxlcz1bXX1sIT1udWxsJiZuLmNsYXNzTGlzdC5yZW1vdmUoLi4ubCl9ZSE9PW51bGw/KHI9KHI9ZS5vd25lckRvY3VtZW50KSYmci5kZWZhdWx0Vmlld3x8bnVsbCxpPWUuc3R5bGUsaS51c2VyU2VsZWN0PSJ0ZXh0IixpLndoaXRlU3BhY2U9InByZS13cmFwIixpLndvcmRCcmVhaz0iYnJlYWstd29yZCIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbGV4aWNhbC1lZGl0b3IiLCJ0cnVlIiksdGhpcy5fd2luZG93PXIsdGhpcy5fZGlydHlUeXBlPTIsVlModGhpcyksdGhpcy5fdXBkYXRlVGFncy5hZGQoImhpc3RvcnktbWVyZ2UiKSxVbyh0aGlzKSx0aGlzLl9jb25maWcuZGlzYWJsZUV2ZW50c3x8QlIoZSx0aGlzKSxsIT1udWxsJiZlLmNsYXNzTGlzdC5hZGQoLi4ubCkpOih0aGlzLl9lZGl0b3JTdGF0ZT1yLHRoaXMuX3dpbmRvdz10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCksQWEoInJvb3QiLHRoaXMsITEsZSxuKX19Z2V0RWxlbWVudEJ5S2V5KGUpe3JldHVybiB0aGlzLl9rZXlUb0RPTU1hcC5nZXQoZSl8fG51bGx9Z2V0RWRpdG9yU3RhdGUoKXtyZXR1cm4gdGhpcy5fZWRpdG9yU3RhdGV9c2V0RWRpdG9yU3RhdGUoZSxuKXtlLmlzRW1wdHkoKSYmSCgzOCksV1ModGhpcyk7bGV0IHI9dGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlLGk9dGhpcy5fdXBkYXRlVGFncztuPW4hPT12b2lkIDA/bi50YWc6bnVsbCxyPT09bnVsbHx8ci5pc0VtcHR5KCl8fChuIT1udWxsJiZpLmFkZChuKSxVbyh0aGlzKSksdGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlPWUsdGhpcy5fZGlydHlUeXBlPTIsdGhpcy5fZGlydHlFbGVtZW50cy5zZXQoInJvb3QiLCExKSx0aGlzLl9jb21wb3NpdGlvbktleT1udWxsLG4hPW51bGwmJmkuYWRkKG4pLFVvKHRoaXMpfXBhcnNlRWRpdG9yU3RhdGUoZSxuKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9KU09OLnBhcnNlKGUpOmU7bGV0IHI9dnYoKSxpPWp0LG89QW4sbD16dCxzPXRoaXMuX2RpcnR5RWxlbWVudHMsYT10aGlzLl9kaXJ0eUxlYXZlcyx1PXRoaXMuX2Nsb25lTm90TmVlZGVkLGM9dGhpcy5fZGlydHlUeXBlO3RoaXMuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCx0aGlzLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LHRoaXMuX2Nsb25lTm90TmVlZGVkPW5ldyBTZXQsdGhpcy5fZGlydHlUeXBlPTAsanQ9cixBbj0hMSx6dD10aGlzO3RyeXtndihlLnJvb3QsdGhpcy5fbm9kZXMpLG4mJm4oKSxyLl9yZWFkT25seT0hMH1jYXRjaChkKXtkIGluc3RhbmNlb2YgRXJyb3ImJnRoaXMuX29uRXJyb3IoZCl9ZmluYWxseXt0aGlzLl9kaXJ0eUVsZW1lbnRzPXMsdGhpcy5fZGlydHlMZWF2ZXM9YSx0aGlzLl9jbG9uZU5vdE5lZWRlZD11LHRoaXMuX2RpcnR5VHlwZT1jLGp0PWksQW49byx6dD1sfXJldHVybiByfXVwZGF0ZShlLG4pe0huKHRoaXMsZSxuKX1mb2N1cyhlLG49e30pe2xldCByPXRoaXMuX3Jvb3RFbGVtZW50O3IhPT1udWxsJiYoci5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksSG4odGhpcywoKT0+e2xldCBpPXJ0KCksbz1YcigpO2khPT1udWxsP2kuZGlydHk9ITA6by5nZXRDaGlsZHJlblNpemUoKSE9PTAmJihuLmRlZmF1bHRTZWxlY3Rpb249PT0icm9vdFN0YXJ0Ij9vLnNlbGVjdFN0YXJ0KCk6by5zZWxlY3RFbmQoKSl9LHtvblVwZGF0ZTooKT0+e3IucmVtb3ZlQXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIpLGUmJmUoKX0sdGFnOiJmb2N1cyJ9KSx0aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9PT1udWxsJiZyLnJlbW92ZUF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiKSl9Ymx1cigpe3ZhciBlPXRoaXMuX3Jvb3RFbGVtZW50O2UhPT1udWxsJiZlLmJsdXIoKSxlPUpyKHRoaXMuX3dpbmRvdyksZSE9PW51bGwmJmUucmVtb3ZlQWxsUmFuZ2VzKCl9aXNFZGl0YWJsZSgpe3JldHVybiB0aGlzLl9lZGl0YWJsZX1zZXRFZGl0YWJsZShlKXt0aGlzLl9lZGl0YWJsZSE9PWUmJih0aGlzLl9lZGl0YWJsZT1lLEFhKCJlZGl0YWJsZSIsdGhpcywhMCxlKSl9dG9KU09OKCl7cmV0dXJue2VkaXRvclN0YXRlOnRoaXMuX2VkaXRvclN0YXRlLnRvSlNPTigpfX19Y2xhc3MgeXYgZXh0ZW5kcyBkbHtjb25zdHJ1Y3RvcihlLG4pe3N1cGVyKG4pLHRoaXMuX19jb2xTcGFuPWUsdGhpcy5fX3Jvd1NwYW49MX1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSxjb2xTcGFuOnRoaXMuX19jb2xTcGFuLHJvd1NwYW46dGhpcy5fX3Jvd1NwYW59fWdldENvbFNwYW4oKXtyZXR1cm4gdGhpcy5fX2NvbFNwYW59c2V0Q29sU3BhbihlKXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9fY29sU3Bhbj1lLHRoaXN9Z2V0Um93U3Bhbigpe3JldHVybiB0aGlzLl9fcm93U3Bhbn1zZXRSb3dTcGFuKGUpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19yb3dTcGFuPWUsdGhpc319ZnVuY3Rpb24gZXIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB5dn1jbGFzcyBiRSBleHRlbmRzIGRse31mdW5jdGlvbiB4dih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGJFfWNsYXNzICRFIGV4dGVuZHMgZGx7fWZ1bmN0aW9uIGZ1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgJEV9SS4kYWRkVXBkYXRlVGFnPWZ1bmN0aW9uKHQpe2huKCkscHQoKS5fdXBkYXRlVGFncy5hZGQodCl9O0kuJGFwcGx5Tm9kZVJlcGxhY2VtZW50PUJ1O0kuJGNvcHlOb2RlPXRFO0kuJGNyZWF0ZUxpbmVCcmVha05vZGU9bXM7SS4kY3JlYXRlTm9kZVNlbGVjdGlvbj1fbTtJLiRjcmVhdGVQYXJhZ3JhcGhOb2RlPUpvO0kuJGNyZWF0ZVJhbmdlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7bGV0IHQ9bmV3IEhyKCJyb290IiwwLCJlbGVtZW50IiksZT1uZXcgSHIoInJvb3QiLDAsImVsZW1lbnQiKTtyZXR1cm4gbmV3IGNsKHQsZSwwLCIiKX07SS4kY3JlYXRlVGFiTm9kZT1QZjtJLiRjcmVhdGVUZXh0Tm9kZT1MdDtJLiRnZXRBZGphY2VudE5vZGU9b207SS4kZ2V0TmVhcmVzdE5vZGVGcm9tRE9NTm9kZT1GdTtJLiRnZXROZWFyZXN0Um9vdE9yU2hhZG93Um9vdD1lRTtJLiRnZXROb2RlQnlLZXk9SXQ7SS4kZ2V0UHJldmlvdXNTZWxlY3Rpb249T3M7SS4kZ2V0Um9vdD1YcjtJLiRnZXRTZWxlY3Rpb249cnQ7SS4kZ2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oKXtsZXQgdD1ydCgpO3JldHVybiB0PT09bnVsbD8iIjp0LmdldFRleHRDb250ZW50KCl9O0kuJGhhc0FuY2VzdG9yPU5kO0kuJGhhc1VwZGF0ZVRhZz1mdW5jdGlvbih0KXtyZXR1cm4gcHQoKS5fdXBkYXRlVGFncy5oYXModCl9O0kuJGluc2VydE5vZGVzPWZ1bmN0aW9uKHQsZSl7bGV0IG49cnQoKXx8T3MoKTtyZXR1cm4gbj09PW51bGwmJihuPVhyKCkuc2VsZWN0RW5kKCkpLG4uaW5zZXJ0Tm9kZXModCxlKX07SS4kaXNCbG9ja0VsZW1lbnROb2RlPXhtO0kuJGlzRGVjb3JhdG9yTm9kZT10dDtJLiRpc0VsZW1lbnROb2RlPUI7SS4kaXNJbmxpbmVFbGVtZW50T3JEZWNvcmF0b3JOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBCKHQpJiZ0LmlzSW5saW5lKCl8fHR0KHQpJiZ0LmlzSW5saW5lKCl9O0kuJGlzTGVhZk5vZGU9WlM7SS4kaXNMaW5lQnJlYWtOb2RlPWN1O0kuJGlzTm9kZVNlbGVjdGlvbj1ScztJLiRpc1BhcmFncmFwaE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBNc307SS4kaXNSYW5nZVNlbGVjdGlvbj1nZTtJLiRpc1Jvb3ROb2RlPW1uO0kuJGlzUm9vdE9yU2hhZG93Um9vdD1fcjtJLiRpc1RhYk5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBOc307SS4kaXNUZXh0Tm9kZT1RO0kuJG5vZGVzT2ZUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlPVFyKCk7bGV0IG49ZS5fcmVhZE9ubHkscj10LmdldFR5cGUoKTtlPWUuX25vZGVNYXA7bGV0IGk9W107Zm9yKGxldFssb11vZiBlKW8gaW5zdGFuY2VvZiB0JiZvLl9fdHlwZT09PXImJihufHxvLmlzQXR0YWNoZWQoKSkmJmkucHVzaChvKTtyZXR1cm4gaX07SS4kbm9ybWFsaXplU2VsZWN0aW9uX19FWFBFUklNRU5UQUw9bHY7SS4kcGFyc2VTZXJpYWxpemVkTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gZ3YodCxwdCgpLl9ub2Rlcyl9O0kuJHNlbGVjdEFsbD1mdW5jdGlvbigpe3ZhciB0PVhyKCk7dD10LnNlbGVjdCgwLHQuZ2V0Q2hpbGRyZW5TaXplKCkpLFZyKGx2KHQpKX07SS4kc2V0Q29tcG9zaXRpb25LZXk9S3Q7SS4kc2V0U2VsZWN0aW9uPVZyO0kuJHNwbGl0Tm9kZT1uRTtJLkJMVVJfQ09NTUFORD1GUztJLkNBTl9SRURPX0NPTU1BTkQ9e307SS5DQU5fVU5ET19DT01NQU5EPXt9O0kuQ0xFQVJfRURJVE9SX0NPTU1BTkQ9e307SS5DTEVBUl9ISVNUT1JZX0NPTU1BTkQ9e307SS5DTElDS19DT01NQU5EPVNTO0kuQ09NTUFORF9QUklPUklUWV9DUklUSUNBTD00O0kuQ09NTUFORF9QUklPUklUWV9FRElUT1I9MDtJLkNPTU1BTkRfUFJJT1JJVFlfSElHSD0zO0kuQ09NTUFORF9QUklPUklUWV9MT1c9MTtJLkNPTU1BTkRfUFJJT1JJVFlfTk9STUFMPTI7SS5DT05UUk9MTEVEX1RFWFRfSU5TRVJUSU9OX0NPTU1BTkQ9cWw7SS5DT1BZX0NPTU1BTkQ9dHY7SS5DVVRfQ09NTUFORD1udjtJLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORD1pdTtJLkRFTEVURV9MSU5FX0NPTU1BTkQ9bHU7SS5ERUxFVEVfV09SRF9DT01NQU5EPW91O0kuREVQUkVDQVRFRF8kY29tcHV0ZUdyaWRNYXA9X0U7SS5ERVBSRUNBVEVEXyRjcmVhdGVHcmlkU2VsZWN0aW9uPWZ1bmN0aW9uKCl7bGV0IHQ9bmV3IEhyKCJyb290IiwwLCJlbGVtZW50IiksZT1uZXcgSHIoInJvb3QiLDAsImVsZW1lbnQiKTtyZXR1cm4gbmV3IE1mKCJyb290Iix0LGUpfTtJLkRFUFJFQ0FURURfJGdldEdyaWRDZWxsTm9kZVJlY3Q9eW07SS5ERVBSRUNBVEVEXyRnZXROb2RlVHJpcGxldD13RTtJLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlPWVyO0kuREVQUkVDQVRFRF8kaXNHcmlkTm9kZT14djtJLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGU9ZnU7SS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb249cHY7SS5ERVBSRUNBVEVEX0dyaWRDZWxsTm9kZT15djtJLkRFUFJFQ0FURURfR3JpZE5vZGU9YkU7SS5ERVBSRUNBVEVEX0dyaWRSb3dOb2RlPSRFO0kuRFJBR0VORF9DT01NQU5EPWpTO0kuRFJBR09WRVJfQ09NTUFORD1JUztJLkRSQUdTVEFSVF9DT01NQU5EPURTO0kuRFJPUF9DT01NQU5EPUxTO0kuRGVjb3JhdG9yTm9kZT1FRTtJLkVsZW1lbnROb2RlPWRsO0kuRk9DVVNfQ09NTUFORD16UztJLkZPUk1BVF9FTEVNRU5UX0NPTU1BTkQ9e307SS5GT1JNQVRfVEVYVF9DT01NQU5EPUtpO0kuSU5ERU5UX0NPTlRFTlRfQ09NTUFORD17fTtJLklOU0VSVF9MSU5FX0JSRUFLX0NPTU1BTkQ9TmE7SS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQ9ZW07SS5JTlNFUlRfVEFCX0NPTU1BTkQ9e307SS5LRVlfQVJST1dfRE9XTl9DT01NQU5EPU5TO0kuS0VZX0FSUk9XX0xFRlRfQ09NTUFORD1iUztJLktFWV9BUlJPV19SSUdIVF9DT01NQU5EPUNTO0kuS0VZX0FSUk9XX1VQX0NPTU1BTkQ9VFM7SS5LRVlfQkFDS1NQQUNFX0NPTU1BTkQ9T1M7SS5LRVlfREVMRVRFX0NPTU1BTkQ9QVM7SS5LRVlfRE9XTl9DT01NQU5EPUVTO0kuS0VZX0VOVEVSX0NPTU1BTkQ9RWQ7SS5LRVlfRVNDQVBFX0NPTU1BTkQ9UFM7SS5LRVlfTU9ESUZJRVJfQ09NTUFORD1CUztJLktFWV9TUEFDRV9DT01NQU5EPVJTO0kuS0VZX1RBQl9DT01NQU5EPU1TO0kuTGluZUJyZWFrTm9kZT1UcztJLk1PVkVfVE9fRU5EPWtTO0kuTU9WRV9UT19TVEFSVD0kUztJLk9VVERFTlRfQ09OVEVOVF9DT01NQU5EPXt9O0kuUEFTVEVfQ09NTUFORD1RZztJLlBhcmFncmFwaE5vZGU9TXM7SS5SRURPX0NPTU1BTkQ9ZXY7SS5SRU1PVkVfVEVYVF9DT01NQU5EPXRtO0kuUm9vdE5vZGU9QXM7SS5TRUxFQ1RJT05fQ0hBTkdFX0NPTU1BTkQ9a2Y7SS5TRUxFQ1RfQUxMX0NPTU1BTkQ9bm07SS5UYWJOb2RlPU5zO0kuVGV4dE5vZGU9dWw7SS5VTkRPX0NPTU1BTkQ9cWc7SS5jcmVhdGVDb21tYW5kPWZ1bmN0aW9uKCl7cmV0dXJue319O0kuY3JlYXRlRWRpdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHt9LG49enQscj1lLnRoZW1lfHx7fTtsZXQgaT10PT09dm9pZCAwP246ZS5wYXJlbnRFZGl0b3J8fG51bGwsbz1lLmRpc2FibGVFdmVudHN8fCExLGw9dnYoKSxzPWUubmFtZXNwYWNlfHwoaSE9PW51bGw/aS5fY29uZmlnLm5hbWVzcGFjZTpRUygpKSxhPWUuZWRpdG9yU3RhdGUsdT1bQXMsdWwsVHMsTnMsTXMsLi4uZS5ub2Rlc3x8W11dLGM9ZS5vbkVycm9yO2lmKGU9ZS5lZGl0YWJsZSE9PXZvaWQgMD9lLmVkaXRhYmxlOiEwLHQ9PT12b2lkIDAmJm4hPT1udWxsKXQ9bi5fbm9kZXM7ZWxzZSBmb3IodD1uZXcgTWFwLG49MDtuPHUubGVuZ3RoO24rKyl7bGV0IGY9dVtuXSxoPW51bGw7dmFyIGQ9bnVsbDt0eXBlb2YgZiE9ImZ1bmN0aW9uIiYmKGQ9ZixmPWQucmVwbGFjZSxoPWQud2l0aCxkPWQud2l0aEtsYXNzP2Qud2l0aEtsYXNzOm51bGwpO2xldCBnPWYuZ2V0VHlwZSgpLG09Zi50cmFuc2Zvcm0oKSx3PW5ldyBTZXQ7bSE9PW51bGwmJncuYWRkKG0pLHQuc2V0KGcse2tsYXNzOmYscmVwbGFjZTpoLHJlcGxhY2VXaXRoS2xhc3M6ZCx0cmFuc2Zvcm1zOnd9KX1yZXR1cm4gcj1uZXcgdE8obCxpLHQse2Rpc2FibGVFdmVudHM6byxuYW1lc3BhY2U6cyx0aGVtZTpyfSxjfHxjb25zb2xlLmVycm9yLGVPKHQpLGUpLGEhPT12b2lkIDAmJihyLl9wZW5kaW5nRWRpdG9yU3RhdGU9YSxyLl9kaXJ0eVR5cGU9Mikscn07SS5nZXROZWFyZXN0RWRpdG9yRnJvbURPTU5vZGU9YXY7SS5pc0hUTUxBbmNob3JFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiBSZih0KSYmdC50YWdOYW1lPT09IkEifTtJLmlzSFRNTEVsZW1lbnQ9UmY7SS5pc1NlbGVjdGlvbkNhcHR1cmVkSW5EZWNvcmF0b3JJbnB1dD1zdjtJLmlzU2VsZWN0aW9uV2l0aGluRWRpdG9yPXp1O2NvbnN0IG5PPUk7dmFyIF9lPW5PO2Z1bmN0aW9uIF92KCl7cmV0dXJue2FzeW5jOiExLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhvb2tzOm51bGwscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzaWxlbnQ6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsfX1sZXQgZmw9X3YoKTtmdW5jdGlvbiBURSh0KXtmbD10fWNvbnN0IE5FPS9bJjw+IiddLyxyTz1uZXcgUmVnRXhwKE5FLnNvdXJjZSwiZyIpLFJFPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxpTz1uZXcgUmVnRXhwKFJFLnNvdXJjZSwiZyIpLG9PPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxpeD10PT5vT1t0XTtmdW5jdGlvbiBJbih0LGUpe2lmKGUpe2lmKE5FLnRlc3QodCkpcmV0dXJuIHQucmVwbGFjZShyTyxpeCl9ZWxzZSBpZihSRS50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UoaU8saXgpO3JldHVybiB0fWNvbnN0IGxPPS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2lnO2Z1bmN0aW9uIHNPKHQpe3JldHVybiB0LnJlcGxhY2UobE8sKGUsbik9PihuPW4udG9Mb3dlckNhc2UoKSxuPT09ImNvbG9uIj8iOiI6bi5jaGFyQXQoMCk9PT0iIyI/bi5jaGFyQXQoMSk9PT0ieCI/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK24uc3Vic3RyaW5nKDEpKToiIikpfWNvbnN0IGFPPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIEJlKHQsZSl7dD10eXBlb2YgdD09InN0cmluZyI/dDp0LnNvdXJjZSxlPWV8fCIiO2NvbnN0IG49e3JlcGxhY2U6KHIsaSk9PihpPXR5cGVvZiBpPT0ib2JqZWN0IiYmInNvdXJjZSJpbiBpP2kuc291cmNlOmksaT1pLnJlcGxhY2UoYU8sIiQxIiksdD10LnJlcGxhY2UocixpKSxuKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cCh0LGUpfTtyZXR1cm4gbn1mdW5jdGlvbiBveCh0KXt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gdH1jb25zdCBNZD17ZXhlYzooKT0+bnVsbH07ZnVuY3Rpb24gbHgodCxlKXtjb25zdCBuPXQucmVwbGFjZSgvXHwvZywobyxsLHMpPT57bGV0IGE9ITEsdT1sO2Zvcig7LS11Pj0wJiZzW3VdPT09IlxcIjspYT0hYTtyZXR1cm4gYT8ifCI6IiB8In0pLHI9bi5zcGxpdCgvIFx8Lyk7bGV0IGk9MDtpZihyWzBdLnRyaW0oKXx8ci5zaGlmdCgpLHIubGVuZ3RoPjAmJiFyW3IubGVuZ3RoLTFdLnRyaW0oKSYmci5wb3AoKSxlKWlmKHIubGVuZ3RoPmUpci5zcGxpY2UoZSk7ZWxzZSBmb3IoO3IubGVuZ3RoPGU7KXIucHVzaCgiIik7Zm9yKDtpPHIubGVuZ3RoO2krKylyW2ldPXJbaV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiByfWZ1bmN0aW9uIHljKHQsZSxuKXtjb25zdCByPXQubGVuZ3RoO2lmKHI9PT0wKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPHI7KXtjb25zdCBvPXQuY2hhckF0KHItaS0xKTtpZihvPT09ZSYmIW4paSsrO2Vsc2UgaWYobyE9PWUmJm4paSsrO2Vsc2UgYnJlYWt9cmV0dXJuIHQuc2xpY2UoMCxyLWkpfWZ1bmN0aW9uIHVPKHQsZSl7aWYodC5pbmRleE9mKGVbMV0pPT09LTEpcmV0dXJuLTE7bGV0IG49MDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdPT09IlxcIilyKys7ZWxzZSBpZih0W3JdPT09ZVswXSluKys7ZWxzZSBpZih0W3JdPT09ZVsxXSYmKG4tLSxuPDApKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIHN4KHQsZSxuLHIpe2NvbnN0IGk9ZS5ocmVmLG89ZS50aXRsZT9JbihlLnRpdGxlKTpudWxsLGw9dFsxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYodFswXS5jaGFyQXQoMCkhPT0iISIpe3Iuc3RhdGUuaW5MaW5rPSEwO2NvbnN0IHM9e3R5cGU6ImxpbmsiLHJhdzpuLGhyZWY6aSx0aXRsZTpvLHRleHQ6bCx0b2tlbnM6ci5pbmxpbmVUb2tlbnMobCl9O3JldHVybiByLnN0YXRlLmluTGluaz0hMSxzfXJldHVybnt0eXBlOiJpbWFnZSIscmF3Om4saHJlZjppLHRpdGxlOm8sdGV4dDpJbihsKX19ZnVuY3Rpb24gY08odCxlKXtjb25zdCBuPXQubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihuPT09bnVsbClyZXR1cm4gZTtjb25zdCByPW5bMV07cmV0dXJuIGUuc3BsaXQoYApgKS5tYXAoaT0+e2NvbnN0IG89aS5tYXRjaCgvXlxzKy8pO2lmKG89PT1udWxsKXJldHVybiBpO2NvbnN0W2xdPW87cmV0dXJuIGwubGVuZ3RoPj1yLmxlbmd0aD9pLnNsaWNlKHIubGVuZ3RoKTppfSkuam9pbihgCmApfWNsYXNzIExke2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsIm9wdGlvbnMiKTtRZSh0aGlzLCJydWxlcyIpO1FlKHRoaXMsImxleGVyIik7dGhpcy5vcHRpb25zPWV8fGZsfXNwYWNlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYobiYmblswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzpuWzBdfX1jb2RlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoZSk7aWYobil7Y29uc3Qgcj1uWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6blswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6eWMocixgCmApfX19ZmVuY2VzKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMF0saT1jTyhyLG5bM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnIsbGFuZzpuWzJdP25bMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6blsyXSx0ZXh0Oml9fX1oZWFkaW5nKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoZSk7aWYobil7bGV0IHI9blsyXS50cmltKCk7aWYoLyMkLy50ZXN0KHIpKXtjb25zdCBpPXljKHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKHI9aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6blswXSxkZXB0aDpuWzFdLmxlbmd0aCx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19aHIoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMoZSk7aWYobilyZXR1cm57dHlwZToiaHIiLHJhdzpuWzBdfX1ibG9ja3F1b3RlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoZSk7aWYobil7Y29uc3Qgcj15YyhuWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGAKYCksaT10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBvPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocik7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWkse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpvLHRleHQ6cn19fWxpc3QoZSl7bGV0IG49dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoZSk7aWYobil7bGV0IHI9blsxXS50cmltKCk7Y29uc3QgaT1yLmxlbmd0aD4xLG89e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmksc3RhcnQ6aT8rci5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07cj1pP2BcXGR7MSw5fVxcJHtyLnNsaWNlKC0xKX1gOmBcXCR7cn1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHI9aT9yOiJbKistXSIpO2NvbnN0IGw9bmV3IFJlZ0V4cChgXiggezAsM30ke3J9KSgoPzpbCSBdW15cXG5dKik/KD86XFxufCQpKWApO2xldCBzPSIiLGE9IiIsdT0hMTtmb3IoO2U7KXtsZXQgYz0hMTtpZighKG49bC5leGVjKGUpKXx8dGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGUpKWJyZWFrO3M9blswXSxlPWUuc3Vic3RyaW5nKHMubGVuZ3RoKTtsZXQgZD1uWzJdLnNwbGl0KGAKYCwxKVswXS5yZXBsYWNlKC9eXHQrLyx2PT4iICIucmVwZWF0KDMqdi5sZW5ndGgpKSxmPWUuc3BsaXQoYApgLDEpWzBdLGg9MDt0aGlzLm9wdGlvbnMucGVkYW50aWM/KGg9MixhPWQudHJpbVN0YXJ0KCkpOihoPW5bMl0uc2VhcmNoKC9bXiBdLyksaD1oPjQ/MTpoLGE9ZC5zbGljZShoKSxoKz1uWzFdLmxlbmd0aCk7bGV0IGc9ITE7aWYoIWQmJi9eICokLy50ZXN0KGYpJiYocys9ZitgCmAsZT1lLnN1YnN0cmluZyhmLmxlbmd0aCsxKSxjPSEwKSwhYyl7Y29uc3Qgdj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxoLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgCV1bXlxcbl0qKT8oPzpcXG58JCkpYCkseT1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxoLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksXz1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxoLTEpfX0oPzpcYFxgXGB8fn5+KWApLFM9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsaC0xKX19I2ApO2Zvcig7ZTspe2NvbnN0IEU9ZS5zcGxpdChgCmAsMSlbMF07aWYoZj1FLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGY9Zi5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLF8udGVzdChmKXx8Uy50ZXN0KGYpfHx2LnRlc3QoZil8fHkudGVzdChlKSlicmVhaztpZihmLnNlYXJjaCgvW14gXS8pPj1ofHwhZi50cmltKCkpYSs9YApgK2Yuc2xpY2UoaCk7ZWxzZXtpZihnfHxkLnNlYXJjaCgvW14gXS8pPj00fHxfLnRlc3QoZCl8fFMudGVzdChkKXx8eS50ZXN0KGQpKWJyZWFrO2ErPWAKYCtmfSFnJiYhZi50cmltKCkmJihnPSEwKSxzKz1FK2AKYCxlPWUuc3Vic3RyaW5nKEUubGVuZ3RoKzEpLGQ9Zi5zbGljZShoKX19by5sb29zZXx8KHU/by5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KHMpJiYodT0hMCkpO2xldCBtPW51bGwsdzt0aGlzLm9wdGlvbnMuZ2ZtJiYobT0vXlxbWyB4WF1cXSAvLmV4ZWMoYSksbSYmKHc9bVswXSE9PSJbIF0gIixhPWEucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxvLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OnMsdGFzazohIW0sY2hlY2tlZDp3LGxvb3NlOiExLHRleHQ6YSx0b2tlbnM6W119KSxvLnJhdys9c31vLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnJhdz1zLnRyaW1FbmQoKSxvLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnRleHQ9YS50cmltRW5kKCksby5yYXc9by5yYXcudHJpbUVuZCgpO2ZvcihsZXQgYz0wO2M8by5pdGVtcy5sZW5ndGg7YysrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLG8uaXRlbXNbY10udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoby5pdGVtc1tjXS50ZXh0LFtdKSwhby5sb29zZSl7Y29uc3QgZD1vLml0ZW1zW2NdLnRva2Vucy5maWx0ZXIoaD0+aC50eXBlPT09InNwYWNlIiksZj1kLmxlbmd0aD4wJiZkLnNvbWUoaD0+L1xuLipcbi8udGVzdChoLnJhdykpO28ubG9vc2U9Zn1pZihvLmxvb3NlKWZvcihsZXQgYz0wO2M8by5pdGVtcy5sZW5ndGg7YysrKW8uaXRlbXNbY10ubG9vc2U9ITA7cmV0dXJuIG99fWh0bWwoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhlKTtpZihuKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6blswXSxwcmU6blsxXT09PSJwcmUifHxuWzFdPT09InNjcmlwdCJ8fG5bMV09PT0ic3R5bGUiLHRleHQ6blswXX19ZGVmKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGk9blsyXT9uWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLG89blszXT9uWzNdLnN1YnN0cmluZygxLG5bM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6blszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6cixyYXc6blswXSxocmVmOmksdGl0bGU6b319fXRhYmxlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKG4pe2lmKCEvWzp8XS8udGVzdChuWzJdKSlyZXR1cm47Y29uc3Qgcj17dHlwZToidGFibGUiLHJhdzpuWzBdLGhlYWRlcjpseChuWzFdKS5tYXAoaT0+KHt0ZXh0OmksdG9rZW5zOltdfSkpLGFsaWduOm5bMl0ucmVwbGFjZSgvXlx8fFx8ICokL2csIiIpLnNwbGl0KCJ8Iikscm93czpuWzNdJiZuWzNdLnRyaW0oKT9uWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KGAKYCk6W119O2lmKHIuaGVhZGVyLmxlbmd0aD09PXIuYWxpZ24ubGVuZ3RoKXtsZXQgaT1yLmFsaWduLmxlbmd0aCxvLGwscyxhO2ZvcihvPTA7bzxpO28rKyl7Y29uc3QgdT1yLmFsaWduW29dO3UmJigvXiAqLSs6ICokLy50ZXN0KHUpP3IuYWxpZ25bb109InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdCh1KT9yLmFsaWduW29dPSJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QodSk/ci5hbGlnbltvXT0ibGVmdCI6ci5hbGlnbltvXT1udWxsKX1mb3IoaT1yLnJvd3MubGVuZ3RoLG89MDtvPGk7bysrKXIucm93c1tvXT1seChyLnJvd3Nbb10sci5oZWFkZXIubGVuZ3RoKS5tYXAodT0+KHt0ZXh0OnUsdG9rZW5zOltdfSkpO2ZvcihpPXIuaGVhZGVyLmxlbmd0aCxsPTA7bDxpO2wrKylyLmhlYWRlcltsXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoci5oZWFkZXJbbF0udGV4dCk7Zm9yKGk9ci5yb3dzLmxlbmd0aCxsPTA7bDxpO2wrKylmb3IoYT1yLnJvd3NbbF0scz0wO3M8YS5sZW5ndGg7cysrKWFbc10udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGFbc10udGV4dCk7cmV0dXJuIHJ9fX1saGVhZGluZyhlKXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZihuKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6blswXSxkZXB0aDpuWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDpuWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuWzFdKX19cGFyYWdyYXBoKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMV0uY2hhckF0KG5bMV0ubGVuZ3RoLTEpPT09YApgP25bMV0uc2xpY2UoMCwtMSk6blsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6blswXSx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19dGV4dChlKXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6InRleHQiLHJhdzpuWzBdLHRleHQ6blswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoblswXSl9fWVzY2FwZShlKXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3Om5bMF0sdGV4dDpJbihuWzFdKX19dGFnKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYobilyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChuWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoblswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChuWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoblswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOiJodG1sIixyYXc6blswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDpuWzBdfX1saW5rKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGUpO2lmKG4pe2NvbnN0IHI9blsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KHIpKXtpZighLz4kLy50ZXN0KHIpKXJldHVybjtjb25zdCBsPXljKHIuc2xpY2UoMCwtMSksIlxcIik7aWYoKHIubGVuZ3RoLWwubGVuZ3RoKSUyPT09MClyZXR1cm59ZWxzZXtjb25zdCBsPXVPKG5bMl0sIigpIik7aWYobD4tMSl7Y29uc3QgYT0oblswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrblsxXS5sZW5ndGgrbDtuWzJdPW5bMl0uc3Vic3RyaW5nKDAsbCksblswXT1uWzBdLnN1YnN0cmluZygwLGEpLnRyaW0oKSxuWzNdPSIifX1sZXQgaT1uWzJdLG89IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCBsPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhpKTtsJiYoaT1sWzFdLG89bFszXSl9ZWxzZSBvPW5bM10/blszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaT1pLnRyaW0oKSwvXjwvLnRlc3QoaSkmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3Qocik/aT1pLnNsaWNlKDEpOmk9aS5zbGljZSgxLC0xKSksc3gobix7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6byYmby5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxuWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGUsbil7bGV0IHI7aWYoKHI9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGUpKXx8KHI9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoZSkpKXtsZXQgaT0oclsyXXx8clsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihpPW5baS50b0xvd2VyQ2FzZSgpXSwhaSl7Y29uc3Qgbz1yWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3Om8sdGV4dDpvfX1yZXR1cm4gc3gocixpLHJbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGUsbixyPSIiKXtsZXQgaT10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhlKTtpZighaXx8aVszXSYmci5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKXJldHVybjtpZighKGlbMV18fGlbMl18fCIiKXx8IXJ8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMocikpe2NvbnN0IGw9Wy4uLmlbMF1dLmxlbmd0aC0xO2xldCBzLGEsdT1sLGM9MDtjb25zdCBkPWlbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3IoZC5sYXN0SW5kZXg9MCxuPW4uc2xpY2UoLTEqZS5sZW5ndGgrbCk7KGk9ZC5leGVjKG4pKSE9bnVsbDspe2lmKHM9aVsxXXx8aVsyXXx8aVszXXx8aVs0XXx8aVs1XXx8aVs2XSwhcyljb250aW51ZTtpZihhPVsuLi5zXS5sZW5ndGgsaVszXXx8aVs0XSl7dSs9YTtjb250aW51ZX1lbHNlIGlmKChpWzVdfHxpWzZdKSYmbCUzJiYhKChsK2EpJTMpKXtjKz1hO2NvbnRpbnVlfWlmKHUtPWEsdT4wKWNvbnRpbnVlO2E9TWF0aC5taW4oYSxhK3UrYyk7Y29uc3QgZj1bLi4uaVswXV1bMF0ubGVuZ3RoLGg9ZS5zbGljZSgwLGwraS5pbmRleCtmK2EpO2lmKE1hdGgubWluKGwsYSklMil7Y29uc3QgbT1oLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OmgsdGV4dDptLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhtKX19Y29uc3QgZz1oLnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJzdHJvbmciLHJhdzpoLHRleHQ6Zyx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZyl9fX19Y29kZXNwYW4oZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoZSk7aWYobil7bGV0IHI9blsyXS5yZXBsYWNlKC9cbi9nLCIgIik7Y29uc3QgaT0vW14gXS8udGVzdChyKSxvPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpO3JldHVybiBpJiZvJiYocj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpKSxyPUluKHIsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3Om5bMF0sdGV4dDpyfX19YnIoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6ImJyIixyYXc6blswXX19ZGVsKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMoZSk7aWYobilyZXR1cm57dHlwZToiZGVsIixyYXc6blswXSx0ZXh0Om5bMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG5bMl0pfX1hdXRvbGluayhlKXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoZSk7aWYobil7bGV0IHIsaTtyZXR1cm4gblsyXT09PSJAIj8ocj1JbihuWzFdKSxpPSJtYWlsdG86IityKToocj1JbihuWzFdKSxpPXIpLHt0eXBlOiJsaW5rIixyYXc6blswXSx0ZXh0OnIsaHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19dXJsKGUpe2xldCBuO2lmKG49dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCByLGk7aWYoblsyXT09PSJAIilyPUluKG5bMF0pLGk9Im1haWx0bzoiK3I7ZWxzZXtsZXQgbztkbyBvPW5bMF0sblswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoblswXSlbMF07d2hpbGUobyE9PW5bMF0pO3I9SW4oblswXSksblsxXT09PSJ3d3cuIj9pPSJodHRwOi8vIituWzBdOmk9blswXX1yZXR1cm57dHlwZToibGluayIscmF3Om5bMF0sdGV4dDpyLGhyZWY6aSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6cix0ZXh0OnJ9XX19fWlubGluZVRleHQoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoZSk7aWYobil7bGV0IHI7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz9yPW5bMF06cj1JbihuWzBdKSx7dHlwZToidGV4dCIscmF3Om5bMF0sdGV4dDpyfX19fWNvbnN0IHVlPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpNZCxsaGVhZGluZzovXig/IWJ1bGwgKSgoPzoufFxuKD8hXHMqP1xufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rL307dWUuX2xhYmVsPS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvO3VlLl90aXRsZT0vKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpLzt1ZS5kZWY9QmUodWUuZGVmKS5yZXBsYWNlKCJsYWJlbCIsdWUuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsdWUuX3RpdGxlKS5nZXRSZWdleCgpO3VlLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLzt1ZS5saXN0SXRlbVN0YXJ0PUJlKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsdWUuYnVsbGV0KS5nZXRSZWdleCgpO3VlLmxpc3Q9QmUodWUubGlzdCkucmVwbGFjZSgvYnVsbC9nLHVlLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89Iit1ZS5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKTt1ZS5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIjt1ZS5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS87dWUuaHRtbD1CZSh1ZS5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsdWUuX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsdWUuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKTt1ZS5saGVhZGluZz1CZSh1ZS5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLHVlLmJ1bGxldCkuZ2V0UmVnZXgoKTt1ZS5wYXJhZ3JhcGg9QmUodWUuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHVlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLHVlLl90YWcpLmdldFJlZ2V4KCk7dWUuYmxvY2txdW90ZT1CZSh1ZS5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLHVlLnBhcmFncmFwaCkuZ2V0UmVnZXgoKTt1ZS5ub3JtYWw9ey4uLnVlfTt1ZS5nZm09ey4uLnVlLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKilcXG4gezAsM30oKD86XFx8ICopPzo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKD86XFx8ICopPykoPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifTt1ZS5nZm0udGFibGU9QmUodWUuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsdWUuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIix1ZS5fdGFnKS5nZXRSZWdleCgpO3VlLmdmbS5wYXJhZ3JhcGg9QmUodWUuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHVlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLHVlLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLHVlLl90YWcpLmdldFJlZ2V4KCk7dWUucGVkYW50aWM9ey4uLnVlLm5vcm1hbCxodG1sOkJlKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLHVlLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpNZCxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpCZSh1ZS5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLHVlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsdWUubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCBZPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOk1kLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpNZCx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O1kuX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iO1kucHVuY3R1YXRpb249QmUoWS5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csWS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2c7WS5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2c7WS5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZztZLl9jb21tZW50PUJlKHVlLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpO1kuZW1TdHJvbmcubERlbGltPUJlKFkuZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxZLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtZLmVtU3Ryb25nLnJEZWxpbUFzdD1CZShZLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1kuZW1TdHJvbmcuckRlbGltVW5kPUJlKFkuZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WS5hbnlQdW5jdHVhdGlvbj1CZShZLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WS5fZXNjYXBlcz1CZShZLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WS5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LztZLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvO1kuYXV0b2xpbms9QmUoWS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixZLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixZLl9lbWFpbCkuZ2V0UmVnZXgoKTtZLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy87WS50YWc9QmUoWS50YWcpLnJlcGxhY2UoImNvbW1lbnQiLFkuX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsWS5fYXR0cmlidXRlKS5nZXRSZWdleCgpO1kuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vO1kuX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi87WS5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLztZLmxpbms9QmUoWS5saW5rKS5yZXBsYWNlKCJsYWJlbCIsWS5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLFkuX2hyZWYpLnJlcGxhY2UoInRpdGxlIixZLl90aXRsZSkuZ2V0UmVnZXgoKTtZLnJlZmxpbms9QmUoWS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsWS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsdWUuX2xhYmVsKS5nZXRSZWdleCgpO1kubm9saW5rPUJlKFkubm9saW5rKS5yZXBsYWNlKCJyZWYiLHVlLl9sYWJlbCkuZ2V0UmVnZXgoKTtZLnJlZmxpbmtTZWFyY2g9QmUoWS5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsWS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLFkubm9saW5rKS5nZXRSZWdleCgpO1kubm9ybWFsPXsuLi5ZfTtZLnBlZGFudGljPXsuLi5ZLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6QmUoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLFkuX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6QmUoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLFkuX2xhYmVsKS5nZXRSZWdleCgpfTtZLmdmbT17Li4uWS5ub3JtYWwsZXNjYXBlOkJlKFkuZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfTtZLmdmbS51cmw9QmUoWS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLFkuZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKTtZLmJyZWFrcz17Li4uWS5nZm0sYnI6QmUoWS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6QmUoWS5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9O2NsYXNzIElye2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsInRva2VucyIpO1FlKHRoaXMsIm9wdGlvbnMiKTtRZSh0aGlzLCJzdGF0ZSIpO1FlKHRoaXMsInRva2VuaXplciIpO1FlKHRoaXMsImlubGluZVF1ZXVlIik7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8ZmwsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgTGQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBuPXtibG9jazp1ZS5ub3JtYWwsaW5saW5lOlkubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KG4uYmxvY2s9dWUucGVkYW50aWMsbi5pbmxpbmU9WS5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKG4uYmxvY2s9dWUuZ2ZtLHRoaXMub3B0aW9ucy5icmVha3M/bi5pbmxpbmU9WS5icmVha3M6bi5pbmxpbmU9WS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPW59c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazp1ZSxpbmxpbmU6WX19c3RhdGljIGxleChlLG4pe3JldHVybiBuZXcgSXIobikubGV4KGUpfXN0YXRpYyBsZXhJbmxpbmUoZSxuKXtyZXR1cm4gbmV3IElyKG4pLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2UoL1xyXG58XHIvZyxgCmApLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7bGV0IG47Zm9yKDtuPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMobi5zcmMsbi50b2tlbnMpO3JldHVybiB0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLG49W10pe3RoaXMub3B0aW9ucy5wZWRhbnRpYz9lPWUucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmU9ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChzLGEsdSk9PmErIiAgICAiLnJlcGVhdCh1Lmxlbmd0aCkpO2xldCByLGksbyxsO2Zvcig7ZTspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUocz0+KHI9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLG4pKT8oZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKSwhMCk6ITEpKSl7aWYocj10aGlzLnRva2VuaXplci5zcGFjZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHIucmF3Lmxlbmd0aD09PTEmJm4ubGVuZ3RoPjA/bltuLmxlbmd0aC0xXS5yYXcrPWAKYDpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5jb2RlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJihpLnR5cGU9PT0icGFyYWdyYXBoInx8aS50eXBlPT09InRleHQiKT8oaS5yYXcrPWAKYCtyLnJhdyxpLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5mZW5jZXMoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5oZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHIoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGlzdChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmh0bWwoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWYoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPW5bbi5sZW5ndGgtMV0saSYmKGkudHlwZT09PSJwYXJhZ3JhcGgifHxpLnR5cGU9PT0idGV4dCIpPyhpLnJhdys9YApgK3IucmF3LGkudGV4dCs9YApgK3IucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWkudGV4dCk6dGhpcy50b2tlbnMubGlua3Nbci50YWddfHwodGhpcy50b2tlbnMubGlua3Nbci50YWddPXtocmVmOnIuaHJlZix0aXRsZTpyLnRpdGxlfSk7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50YWJsZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKG89ZSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IHM9MS8wO2NvbnN0IGE9ZS5zbGljZSgxKTtsZXQgdTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goYz0+e3U9Yy5jYWxsKHtsZXhlcjp0aGlzfSxhKSx0eXBlb2YgdT09Im51bWJlciImJnU+PTAmJihzPU1hdGgubWluKHMsdSkpfSksczwxLzAmJnM+PTAmJihvPWUuc3Vic3RyaW5nKDAscysxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihyPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChvKSkpe2k9bltuLmxlbmd0aC0xXSxsJiZpLnR5cGU9PT0icGFyYWdyYXBoIj8oaS5yYXcrPWAKYCtyLnJhdyxpLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1pLnRleHQpOm4ucHVzaChyKSxsPW8ubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGV4dChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGk9bltuLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1gCmArci5yYXcsaS50ZXh0Kz1gCmArci50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYoZSl7Y29uc3Qgcz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKHMpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKHMpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsbn1pbmxpbmUoZSxuPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6bn0pLG59aW5saW5lVG9rZW5zKGUsbj1bXSl7bGV0IHIsaSxvLGw9ZSxzLGEsdTtpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgYz1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoYy5sZW5ndGg+MClmb3IoOyhzPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobCkpIT1udWxsOyljLmluY2x1ZGVzKHNbMF0uc2xpY2Uoc1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGw9bC5zbGljZSgwLHMuaW5kZXgpKyJbIisiYSIucmVwZWF0KHNbMF0ubGVuZ3RoLTIpKyJdIitsLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7KHM9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGwpKSE9bnVsbDspbD1sLnNsaWNlKDAscy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoc1swXS5sZW5ndGgtMikrIl0iK2wuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7KHM9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobCkpIT1udWxsOylsPWwuc2xpY2UoMCxzLmluZGV4KSsiKysiK2wuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOylpZihhfHwodT0iIiksYT0hMSwhKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKGM9PihyPWMuY2FsbCh7bGV4ZXI6dGhpc30sZSxuKSk/KGU9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gociksITApOiExKSkpe2lmKHI9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGFnKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJnIudHlwZT09PSJ0ZXh0IiYmaS50eXBlPT09InRleHQiPyhpLnJhdys9ci5yYXcsaS50ZXh0Kz1yLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJnIudHlwZT09PSJ0ZXh0IiYmaS50eXBlPT09InRleHQiPyhpLnJhdys9ci5yYXcsaS50ZXh0Kz1yLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGUsbCx1KSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuYnIoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWwoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5hdXRvbGluayhlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihyPXRoaXMudG9rZW5pemVyLnVybChlKSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYobz1lLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IGM9MS8wO2NvbnN0IGQ9ZS5zbGljZSgxKTtsZXQgZjt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKGg9PntmPWguY2FsbCh7bGV4ZXI6dGhpc30sZCksdHlwZW9mIGY9PSJudW1iZXIiJiZmPj0wJiYoYz1NYXRoLm1pbihjLGYpKX0pLGM8MS8wJiZjPj0wJiYobz1lLnN1YnN0cmluZygwLGMrMSkpfWlmKHI9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChvKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHIucmF3LnNsaWNlKC0xKSE9PSJfIiYmKHU9ci5yYXcuc2xpY2UoLTEpKSxhPSEwLGk9bltuLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1yLnJhdyxpLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKGUpe2NvbnN0IGM9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihjKTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcihjKX19cmV0dXJuIG59fWNsYXNzIERke2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsIm9wdGlvbnMiKTt0aGlzLm9wdGlvbnM9ZXx8Zmx9Y29kZShlLG4scil7dmFyIG87Y29uc3QgaT0obz0obnx8IiIpLm1hdGNoKC9eXFMqLykpPT1udWxsP3ZvaWQgMDpvWzBdO3JldHVybiBlPWUucmVwbGFjZSgvXG4kLywiIikrYApgLGk/JzxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLScrSW4oaSkrJyI+Jysocj9lOkluKGUsITApKStgPC9jb2RlPjwvcHJlPgpgOiI8cHJlPjxjb2RlPiIrKHI/ZTpJbihlLCEwKSkrYDwvY29kZT48L3ByZT4KYH1ibG9ja3F1b3RlKGUpe3JldHVybmA8YmxvY2txdW90ZT4KJHtlfTwvYmxvY2txdW90ZT4KYH1odG1sKGUsbil7cmV0dXJuIGV9aGVhZGluZyhlLG4scil7cmV0dXJuYDxoJHtufT4ke2V9PC9oJHtufT4KYH1ocigpe3JldHVybmA8aHI+CmB9bGlzdChlLG4scil7Y29uc3QgaT1uPyJvbCI6InVsIixvPW4mJnIhPT0xPycgc3RhcnQ9IicrcisnIic6IiI7cmV0dXJuIjwiK2krbytgPgpgK2UrIjwvIitpK2A+CmB9bGlzdGl0ZW0oZSxuLHIpe3JldHVybmA8bGk+JHtlfTwvbGk+CmB9Y2hlY2tib3goZSl7cmV0dXJuIjxpbnB1dCAiKyhlPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCI+J31wYXJhZ3JhcGgoZSl7cmV0dXJuYDxwPiR7ZX08L3A+CmB9dGFibGUoZSxuKXtyZXR1cm4gbiYmKG49YDx0Ym9keT4ke259PC90Ym9keT5gKSxgPHRhYmxlPgo8dGhlYWQ+CmArZStgPC90aGVhZD4KYCtuK2A8L3RhYmxlPgpgfXRhYmxlcm93KGUpe3JldHVybmA8dHI+CiR7ZX08L3RyPgpgfXRhYmxlY2VsbChlLG4pe2NvbnN0IHI9bi5oZWFkZXI/InRoIjoidGQiO3JldHVybihuLmFsaWduP2A8JHtyfSBhbGlnbj0iJHtuLmFsaWdufSI+YDpgPCR7cn0+YCkrZStgPC8ke3J9PgpgfXN0cm9uZyhlKXtyZXR1cm5gPHN0cm9uZz4ke2V9PC9zdHJvbmc+YH1lbShlKXtyZXR1cm5gPGVtPiR7ZX08L2VtPmB9Y29kZXNwYW4oZSl7cmV0dXJuYDxjb2RlPiR7ZX08L2NvZGU+YH1icigpe3JldHVybiI8YnI+In1kZWwoZSl7cmV0dXJuYDxkZWw+JHtlfTwvZGVsPmB9bGluayhlLG4scil7Y29uc3QgaT1veChlKTtpZihpPT09bnVsbClyZXR1cm4gcjtlPWk7bGV0IG89JzxhIGhyZWY9IicrZSsnIic7cmV0dXJuIG4mJihvKz0nIHRpdGxlPSInK24rJyInKSxvKz0iPiIrcisiPC9hPiIsb31pbWFnZShlLG4scil7Y29uc3QgaT1veChlKTtpZihpPT09bnVsbClyZXR1cm4gcjtlPWk7bGV0IG89YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7cn0iYDtyZXR1cm4gbiYmKG8rPWAgdGl0bGU9IiR7bn0iYCksbys9Ij4iLG99dGV4dChlKXtyZXR1cm4gZX19Y2xhc3Mgd3Z7c3Ryb25nKGUpe3JldHVybiBlfWVtKGUpe3JldHVybiBlfWNvZGVzcGFuKGUpe3JldHVybiBlfWRlbChlKXtyZXR1cm4gZX1odG1sKGUpe3JldHVybiBlfXRleHQoZSl7cmV0dXJuIGV9bGluayhlLG4scil7cmV0dXJuIiIrcn1pbWFnZShlLG4scil7cmV0dXJuIiIrcn1icigpe3JldHVybiIifX1jbGFzcyBqcntjb25zdHJ1Y3RvcihlKXtRZSh0aGlzLCJvcHRpb25zIik7UWUodGhpcywicmVuZGVyZXIiKTtRZSh0aGlzLCJ0ZXh0UmVuZGVyZXIiKTt0aGlzLm9wdGlvbnM9ZXx8ZmwsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IERkLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IHd2fXN0YXRpYyBwYXJzZShlLG4pe3JldHVybiBuZXcganIobikucGFyc2UoZSl9c3RhdGljIHBhcnNlSW5saW5lKGUsbil7cmV0dXJuIG5ldyBqcihuKS5wYXJzZUlubGluZShlKX1wYXJzZShlLG49ITApe2xldCByPSIiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0pe2NvbnN0IGw9byxzPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZihzIT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe3IrPXN8fCIiO2NvbnRpbnVlfX1zd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjp7cis9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e2NvbnN0IGw9bztyKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShsLnRva2VucyksbC5kZXB0aCxzTyh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSkpO2NvbnRpbnVlfWNhc2UiY29kZSI6e2NvbnN0IGw9bztyKz10aGlzLnJlbmRlcmVyLmNvZGUobC50ZXh0LGwubGFuZywhIWwuZXNjYXBlZCk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e2NvbnN0IGw9bztsZXQgcz0iIixhPSIiO2ZvcihsZXQgYz0wO2M8bC5oZWFkZXIubGVuZ3RoO2MrKylhKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGwuaGVhZGVyW2NdLnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpsLmFsaWduW2NdfSk7cys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhhKTtsZXQgdT0iIjtmb3IobGV0IGM9MDtjPGwucm93cy5sZW5ndGg7YysrKXtjb25zdCBkPWwucm93c1tjXTthPSIiO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWErPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoZFtmXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246bC5hbGlnbltmXX0pO3UrPXRoaXMucmVuZGVyZXIudGFibGVyb3coYSl9cis9dGhpcy5yZW5kZXJlci50YWJsZShzLHUpO2NvbnRpbnVlfWNhc2UiYmxvY2txdW90ZSI6e2NvbnN0IGw9byxzPXRoaXMucGFyc2UobC50b2tlbnMpO3IrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShzKTtjb250aW51ZX1jYXNlImxpc3QiOntjb25zdCBsPW8scz1sLm9yZGVyZWQsYT1sLnN0YXJ0LHU9bC5sb29zZTtsZXQgYz0iIjtmb3IobGV0IGQ9MDtkPGwuaXRlbXMubGVuZ3RoO2QrKyl7Y29uc3QgZj1sLml0ZW1zW2RdLGg9Zi5jaGVja2VkLGc9Zi50YXNrO2xldCBtPSIiO2lmKGYudGFzayl7Y29uc3Qgdz10aGlzLnJlbmRlcmVyLmNoZWNrYm94KCEhaCk7dT9mLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udHlwZT09PSJwYXJhZ3JhcGgiPyhmLnRva2Vuc1swXS50ZXh0PXcrIiAiK2YudG9rZW5zWzBdLnRleHQsZi50b2tlbnNbMF0udG9rZW5zJiZmLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJmYudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYoZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9dysiICIrZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpmLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OncrIiAifSk6bSs9dysiICJ9bSs9dGhpcy5wYXJzZShmLnRva2Vucyx1KSxjKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKG0sZywhIWgpfXIrPXRoaXMucmVuZGVyZXIubGlzdChjLHMsYSk7Y29udGludWV9Y2FzZSJodG1sIjp7Y29uc3QgbD1vO3IrPXRoaXMucmVuZGVyZXIuaHRtbChsLnRleHQsbC5ibG9jayk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntjb25zdCBsPW87cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShsLnRva2VucykpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBsPW8scz1sLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zKTpsLnRleHQ7Zm9yKDtpKzE8ZS5sZW5ndGgmJmVbaSsxXS50eXBlPT09InRleHQiOylsPWVbKytpXSxzKz1gCmArKGwudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUobC50b2tlbnMpOmwudGV4dCk7cis9bj90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTpzO2NvbnRpbnVlfWRlZmF1bHQ6e2NvbnN0IGw9J1Rva2VuIHdpdGggIicrby50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIHJ9cGFyc2VJbmxpbmUoZSxuKXtuPW58fHRoaXMucmVuZGVyZXI7bGV0IHI9IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IG89ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSl7Y29uc3QgbD10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbyk7aWYobCE9PSExfHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKG8udHlwZSkpe3IrPWx8fCIiO2NvbnRpbnVlfX1zd2l0Y2goby50eXBlKXtjYXNlImVzY2FwZSI6e2NvbnN0IGw9bztyKz1uLnRleHQobC50ZXh0KTticmVha31jYXNlImh0bWwiOntjb25zdCBsPW87cis9bi5odG1sKGwudGV4dCk7YnJlYWt9Y2FzZSJsaW5rIjp7Y29uc3QgbD1vO3IrPW4ubGluayhsLmhyZWYsbC50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlImltYWdlIjp7Y29uc3QgbD1vO3IrPW4uaW1hZ2UobC5ocmVmLGwudGl0bGUsbC50ZXh0KTticmVha31jYXNlInN0cm9uZyI6e2NvbnN0IGw9bztyKz1uLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlImVtIjp7Y29uc3QgbD1vO3IrPW4uZW0odGhpcy5wYXJzZUlubGluZShsLnRva2VucyxuKSk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e2NvbnN0IGw9bztyKz1uLmNvZGVzcGFuKGwudGV4dCk7YnJlYWt9Y2FzZSJiciI6e3IrPW4uYnIoKTticmVha31jYXNlImRlbCI6e2NvbnN0IGw9bztyKz1uLmRlbCh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlInRleHQiOntjb25zdCBsPW87cis9bi50ZXh0KGwudGV4dCk7YnJlYWt9ZGVmYXVsdDp7Y29uc3QgbD0nVG9rZW4gd2l0aCAiJytvLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gcn19Y2xhc3MgTWF7Y29uc3RydWN0b3IoZSl7UWUodGhpcywib3B0aW9ucyIpO3RoaXMub3B0aW9ucz1lfHxmbH1wcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfX1RZShNYSwicGFzc1Rocm91Z2hIb29rcyIsbmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSk7dmFyIFJ1LHdtLG9mLE9FO2NsYXNzIGRPe2NvbnN0cnVjdG9yKC4uLmUpe2loKHRoaXMsUnUpO2loKHRoaXMsb2YpO1FlKHRoaXMsImRlZmF1bHRzIixfdigpKTtRZSh0aGlzLCJvcHRpb25zIix0aGlzLnNldE9wdGlvbnMpO1FlKHRoaXMsInBhcnNlIixYdSh0aGlzLFJ1LHdtKS5jYWxsKHRoaXMsSXIubGV4LGpyLnBhcnNlKSk7UWUodGhpcywicGFyc2VJbmxpbmUiLFh1KHRoaXMsUnUsd20pLmNhbGwodGhpcyxJci5sZXhJbmxpbmUsanIucGFyc2VJbmxpbmUpKTtRZSh0aGlzLCJQYXJzZXIiLGpyKTtRZSh0aGlzLCJSZW5kZXJlciIsRGQpO1FlKHRoaXMsIlRleHRSZW5kZXJlciIsd3YpO1FlKHRoaXMsIkxleGVyIixJcik7UWUodGhpcywiVG9rZW5pemVyIixMZCk7UWUodGhpcywiSG9va3MiLE1hKTt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsbil7dmFyIGksbztsZXQgcj1bXTtmb3IoY29uc3QgbCBvZiBlKXN3aXRjaChyPXIuY29uY2F0KG4uY2FsbCh0aGlzLGwpKSxsLnR5cGUpe2Nhc2UidGFibGUiOntjb25zdCBzPWw7Zm9yKGNvbnN0IGEgb2Ygcy5oZWFkZXIpcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsbikpO2Zvcihjb25zdCBhIG9mIHMucm93cylmb3IoY29uc3QgdSBvZiBhKXI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHUudG9rZW5zLG4pKTticmVha31jYXNlImxpc3QiOntjb25zdCBzPWw7cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMocy5pdGVtcyxuKSk7YnJlYWt9ZGVmYXVsdDp7Y29uc3Qgcz1sOyhvPShpPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyk9PW51bGw/dm9pZCAwOmkuY2hpbGRUb2tlbnMpIT1udWxsJiZvW3MudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW3MudHlwZV0uZm9yRWFjaChhPT57cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoc1thXSxuKSl9KTpzLnRva2VucyYmKHI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHMudG9rZW5zLG4pKSl9fXJldHVybiByfXVzZSguLi5lKXtjb25zdCBuPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGUuZm9yRWFjaChyPT57Y29uc3QgaT17Li4ucn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxpLmFzeW5jfHwhMSxyLmV4dGVuc2lvbnMmJihyLmV4dGVuc2lvbnMuZm9yRWFjaChvPT57aWYoIW8ubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIG8pe2NvbnN0IGw9bi5yZW5kZXJlcnNbby5uYW1lXTtsP24ucmVuZGVyZXJzW28ubmFtZV09ZnVuY3Rpb24oLi4ucyl7bGV0IGE9by5yZW5kZXJlci5hcHBseSh0aGlzLHMpO3JldHVybiBhPT09ITEmJihhPWwuYXBwbHkodGhpcyxzKSksYX06bi5yZW5kZXJlcnNbby5uYW1lXT1vLnJlbmRlcmVyfWlmKCJ0b2tlbml6ZXIiaW4gbyl7aWYoIW8ubGV2ZWx8fG8ubGV2ZWwhPT0iYmxvY2siJiZvLmxldmVsIT09ImlubGluZSIpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7Y29uc3QgbD1uW28ubGV2ZWxdO2w/bC51bnNoaWZ0KG8udG9rZW5pemVyKTpuW28ubGV2ZWxdPVtvLnRva2VuaXplcl0sby5zdGFydCYmKG8ubGV2ZWw9PT0iYmxvY2siP24uc3RhcnRCbG9jaz9uLnN0YXJ0QmxvY2sucHVzaChvLnN0YXJ0KTpuLnN0YXJ0QmxvY2s9W28uc3RhcnRdOm8ubGV2ZWw9PT0iaW5saW5lIiYmKG4uc3RhcnRJbmxpbmU/bi5zdGFydElubGluZS5wdXNoKG8uc3RhcnQpOm4uc3RhcnRJbmxpbmU9W28uc3RhcnRdKSl9ImNoaWxkVG9rZW5zImluIG8mJm8uY2hpbGRUb2tlbnMmJihuLmNoaWxkVG9rZW5zW28ubmFtZV09by5jaGlsZFRva2Vucyl9KSxpLmV4dGVuc2lvbnM9biksci5yZW5kZXJlcil7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgRGQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IGwgaW4gci5yZW5kZXJlcil7Y29uc3Qgcz1yLnJlbmRlcmVyW2xdLGE9bCx1PW9bYV07b1thXT0oLi4uYyk9PntsZXQgZD1zLmFwcGx5KG8sYyk7cmV0dXJuIGQ9PT0hMSYmKGQ9dS5hcHBseShvLGMpKSxkfHwiIn19aS5yZW5kZXJlcj1vfWlmKHIudG9rZW5pemVyKXtjb25zdCBvPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgTGQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IGwgaW4gci50b2tlbml6ZXIpe2NvbnN0IHM9ci50b2tlbml6ZXJbbF0sYT1sLHU9b1thXTtvW2FdPSguLi5jKT0+e2xldCBkPXMuYXBwbHkobyxjKTtyZXR1cm4gZD09PSExJiYoZD11LmFwcGx5KG8sYykpLGR9fWkudG9rZW5pemVyPW99aWYoci5ob29rcyl7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgTWE7Zm9yKGNvbnN0IGwgaW4gci5ob29rcyl7Y29uc3Qgcz1yLmhvb2tzW2xdLGE9bCx1PW9bYV07TWEucGFzc1Rocm91Z2hIb29rcy5oYXMobCk/b1thXT1jPT57aWYodGhpcy5kZWZhdWx0cy5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMuY2FsbChvLGMpKS50aGVuKGY9PnUuY2FsbChvLGYpKTtjb25zdCBkPXMuY2FsbChvLGMpO3JldHVybiB1LmNhbGwobyxkKX06b1thXT0oLi4uYyk9PntsZXQgZD1zLmFwcGx5KG8sYyk7cmV0dXJuIGQ9PT0hMSYmKGQ9dS5hcHBseShvLGMpKSxkfX1pLmhvb2tzPW99aWYoci53YWxrVG9rZW5zKXtjb25zdCBvPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxsPXIud2Fsa1Rva2VucztpLndhbGtUb2tlbnM9ZnVuY3Rpb24ocyl7bGV0IGE9W107cmV0dXJuIGEucHVzaChsLmNhbGwodGhpcyxzKSksbyYmKGE9YS5jb25jYXQoby5jYWxsKHRoaXMscykpKSxhfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLml9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSxuKXtyZXR1cm4gSXIubGV4KGUsbj8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUsbil7cmV0dXJuIGpyLnBhcnNlKGUsbj8/dGhpcy5kZWZhdWx0cyl9fVJ1PW5ldyBXZWFrU2V0LHdtPWZ1bmN0aW9uKGUsbil7cmV0dXJuKHIsaSk9Pntjb25zdCBvPXsuLi5pfSxsPXsuLi50aGlzLmRlZmF1bHRzLC4uLm99O3RoaXMuZGVmYXVsdHMuYXN5bmM9PT0hMCYmby5hc3luYz09PSExJiYobC5zaWxlbnR8fGNvbnNvbGUud2FybigibWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gVGhlIGFzeW5jOiBmYWxzZSBvcHRpb24gc2VudCB0byBwYXJzZSB3aWxsIGJlIGlnbm9yZWQuIiksbC5hc3luYz0hMCk7Y29uc3Qgcz1YdSh0aGlzLG9mLE9FKS5jYWxsKHRoaXMsISFsLnNpbGVudCwhIWwuYXN5bmMpO2lmKHR5cGVvZiByPiJ1Inx8cj09PW51bGwpcmV0dXJuIHMobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiByIT0ic3RyaW5nIilyZXR1cm4gcyhuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYobC5ob29rcyYmKGwuaG9va3Mub3B0aW9ucz1sKSxsLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUobC5ob29rcz9sLmhvb2tzLnByZXByb2Nlc3Mocik6cikudGhlbihhPT5lKGEsbCkpLnRoZW4oYT0+bC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhhLGwud2Fsa1Rva2VucykpLnRoZW4oKCk9PmEpOmEpLnRoZW4oYT0+bihhLGwpKS50aGVuKGE9PmwuaG9va3M/bC5ob29rcy5wb3N0cHJvY2VzcyhhKTphKS5jYXRjaChzKTt0cnl7bC5ob29rcyYmKHI9bC5ob29rcy5wcmVwcm9jZXNzKHIpKTtjb25zdCBhPWUocixsKTtsLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhhLGwud2Fsa1Rva2Vucyk7bGV0IHU9bihhLGwpO3JldHVybiBsLmhvb2tzJiYodT1sLmhvb2tzLnBvc3Rwcm9jZXNzKHUpKSx1fWNhdGNoKGEpe3JldHVybiBzKGEpfX19LG9mPW5ldyBXZWFrU2V0LE9FPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHI9PntpZihyLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCxlKXtjb25zdCBpPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK0luKHIubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIG4/UHJvbWlzZS5yZXNvbHZlKGkpOml9aWYobilyZXR1cm4gUHJvbWlzZS5yZWplY3Qocik7dGhyb3cgcn19O2NvbnN0IFFvPW5ldyBkTztmdW5jdGlvbiBIZSh0LGUpe3JldHVybiBRby5wYXJzZSh0LGUpfUhlLm9wdGlvbnM9SGUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gUW8uc2V0T3B0aW9ucyh0KSxIZS5kZWZhdWx0cz1Rby5kZWZhdWx0cyxURShIZS5kZWZhdWx0cyksSGV9O0hlLmdldERlZmF1bHRzPV92O0hlLmRlZmF1bHRzPWZsO0hlLnVzZT1mdW5jdGlvbiguLi50KXtyZXR1cm4gUW8udXNlKC4uLnQpLEhlLmRlZmF1bHRzPVFvLmRlZmF1bHRzLFRFKEhlLmRlZmF1bHRzKSxIZX07SGUud2Fsa1Rva2Vucz1mdW5jdGlvbih0LGUpe3JldHVybiBRby53YWxrVG9rZW5zKHQsZSl9O0hlLnBhcnNlSW5saW5lPVFvLnBhcnNlSW5saW5lO0hlLlBhcnNlcj1qcjtIZS5wYXJzZXI9anIucGFyc2U7SGUuUmVuZGVyZXI9RGQ7SGUuVGV4dFJlbmRlcmVyPXd2O0hlLkxleGVyPUlyO0hlLmxleGVyPUlyLmxleDtIZS5Ub2tlbml6ZXI9TGQ7SGUuSG9va3M9TWE7SGUucGFyc2U9SGU7SGUub3B0aW9ucztIZS5zZXRPcHRpb25zO0hlLnVzZTtIZS53YWxrVG9rZW5zO0hlLnBhcnNlSW5saW5lO2pyLnBhcnNlO2NvbnN0IGZPPUlyLmxleDtmdW5jdGlvbiBoTyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIHBPKHQsZSl7dmFyIG49dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixpLG8sbCxzPVtdLGE9ITAsdT0hMTt0cnl7aWYobz0obj1uLmNhbGwodCkpLm5leHQsZT09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2E9ITF9ZWxzZSBmb3IoOyEoYT0ocj1vLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09ZSk7YT0hMCk7fWNhdGNoKGMpe3U9ITAsaT1jfWZpbmFsbHl7dHJ5e2lmKCFhJiZuLnJldHVybiE9bnVsbCYmKGw9bi5yZXR1cm4oKSxPYmplY3QobCkhPT1sKSlyZXR1cm59ZmluYWxseXtpZih1KXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBTbSh0LGUpeyhlPT1udWxsfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIFN2KHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBTbSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gU20odCxlKX19ZnVuY3Rpb24gbU8oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gZ08odCxlKXtyZXR1cm4gaE8odCl8fHBPKHQsZSl8fFN2KHQsZSl8fG1PKCl9ZnVuY3Rpb24gdk8odCxlKXtpZih0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PT1udWxsKXJldHVybiB0O3ZhciBuPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybihlPT09InN0cmluZyI/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24geU8odCl7dmFyIGU9dk8odCwic3RyaW5nIik7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sIj9lOlN0cmluZyhlKX1mdW5jdGlvbiBxdCh0LGUsbil7cmV0dXJuIGU9eU8oZSksZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1mdW5jdGlvbiB4Tyh0LGUpe3ZhciBuPXR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49U3YodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtuJiYodD1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbihhKXt0aHJvdyBhfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBvPSEwLGw9ITEscztyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIGE9bi5uZXh0KCk7cmV0dXJuIG89YS5kb25lLGF9LGU6ZnVuY3Rpb24oYSl7bD0hMCxzPWF9LGY6ZnVuY3Rpb24oKXt0cnl7IW8mJm4ucmV0dXJuIT1udWxsJiZuLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBzfX19fWZ1bmN0aW9uIF9PKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIFNtKHQpfWZ1bmN0aW9uIHdPKHQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fHRbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBTTygpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gRW0odCl7cmV0dXJuIF9PKHQpfHx3Tyh0KXx8U3YodCl8fFNPKCl9dmFyIEVPPS9eZGF0YTooaW1hZ2VcLyhwbmd8anBlZ3xqcGd8Z2lmfHdlYnB8Ym1wfHRpZmZ8aWNvfHN2Z1wreG1sKSk7YmFzZTY0LC87ZnVuY3Rpb24gRXYodCl7dmFyIGU9RU8uZXhlYyh0KTtpZihlJiZlWzFdKXJldHVybiBlWzFdfWZ1bmN0aW9uIEN2KHQpe3JldHVybiB0PT09ImltYWdlL3N2Zyt4bWwiPyJzdmciOnQ9PT0iaW1hZ2Uvdm5kLm1pY3Jvc29mdC5pY29uIj8iaWNvIjp0LnN0YXJ0c1dpdGgoImltYWdlLyIpP3Quc2xpY2UoNik6dH12YXIgQ089L15oKFtcZCtdKSQvO2Z1bmN0aW9uIGtPKHQpe3ZhciBlPXQuY2hpbGRyZW4ubWFwKGJPKTtyZXR1cm4gJE8oZSl9ZnVuY3Rpb24gYk8odCl7aWYodC50eXBlPT09ImhlYWRpbmciKXt2YXIgZSxuPSIiLHI9TnVtYmVyKChlPXQudGFnLm1hdGNoKENPKSk9PT1udWxsfHxlPT09dm9pZCAwP3ZvaWQgMDplWzFdKTtpZihOdW1iZXIuaXNOYU4ocikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGhlYWRlciBkZXB0aCIpO2Zvcih2YXIgaT0wO2k8TnVtYmVyKHIpO2krKyluKz0iIyI7dmFyIG89WyIiLmNvbmNhdChuLCIgIildO3JldHVybnt0eXBlOiJibG9jayIsY2hpbGRyZW46by5jb25jYXQuYXBwbHkobyxFbSh0LmNoaWxkcmVuLm1hcChDbSkpKX19ZWxzZXtpZih0LnR5cGU9PT0icGFyYWdyYXBoIilyZXR1cm4gdC5jaGlsZHJlbi5sZW5ndGg9PT0wP3t0eXBlOiJibG9jayIsY2hpbGRyZW46WyI8YnIgLz4iXX06e3R5cGU6ImJsb2NrIixjaGlsZHJlbjp0LmNoaWxkcmVuLm1hcChmdW5jdGlvbihzKXtyZXR1cm4gQ20ocyl9KX07aWYodC50eXBlPT09Imxpc3QiKXJldHVybnt0eXBlOiJibG9jayIsY2hpbGRyZW46dC5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKHMsYSl7cmV0dXJuIEFFKE1FKHQpLHMsMCxhPT09MCl9KX07dmFyIGw9dDt0aHJvdyBuZXcgRXJyb3IoIlVuaGFuZGxlZCBub2RlIHR5cGU6ICIuY29uY2F0KCJ0eXBlImluIGw/ImV4aGF1c3RpdmVDaGVjay50eXBlIjoidW5rbm93biIpKX19ZnVuY3Rpb24gJE8odCl7Zm9yKHZhciBlPVtgCmBdLG49W10scj17fSxpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV0sbD14TyhvLmNoaWxkcmVuKSxzO3RyeXtmb3IobC5zKCk7IShzPWwubigpKS5kb25lOyl7dmFyIGE9cy52YWx1ZTtpZih0eXBlb2YgYT09InN0cmluZyIpZVtlLmxlbmd0aC0xXSs9YTtlbHNle2lmKGEudHlwZT09PSJpbWFnZSIpbi5wdXNoKE9PKGEscikpO2Vsc2UgaWYoYS50eXBlPT09ImxpbmsiKW4ucHVzaChBTyhhKSk7ZWxzZXt2YXIgdT1hO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBub2RlIHR5cGU6ICIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHUsbnVsbCwyKSkpfWUucHVzaCgiIil9fX1jYXRjaChjKXtsLmUoYyl9ZmluYWxseXtsLmYoKX1pPT09dC5sZW5ndGgtMT9lW2UubGVuZ3RoLTFdKz1gCmA6ZVtlLmxlbmd0aC0xXSs9YAoKYH1yZXR1cm4gcXQocXQocXQocXQoe30sbm4sInJpY2h0ZXh0IiksInRlbXBsYXRlU3RyaW5ncyIsZSksImV4cHJzIixuKSwiZmlsZXMiLHIpfWZ1bmN0aW9uIFBFKHQpe3ZhciBlPXR5cGVvZiB0LmZvcm1hdD09Im51bWJlciI/Tk8odC5mb3JtYXQpOltdLG49dC50ZXh0LnRyaW1TdGFydCgpLHI9dC50ZXh0Lmxlbmd0aC1uLmxlbmd0aDtuPW4udHJpbUVuZCgpO3ZhciBpPXQudGV4dC5sZW5ndGgtbi5sZW5ndGgtcjtyZXR1cm4gZS5pbmNsdWRlcygiYm9sZCIpJiZlLmluY2x1ZGVzKCJpdGFsaWMiKT9uPSIqKioiLmNvbmNhdChuLCIqKioiKTplLmluY2x1ZGVzKCJib2xkIik/bj0iKioiLmNvbmNhdChuLCIqKiIpOmUuaW5jbHVkZXMoIml0YWxpYyIpJiYobj0iXyIuY29uY2F0KG4sIl8iKSksZS5pbmNsdWRlcygibGluZS10aHJvdWdoIikmJihuPSJ+fiIuY29uY2F0KG4sIn5+IikpLCIiLmNvbmNhdCgiICIucmVwZWF0KHIpKS5jb25jYXQobikuY29uY2F0KCIgIi5yZXBlYXQoaSkpfWZ1bmN0aW9uIENtKHQpe3JldHVybiB0LnR5cGU9PT0idGV4dCI/UEUodCk6dC50eXBlPT09ImxpbmVicmVhayI/YApgOnR9ZnVuY3Rpb24gQUUodCxlLG4pe3ZhciByLGk9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLG89aT8iIjpgCmAsbD1bIiIuY29uY2F0KG8pLmNvbmNhdCgiICIucmVwZWF0KG4pKS5jb25jYXQodCldO3JldHVybigocj1lLmNoaWxkcmVuKT09PW51bGx8fHI9PT12b2lkIDB8fChyPXJbMF0pPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci50eXBlKSE9PSJsaXN0IiYmbC5wdXNoKCIgIiksbC5jb25jYXQoZS5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLnR5cGU9PT0ibGlzdCI/cy5jaGlsZHJlbi5mbGF0TWFwKGZ1bmN0aW9uKGEpe3JldHVybiBBRShNRShzKSxhLG4rNCl9KTpbQ20ocyldfSkpfWZ1bmN0aW9uIE1FKHQpe2lmKHQubGlzdFR5cGU9PT0iYnVsbGV0IilyZXR1cm4iLSI7aWYodC5saXN0VHlwZT09PSJudW1iZXIiKXJldHVybiIxLiI7dGhyb3cgbmV3IEVycm9yKCJVbmhhbmRsZWQgbGlzdCB0eXBlOiAiLmNvbmNhdCh0Lmxpc3RUeXBlKSl9dmFyIFRPPXtib2xkOjEsaXRhbGljOjIsImxpbmUtdGhyb3VnaCI6NH07ZnVuY3Rpb24gTk8odCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKFRPKS5mbGF0TWFwKGZ1bmN0aW9uKGUpe3ZhciBuPWdPKGUsMikscj1uWzBdLGk9blsxXTtyZXR1cm4oaSZ0KT09PWk/W3JdOltdfSl9dmFyIFJPPW5ldyBUZXh0RW5jb2RlcjtmdW5jdGlvbiBPTyh0LGUpe2lmKHQuc3JjLnN0YXJ0c1dpdGgoImRhdGE6Iikpe3ZhciBuPU9uLmdldFNIQTI1Nkhhc2goUk8uZW5jb2RlKHQuc3JjKSkscj1Fdih0LnNyYyk7aWYocj09PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBkZXRlY3QgTWltZSBUeXBlIGZvciBpbWFnZTogIi5jb25jYXQodC5zcmMpKTt2YXIgaT1DdihyKSxvPSIvcHVibGljLyIuY29uY2F0KG4sIi4iKS5jb25jYXQoaSk7cmV0dXJuIGVbb109dC5zcmMscXQocXQocXQoe30sbm4sImZpbGUiKSxSbixvKSwibWV0YWRhdGEiLHt3aWR0aDp0LndpZHRofHwwLGhlaWdodDp0LmhlaWdodHx8MCxzaGEyNTY6bnx8IiIsbWltZVR5cGU6cn0pfWVsc2V7dmFyIGw9UE8oInNoYTI1NiIsdC5zcmMpO3JldHVybiBxdChxdChxdCh7fSxubiwiZmlsZSIpLFJuLCIvcHVibGljIi5jb25jYXQodC5zcmMuc3BsaXQoIj8iKVswXSkpLCJtZXRhZGF0YSIse3dpZHRoOnQud2lkdGh8fDAsaGVpZ2h0OnQuaGVpZ2h0fHwwLHNoYTI1NjpsfHwiIixtaW1lVHlwZTp0Lm1pbWVUeXBlfHwiIn0pfX1mdW5jdGlvbiBQTyh0LGUpe3ZhciBuPWUuc3BsaXQoIj8iKTtpZighKG4ubGVuZ3RoPDIpKXt2YXIgcj1uWzFdLGk9bmV3IFVSTFNlYXJjaFBhcmFtcyhyKTtpZihpLmhhcyh0KSlyZXR1cm4gaS5nZXQodCl9fWZ1bmN0aW9uIEFPKHQpe3JldHVybiBxdChxdChxdCh7fSxubiwibGluayIpLCJocmVmIix0LnVybCksImNoaWxkcmVuIix0LmNoaWxkcmVuLm1hcChQRSkpfWZ1bmN0aW9uIGF4KHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gbHQodCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdIT1udWxsP2FyZ3VtZW50c1tlXTp7fTtlJTI/YXgoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3F0KHQscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOmF4KE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gdH12YXIgJHI9e3ZlcnNpb246MSxmb3JtYXQ6IiIsaW5kZW50OjAsZGlyZWN0aW9uOm51bGx9O2Z1bmN0aW9uIExzKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToidGV4dCIsZm9ybWF0OiIiLHRleHQ6dH0pO2lmKCJ0YWciaW4gdClzd2l0Y2godC50YWcpe2Nhc2UiaDEiOnJldHVybiB4bCh0KTtjYXNlImgyIjpyZXR1cm4geGwodCk7Y2FzZSJoMyI6cmV0dXJuIHhsKHQpO2Nhc2UiaDQiOnJldHVybiB4bCh0KTtjYXNlImg1IjpyZXR1cm4geGwodCk7Y2FzZSJoNiI6cmV0dXJuIHhsKHQpO2Nhc2UibGkiOnJldHVybiB6Tyh0KTtjYXNlInAiOnJldHVybiBJTyh0KTtjYXNlInVsIjpyZXR1cm4gdXgodCk7Y2FzZSJvbCI6cmV0dXJuIHV4KHQpO2Nhc2Uic3BhbiI6cmV0dXJuIExFKHQpO2Nhc2UiYSI6cmV0dXJuIExPKHQpO2Nhc2UiaW1nIjpyZXR1cm4gTU8odCk7Y2FzZSJiciI6cmV0dXJuIGU/bHQobHQoe30sJHIpLHt9LHt0eXBlOiJsaW5lYnJlYWsifSk6ak8oKTtkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIG5vZGUgdGFnOiAiK0pTT04uc3RyaW5naWZ5KHQsbnVsbCwyKSl9ZWxzZSB0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBub2RlOiAiK0pTT04uc3RyaW5naWZ5KHQsbnVsbCwyKSl9ZnVuY3Rpb24gTU8odCl7dmFyIGU9dC5zcmM7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToiaW1hZ2UiLHNyYzplLHdpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0LG1pbWVUeXBlOnQubWltZVR5cGV9KX1mdW5jdGlvbiBMTyh0KXtyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJsaW5rIix1cmw6dC5ocmVmLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMcyhlKX0pfSl9ZnVuY3Rpb24gRE8odCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7Zm9ybWF0OiIiLHR5cGU6InJvb3QiLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMcyhlKX0pfSl9ZnVuY3Rpb24geGwodCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToiaGVhZGluZyIsdGFnOnQudGFnLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBMcyhlKX0pfSl9ZnVuY3Rpb24gSU8odCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjp0LmNoaWxkcmVuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTHMoZSwhMCl9KX0pfWZ1bmN0aW9uIGpPKCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToicGFyYWdyYXBoIixjaGlsZHJlbjpbXX0pfWZ1bmN0aW9uIHpPKHQpe3JldHVybiBsdChsdCh7fSwkcikse30se3R5cGU6Imxpc3RpdGVtIixjaGlsZHJlbjp0LmNoaWxkcmVuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTHMoZSwhMCl9KX0pfWZ1bmN0aW9uIHV4KHQpe3JldHVybiBsdChsdCh7fSwkcikse30se3R5cGU6Imxpc3QiLGxpc3RUeXBlOnQudGFnPT09Im9sIj8ibnVtYmVyIjoiYnVsbGV0IixjaGlsZHJlbjp0LmNoaWxkcmVuLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gTHMoZSl9KX0sdC5kaXI/e2RpcmVjdGlvbjp0LmRpcn06e2RpcmVjdGlvbjpudWxsfSl9dmFyIEZPPXtib2xkOjEsaXRhbGljOjIsImxpbmUtdGhyb3VnaCI6NH07ZnVuY3Rpb24gQk8odCl7cmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKGUsbil7cmV0dXJuIGV8Rk9bbl19LDApfWZ1bmN0aW9uIExFKHQpe3ZhciBlPXQuY2hpbGRyZW5bMF07cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9sdChsdCh7fSwkcikse30se3R5cGU6InRleHQiLHRleHQ6ZSxmb3JtYXQ6Qk8odC5jbGFzc2VzKX0pOkxFKGx0KGx0KHt9LGUpLHt9LHtjbGFzc2VzOnQuY2xhc3Nlcy5jb25jYXQoZS5jbGFzc2VzKX0pKX12YXIgSWQ9Jzx2YWwgdmFsdWU9Iicsa209JyI+JyxibT0iPC92YWw+IjtmdW5jdGlvbiBtcih0LGUsbil7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGg+MyYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTohMSxpPVtdLG89ZnVuY3Rpb24oKXt2YXIgYT10W25dO2lmKGEudHlwZT09PSJoZWFkaW5nIilpLnB1c2goe3RhZzoiaCIuY29uY2F0KGEuZGVwdGgpLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJwYXJhZ3JhcGgiKWkucHVzaCh7dGFnOiJwIixjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0ic3Ryb25nIilpLnB1c2goe3RhZzoic3BhbiIsY2xhc3NlczpbImJvbGQiXSxjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0iZW0iKWkucHVzaCh7dGFnOiJzcGFuIixjbGFzc2VzOlsiaXRhbGljIl0sY2hpbGRyZW46bXIoYS50b2tlbnM/YS50b2tlbnM6W10sZSwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09ImRlbCIpaS5wdXNoKHt0YWc6InNwYW4iLGNsYXNzZXM6WyJsaW5lLXRocm91Z2giXSxjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0idGV4dCIpaWYoInRva2VucyJpbiBhJiZBcnJheS5pc0FycmF5KGEudG9rZW5zKSlpLnB1c2guYXBwbHkoaSxFbShtcihhLnRva2VucyxlLG4scikuY2hpbGRyZW4pKTtlbHNlIGlmKHImJnR5cGVvZiBhLnJhdz09InN0cmluZyIpe3ZhciB1PWEucmF3LnNwbGl0KGAKYCksYz11LmZsYXRNYXAoZnVuY3Rpb24oRSwkKXtyZXR1cm4gJD09PXUubGVuZ3RoLTE/W0VdOltFLHt0YWc6ImJyIixjaGlsZHJlbjpbXX1dfSk7aS5wdXNoLmFwcGx5KGksRW0oYykpfWVsc2UgaS5wdXNoKGEucmF3KTtlbHNlIGlmKGEudHlwZT09PSJsaXN0IilpLnB1c2goe3RhZzphLm9yZGVyZWQ/Im9sIjoidWwiLGNoaWxkcmVuOm1yKGEuaXRlbXMsZSwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09Imxpc3RfaXRlbSIpaS5wdXNoKHt0YWc6ImxpIixjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDAsITApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGUhPT0ic3BhY2UiKWlmKGEudHlwZT09PSJodG1sIil7aWYoYS50ZXh0PT09Ym0pcmV0dXJue3Y6e2NoaWxkcmVuOmksY3Vyc29yOm59fTt2YXIgZD1hLnRleHQuaW5kZXhPZihrbSk7aWYoYS50ZXh0LnN0YXJ0c1dpdGgoSWQpJiZkPi0xKXt2YXIgZj1OdW1iZXIoYS50ZXh0LnNsaWNlKElkLmxlbmd0aCxkKSk7aWYoTnVtYmVyLmlzTmFOKGYpKXRocm93IEVycm9yKCJJbGxlZ2FsIHZhbCBpbnRlcm1lZGlhdGUgbm9kZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSkpKTt2YXIgaD1tcih0Lm1hcChmdW5jdGlvbihFKXtyZXR1cm4gRS50eXBlPT09ImxpbmsifHxFLnR5cGU9PT0ibGlzdCI/e3R5cGU6InRleHQiLHJhdzpFLnJhdyx0ZXh0OkUucmF3fTpFfSksZSxuKzEpLGc9aC5jaGlsZHJlbixtPWguY3Vyc29yLHc9ZVtmXTtpZih3Ll90eXBlPT09ImxpbmsiKWkucHVzaCh7dGFnOiJhIixocmVmOncuaHJlZixjaGlsZHJlbjpnfSk7ZWxzZSBpZih3Ll90eXBlPT09ImZpbGUiKXt2YXIgdix5LF87aS5wdXNoKHt0YWc6ImltZyIsc3JjOk9uLmNvbnZlcnRGaWxlU291cmNlKHcpLnVybCx3aWR0aDoodj13Lm1ldGFkYXRhKT09PW51bGx8fHY9PT12b2lkIDA/dm9pZCAwOnYud2lkdGgsaGVpZ2h0Oih5PXcubWV0YWRhdGEpPT09bnVsbHx8eT09PXZvaWQgMD92b2lkIDA6eS5oZWlnaHQsbWltZVR5cGU6KF89dy5tZXRhZGF0YSk9PT1udWxsfHxfPT09dm9pZCAwP3ZvaWQgMDpfLm1pbWVUeXBlLGNoaWxkcmVuOltdfSl9bj1tfXZhciBTPS88YnJccypcLz8+L2dpO2EudGV4dC50cmltKCkubWF0Y2goUykmJmkucHVzaCh7dGFnOiJiciIsY2hpbGRyZW46W119KX1lbHNlIGEudHlwZT09PSJsaW5rIj9hLnJhdz09PWEuaHJlZj9pLnB1c2goYS5yYXcpOmkucHVzaCh7dGFnOiJhIixocmVmOmEuaHJlZixjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDApLmNoaWxkcmVufSk6YS50eXBlPT09ImJyIj9pLnB1c2goe3RhZzoiYnIiLGNoaWxkcmVuOltdfSk6Y29uc29sZS5lcnJvcigiQ291bGQgbm90IHBhcnNlIG1hcmtkb3duOiB1bnN1cHBvcnRlZCB0b2tlbiB0eXBlOiAiLmNvbmNhdChhLnR5cGUsIi4gRm91bmQ6ICIpLmNvbmNhdChhLnJhdykpO24rK30sbDtuPHQubGVuZ3RoOylpZihsPW8oKSxsKXJldHVybiBsLnY7cmV0dXJue2NoaWxkcmVuOmksY3Vyc29yOm59fWZ1bmN0aW9uIERFKHQpe3ZhciBlPXQudGVtcGxhdGVTdHJpbmdzLG49dC5leHBycyxyPWUuZmxhdE1hcChmdW5jdGlvbihhLHUpe3ZhciBjPW5bdV07cmV0dXJuIGM/Y1tubl09PT0ibGluayI/YS5jb25jYXQoIiIuY29uY2F0KElkKS5jb25jYXQodSkuY29uY2F0KGttKS5jb25jYXQoYy5jaGlsZHJlblswXSkuY29uY2F0KGJtKSk6YS5jb25jYXQoIiIuY29uY2F0KElkKS5jb25jYXQodSkuY29uY2F0KGttKS5jb25jYXQoYm0pKTphfSkuam9pbigiIiksaT1mTyhyLHtnZm06ITB9KSxvPW1yKGksbiwwKSxsPW8uY2hpbGRyZW4scz1vLmN1cnNvcjtpZihzIT09aS5sZW5ndGgpdGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWRseSB0ZXJtaW5hdGVkIG1hcmtkb3duIHBhcnNpbmcuIFBvc3NpYmxlIHJlYXNvbjogdW5jbG9zZWQgaHRtbCB0YWc/Iik7cmV0dXJuIHF0KHF0KHt9LG5uLCJyaWNodGV4dCIpLCJjaGlsZHJlbiIsbCl9dmFyIHduPXt9LCR0PXt9LFV0PXt9LHNlPV9lO2xldCBqZD1uZXcgTWFwO2Z1bmN0aW9uIGN4KHQpe2Zvcig7dCE9bnVsbDspe2lmKHQubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSlyZXR1cm4gdDt0PXQuZmlyc3RDaGlsZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkeCh0KXtsZXQgZT10LnBhcmVudE5vZGU7aWYoZT09bnVsbCl0aHJvdyBFcnJvcigiU2hvdWxkIG5ldmVyIGhhcHBlbiIpO3JldHVybltlLEFycmF5LmZyb20oZS5jaGlsZE5vZGVzKS5pbmRleE9mKHQpXX1mdW5jdGlvbiBJRSh0KXtsZXQgZT17fTt0PXQuc3BsaXQoIjsiKTtmb3IobGV0IG4gb2YgdClpZihuIT09IiIpe2xldFtyLGldPW4uc3BsaXQoLzooW15dKykvKTtlW3IudHJpbSgpXT1pLnRyaW0oKX1yZXR1cm4gZX1mdW5jdGlvbiB6ZCh0KXtsZXQgZT1qZC5nZXQodCk7cmV0dXJuIGU9PT12b2lkIDAmJihlPUlFKHQpLGpkLnNldCh0LGUpKSxlfWZ1bmN0aW9uIFVPKHQpe2xldCBlPSIiO2ZvcihsZXQgbiBpbiB0KW4mJihlKz1gJHtufTogJHt0W25dfTtgKTtyZXR1cm4gZX1mdW5jdGlvbiBfbCh0LGUpe3ZhciBuPXpkKCJnZXRTdHlsZSJpbiB0P3QuZ2V0U3R5bGUoKTp0LnN0eWxlKTtlPU9iamVjdC5lbnRyaWVzKGUpLnJlZHVjZSgocixbaSxvXSk9PihvPT09bnVsbD9kZWxldGUgcltpXTpyW2ldPW8sciksey4uLm59KSxuPVVPKGUpLHQuc2V0U3R5bGUobiksamQuc2V0KG4sZSl9ZnVuY3Rpb24gakUodCxlKXt2YXIgbj10LmdldE5vZGVzKCkscj1uLmxlbmd0aDtpZihzZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24odCkpe2Zvcih2YXIgaT1zZS4kY3JlYXRlUmFuZ2VTZWxlY3Rpb24oKSxvPWkuYW5jaG9yLGw9aS5mb2N1cyxzPTA7czxyO3MrKyl7dmFyIGE9bltzXTtzZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShhKSYmKG8uc2V0KGEuZ2V0S2V5KCksMCwiZWxlbWVudCIpLGwuc2V0KGEuZ2V0S2V5KCksYS5nZXRDaGlsZHJlblNpemUoKSwiZWxlbWVudCIpLGpFKHNlLiRub3JtYWxpemVTZWxlY3Rpb25fX0VYUEVSSU1FTlRBTChpKSxlKSl9c2UuJHNldFNlbGVjdGlvbih0KX1lbHNlIGlmKC0tcixpPW5bMF0sbz1uW3JdLHQuaXNDb2xsYXBzZWQoKSlfbCh0LGUpO2Vsc2V7dmFyIHU9dC5hbmNob3IsYz10LmZvY3VzO3M9aS5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCxhPWMub2Zmc2V0O3ZhciBkPXUub2Zmc2V0LGY9dS5pc0JlZm9yZShjKTtsPWY/ZDphLHQ9Zj9hOmQ7dmFyIGg9Zj91LnR5cGU6Yy50eXBlLGc9Zj9jLnR5cGU6dS50eXBlO2lmKHU9Zj9jLmtleTp1LmtleSxzZS4kaXNUZXh0Tm9kZShpKSYmbD09PXMmJihjPWkuZ2V0TmV4dFNpYmxpbmcoKSxzZS4kaXNUZXh0Tm9kZShjKSYmKGw9ZD0wLGk9YykpLG4ubGVuZ3RoPT09MSlzZS4kaXNUZXh0Tm9kZShpKSYmKGw9aD09PSJlbGVtZW50Ij8wOmQ+YT9hOmQsdD1nPT09ImVsZW1lbnQiP3M6ZD5hP2Q6YSxsIT09dCYmKGw9PT0wJiZ0PT09cz8oX2woaSxlKSxpLnNlbGVjdChsLHQpKToobj1pLnNwbGl0VGV4dChsLHQpLG49bD09PTA/blswXTpuWzFdLF9sKG4sZSksbi5zZWxlY3QoMCx0LWwpKSkpO2Vsc2UgZm9yKHNlLiRpc1RleHROb2RlKGkpJiZsPGkuZ2V0VGV4dENvbnRlbnRTaXplKCkmJihsIT09MCYmKGk9aS5zcGxpdFRleHQobClbMV0pLF9sKGksZSkpLHNlLiRpc1RleHROb2RlKG8pJiYobD1vLmdldFRleHRDb250ZW50KCkubGVuZ3RoLG8uX19rZXkhPT11JiZ0IT09MCYmKHQ9bCksdCE9PWwmJihbb109by5zcGxpdFRleHQodCkpLHQhPT0wJiZfbChvLGUpKSx0PTE7dDxyO3QrKylsPW5bdF0scz1sLmdldEtleSgpLHNlLiRpc1RleHROb2RlKGwpJiZzIT09aS5nZXRLZXkoKSYmcyE9PW8uZ2V0S2V5KCkmJiFsLmlzVG9rZW4oKSYmX2wobCxlKX19ZnVuY3Rpb24gV08odCl7Zm9yKDt0IT09bnVsbCYmIXNlLiRpc1Jvb3RPclNoYWRvd1Jvb3QodCk7KXtsZXQgZT10LmdldExhdGVzdCgpLG49dC5nZXRQYXJlbnQoKTtlLmdldENoaWxkcmVuU2l6ZSgpPT09MCYmdC5yZW1vdmUoITApLHQ9bn19ZnVuY3Rpb24gQmgodCxlLG4scixpPW51bGwpe2lmKGUubGVuZ3RoIT09MCl7dmFyIG89ZVswXSxsPW5ldyBNYXAscz1bXTtvPXNlLiRpc0VsZW1lbnROb2RlKG8pP286by5nZXRQYXJlbnRPclRocm93KCksby5pc0lubGluZSgpJiYobz1vLmdldFBhcmVudE9yVGhyb3coKSk7Zm9yKHZhciBhPSExO28hPT1udWxsOyl7dmFyIHU9by5nZXRQcmV2aW91c1NpYmxpbmcoKTtpZih1IT09bnVsbCl7bz11LGE9ITA7YnJlYWt9aWYobz1vLmdldFBhcmVudE9yVGhyb3coKSxzZS4kaXNSb290T3JTaGFkb3dSb290KG8pKWJyZWFrfXU9bmV3IFNldDtmb3IodmFyIGM9MDtjPG47YysrKXt2YXIgZD1lW2NdO3NlLiRpc0VsZW1lbnROb2RlKGQpJiZkLmdldENoaWxkcmVuU2l6ZSgpPT09MCYmdS5hZGQoZC5nZXRLZXkoKSl9dmFyIGY9bmV3IFNldDtmb3IoYz0wO2M8bjtjKyspe2Q9ZVtjXTt2YXIgaD1kLmdldFBhcmVudCgpO2lmKGghPT1udWxsJiZoLmlzSW5saW5lKCkmJihoPWguZ2V0UGFyZW50KCkpLGghPT1udWxsJiZzZS4kaXNMZWFmTm9kZShkKSYmIWYuaGFzKGQuZ2V0S2V5KCkpKXtpZihkPWguZ2V0S2V5KCksbC5nZXQoZCk9PT12b2lkIDApe2xldCBnPXIoKTtnLnNldEZvcm1hdChoLmdldEZvcm1hdFR5cGUoKSksZy5zZXRJbmRlbnQoaC5nZXRJbmRlbnQoKSkscy5wdXNoKGcpLGwuc2V0KGQsZyksaC5nZXRDaGlsZHJlbigpLmZvckVhY2gobT0+e2cuYXBwZW5kKG0pLGYuYWRkKG0uZ2V0S2V5KCkpLHNlLiRpc0VsZW1lbnROb2RlKG0pJiZtLmdldENoaWxkcmVuS2V5cygpLmZvckVhY2godz0+Zi5hZGQodykpfSksV08oaCl9fWVsc2UgdS5oYXMoZC5nZXRLZXkoKSkmJihoPXIoKSxoLnNldEZvcm1hdChkLmdldEZvcm1hdFR5cGUoKSksaC5zZXRJbmRlbnQoZC5nZXRJbmRlbnQoKSkscy5wdXNoKGgpLGQucmVtb3ZlKCEwKSl9aWYoaSE9PW51bGwpZm9yKGU9MDtlPHMubGVuZ3RoO2UrKylpLmFwcGVuZChzW2VdKTtpZihlPW51bGwsc2UuJGlzUm9vdE9yU2hhZG93Um9vdChvKSlpZihhKWlmKGkhPT1udWxsKW8uaW5zZXJ0QWZ0ZXIoaSk7ZWxzZSBmb3IoaT1zLmxlbmd0aC0xOzA8PWk7aS0tKW8uaW5zZXJ0QWZ0ZXIoc1tpXSk7ZWxzZSBpZihhPW8uZ2V0Rmlyc3RDaGlsZCgpLHNlLiRpc0VsZW1lbnROb2RlKGEpJiYobz1hKSxhPT09bnVsbClpZihpKW8uYXBwZW5kKGkpO2Vsc2UgZm9yKGk9MDtpPHMubGVuZ3RoO2krKylhPXNbaV0sby5hcHBlbmQoYSksZT1hO2Vsc2UgaWYoaSE9PW51bGwpYS5pbnNlcnRCZWZvcmUoaSk7ZWxzZSBmb3Iobz0wO288cy5sZW5ndGg7bysrKWk9c1tvXSxhLmluc2VydEJlZm9yZShpKSxlPWk7ZWxzZSBpZihpKW8uaW5zZXJ0QWZ0ZXIoaSk7ZWxzZSBmb3IoaT1zLmxlbmd0aC0xOzA8PWk7aS0tKWE9c1tpXSxvLmluc2VydEFmdGVyKGEpLGU9YTtzPXNlLiRnZXRQcmV2aW91c1NlbGVjdGlvbigpLHNlLiRpc1JhbmdlU2VsZWN0aW9uKHMpJiZzLmFuY2hvci5nZXROb2RlKCkuaXNBdHRhY2hlZCgpJiZzLmZvY3VzLmdldE5vZGUoKS5pc0F0dGFjaGVkKCk/c2UuJHNldFNlbGVjdGlvbihzLmNsb25lKCkpOmUhPT1udWxsP2Uuc2VsZWN0RW5kKCk6dC5kaXJ0eT0hMH19ZnVuY3Rpb24gekUodCxlLG4scil7dC5tb2RpZnkoZT8iZXh0ZW5kIjoibW92ZSIsbixyKX1mdW5jdGlvbiBGRSh0KXtyZXR1cm4gdD10LmFuY2hvci5nZXROb2RlKCksKHNlLiRpc1Jvb3ROb2RlKHQpP3Q6dC5nZXRQYXJlbnRPclRocm93KCkpLmdldERpcmVjdGlvbigpPT09InJ0bCJ9VXQuJGFkZE5vZGVTdHlsZT1mdW5jdGlvbih0KXt0PXQuZ2V0U3R5bGUoKTtsZXQgZT1JRSh0KTtqZC5zZXQodCxlKX07VXQuJGNsb25lV2l0aFByb3BlcnRpZXM9ZnVuY3Rpb24odCl7bGV0IGU9dC5jb25zdHJ1Y3Rvci5jbG9uZSh0KTtyZXR1cm4gZS5fX3BhcmVudD10Ll9fcGFyZW50LGUuX19uZXh0PXQuX19uZXh0LGUuX19wcmV2PXQuX19wcmV2LHNlLiRpc0VsZW1lbnROb2RlKHQpJiZzZS4kaXNFbGVtZW50Tm9kZShlKT8oZS5fX2ZpcnN0PXQuX19maXJzdCxlLl9fbGFzdD10Ll9fbGFzdCxlLl9fc2l6ZT10Ll9fc2l6ZSxlLl9fZm9ybWF0PXQuX19mb3JtYXQsZS5fX2luZGVudD10Ll9faW5kZW50LGUuX19kaXI9dC5fX2RpcixlKTooc2UuJGlzVGV4dE5vZGUodCkmJnNlLiRpc1RleHROb2RlKGUpJiYoZS5fX2Zvcm1hdD10Ll9fZm9ybWF0LGUuX19zdHlsZT10Ll9fc3R5bGUsZS5fX21vZGU9dC5fX21vZGUsZS5fX2RldGFpbD10Ll9fZGV0YWlsKSxlKX07VXQuJGdldFNlbGVjdGlvblN0eWxlVmFsdWVGb3JQcm9wZXJ0eT1mdW5jdGlvbih0LGUsbj0iIil7bGV0IHI9bnVsbCxpPXQuZ2V0Tm9kZXMoKTt2YXIgbz10LmFuY2hvcixsPXQuZm9jdXMscz10LmlzQmFja3dhcmQoKTtsZXQgYT1zP2wub2Zmc2V0Om8ub2Zmc2V0O2lmKG89cz9sLmdldE5vZGUoKTpvLmdldE5vZGUoKSx0LnN0eWxlIT09IiImJih0PXpkKHQuc3R5bGUpLHQhPT1udWxsJiZlIGluIHQpKXJldHVybiB0W2VdO2Zvcih0PTA7dDxpLmxlbmd0aDt0Kyspe3ZhciB1PWlbdF07aWYoKHQ9PT0wfHxhIT09MHx8IXUuaXMobykpJiZzZS4kaXNUZXh0Tm9kZSh1KSl7aWYobD1lLHM9bix1PXUuZ2V0U3R5bGUoKSx1PXpkKHUpLGw9dSE9PW51bGwmJnVbbF18fHMscj09PW51bGwpcj1sO2Vsc2UgaWYociE9PWwpe3I9IiI7YnJlYWt9fX1yZXR1cm4gcj09PW51bGw/bjpyfTtVdC4kaXNBdE5vZGVFbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PSJ0ZXh0Ij90Lm9mZnNldD09PXQuZ2V0Tm9kZSgpLmdldFRleHRDb250ZW50U2l6ZSgpOnQub2Zmc2V0PT09dC5nZXROb2RlKCkuZ2V0Q2hpbGRyZW5TaXplKCl9O1V0LiRpc1BhcmVudEVsZW1lbnRSVEw9RkU7VXQuJG1vdmVDYXJldFNlbGVjdGlvbj16RTtVdC4kbW92ZUNoYXJhY3Rlcj1mdW5jdGlvbih0LGUsbil7bGV0IHI9RkUodCk7ekUodCxlLG4/IXI6ciwiY2hhcmFjdGVyIil9O1V0LiRwYXRjaFN0eWxlVGV4dD1qRTtVdC4kc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe2xldCBlPXQuYW5jaG9yO3Q9dC5mb2N1czt2YXIgbj1lLmdldE5vZGUoKS5nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCkuZ2V0UGFyZW50T3JUaHJvdygpO2xldCByPW4uZ2V0Rmlyc3REZXNjZW5kYW50KCk7bj1uLmdldExhc3REZXNjZW5kYW50KCk7bGV0IGk9ImVsZW1lbnQiLG89ImVsZW1lbnQiLGw9MDtzZS4kaXNUZXh0Tm9kZShyKT9pPSJ0ZXh0IjpzZS4kaXNFbGVtZW50Tm9kZShyKXx8cj09PW51bGx8fChyPXIuZ2V0UGFyZW50T3JUaHJvdygpKSxzZS4kaXNUZXh0Tm9kZShuKT8obz0idGV4dCIsbD1uLmdldFRleHRDb250ZW50U2l6ZSgpKTpzZS4kaXNFbGVtZW50Tm9kZShuKXx8bj09PW51bGx8fChuPW4uZ2V0UGFyZW50T3JUaHJvdygpKSxyJiZuJiYoZS5zZXQoci5nZXRLZXkoKSwwLGkpLHQuc2V0KG4uZ2V0S2V5KCksbCxvKSl9O1V0LiRzZXRCbG9ja3NUeXBlPWZ1bmN0aW9uKHQsZSl7aWYodC5hbmNob3Iua2V5PT09InJvb3QiKXtlPWUoKTt2YXIgbj1zZS4kZ2V0Um9vdCgpOyh0PW4uZ2V0Rmlyc3RDaGlsZCgpKT90LnJlcGxhY2UoZSwhMCk6bi5hcHBlbmQoZSl9ZWxzZSBmb3Iobj10LmdldE5vZGVzKCksdD10LmFuY2hvci5nZXROb2RlKCkuZ2V0UGFyZW50T3JUaHJvdygpLG4uaW5kZXhPZih0KT09PS0xJiZuLnB1c2godCksdC5pc0lubGluZSgpJiYodD10LmdldFBhcmVudE9yVGhyb3coKSxuLmluZGV4T2YodCk9PT0tMSYmbi5wdXNoKHQpKSx0PTA7dDxuLmxlbmd0aDt0Kyspe2xldCBvPW5bdF07dmFyIHI9bztpZighc2UuJGlzRWxlbWVudE5vZGUocil8fHNlLiRpc1Jvb3RPclNoYWRvd1Jvb3Qocikpcj0hMTtlbHNle3ZhciBpPXIuZ2V0Rmlyc3RDaGlsZCgpO2k9aT09PW51bGx8fHNlLiRpc0xpbmVCcmVha05vZGUoaSl8fHNlLiRpc1RleHROb2RlKGkpfHxpLmlzSW5saW5lKCkscj0hci5pc0lubGluZSgpJiZyLmNhbkJlRW1wdHkoKSE9PSExJiZpfXImJihyPWUoKSxyLnNldEZvcm1hdChvLmdldEZvcm1hdFR5cGUoKSksci5zZXRJbmRlbnQoby5nZXRJbmRlbnQoKSksby5yZXBsYWNlKHIsITApKX19O1V0LiRzaG91bGRPdmVycmlkZURlZmF1bHRDaGFyYWN0ZXJTZWxlY3Rpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1zZS4kZ2V0QWRqYWNlbnROb2RlKHQuZm9jdXMsZSksc2UuJGlzRGVjb3JhdG9yTm9kZSh0KSYmIXQuaXNJc29sYXRlZCgpfHxzZS4kaXNFbGVtZW50Tm9kZSh0KSYmIXQuaXNJbmxpbmUoKSYmIXQuY2FuQmVFbXB0eSgpfTtVdC4kc2xpY2VTZWxlY3RlZFRleHROb2RlQ29udGVudD1mdW5jdGlvbih0LGUpe2lmKGUuaXNTZWxlY3RlZCgpJiYhZS5pc1NlZ21lbnRlZCgpJiYhZS5pc1Rva2VuKCkmJihzZS4kaXNSYW5nZVNlbGVjdGlvbih0KXx8c2UuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKHQpKSl7dmFyIG49dC5hbmNob3IuZ2V0Tm9kZSgpLHI9dC5mb2N1cy5nZXROb2RlKCksaT1lLmlzKG4pLG89ZS5pcyhyKTtpZihpfHxvKXtpPXQuaXNCYWNrd2FyZCgpO2xldFtsLHNdPXQuZ2V0Q2hhcmFjdGVyT2Zmc2V0cygpO3Q9bi5pcyhyKSxvPWUuaXMoaT9yOm4pLHI9ZS5pcyhpP246ciksbj0wO2xldCBhO3Q/KG49bD5zP3M6bCxhPWw+cz9sOnMpOm8/KG49aT9zOmwsYT12b2lkIDApOnImJihpPWk/bDpzLG49MCxhPWkpLGUuX190ZXh0PWUuX190ZXh0LnNsaWNlKG4sYSl9fXJldHVybiBlfTtVdC4kd3JhcE5vZGVzPWZ1bmN0aW9uKHQsZSxuPW51bGwpe3ZhciByPXQuZ2V0Tm9kZXMoKTtsZXQgaT1yLmxlbmd0aDt2YXIgbz10LmFuY2hvcjtpZihpPT09MHx8aT09PTEmJm8udHlwZT09PSJlbGVtZW50IiYmby5nZXROb2RlKCkuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wKXt0PW8udHlwZT09PSJ0ZXh0Ij9vLmdldE5vZGUoKS5nZXRQYXJlbnRPclRocm93KCk6by5nZXROb2RlKCkscj10LmdldENoaWxkcmVuKCk7bGV0IHM9ZSgpO3Muc2V0Rm9ybWF0KHQuZ2V0Rm9ybWF0VHlwZSgpKSxzLnNldEluZGVudCh0LmdldEluZGVudCgpKSxyLmZvckVhY2goYT0+cy5hcHBlbmQoYSkpLG4mJihzPW4uYXBwZW5kKHMpKSx0LnJlcGxhY2Uocyl9ZWxzZXtvPW51bGw7dmFyIGw9W107Zm9yKGxldCBzPTA7czxpO3MrKyl7bGV0IGE9cltzXTtzZS4kaXNSb290T3JTaGFkb3dSb290KGEpPyhCaCh0LGwsbC5sZW5ndGgsZSxuKSxsPVtdLG89YSk6bz09PW51bGx8fG8hPT1udWxsJiZzZS4kaGFzQW5jZXN0b3IoYSxvKT9sLnB1c2goYSk6KEJoKHQsbCxsLmxlbmd0aCxlLG4pLGw9W2FdKX1CaCh0LGwsbC5sZW5ndGgsZSxuKX19O1V0LmNyZWF0ZURPTVJhbmdlPWZ1bmN0aW9uKHQsZSxuLHIsaSl7bGV0IG89ZS5nZXRLZXkoKSxsPXIuZ2V0S2V5KCkscz1kb2N1bWVudC5jcmVhdGVSYW5nZSgpLGE9dC5nZXRFbGVtZW50QnlLZXkobyk7aWYodD10LmdldEVsZW1lbnRCeUtleShsKSxzZS4kaXNUZXh0Tm9kZShlKSYmKGE9Y3goYSkpLHNlLiRpc1RleHROb2RlKHIpJiYodD1jeCh0KSksZT09PXZvaWQgMHx8cj09PXZvaWQgMHx8YT09PW51bGx8fHQ9PT1udWxsKXJldHVybiBudWxsO2Eubm9kZU5hbWU9PT0iQlIiJiYoW2Esbl09ZHgoYSkpLHQubm9kZU5hbWU9PT0iQlIiJiYoW3QsaV09ZHgodCkpLGU9YS5maXJzdENoaWxkLGE9PT10JiZlIT1udWxsJiZlLm5vZGVOYW1lPT09IkJSIiYmbj09PTAmJmk9PT0wJiYoaT0xKTt0cnl7cy5zZXRTdGFydChhLG4pLHMuc2V0RW5kKHQsaSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIXMuY29sbGFwc2VkfHxuPT09aSYmbz09PWx8fChzLnNldFN0YXJ0KHQsaSkscy5zZXRFbmQoYSxuKSksc307VXQuY3JlYXRlUmVjdHNGcm9tRE9NUmFuZ2U9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmdldFJvb3RFbGVtZW50KCk7aWYobj09PW51bGwpcmV0dXJuW107dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49Z2V0Q29tcHV0ZWRTdHlsZShuKSxuPXBhcnNlRmxvYXQobi5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdChuLnBhZGRpbmdSaWdodCksZT1BcnJheS5mcm9tKGUuZ2V0Q2xpZW50UmVjdHMoKSk7bGV0IHI9ZS5sZW5ndGg7ZS5zb3J0KChvLGwpPT57bGV0IHM9by50b3AtbC50b3A7cmV0dXJuIDM+PU1hdGguYWJzKHMpP28ubGVmdC1sLmxlZnQ6c30pO2xldCBpO2ZvcihsZXQgbz0wO288cjtvKyspe2xldCBsPWVbb10scz1sLndpZHRoK249PT10LndpZHRoO2kmJmkudG9wPD1sLnRvcCYmaS50b3AraS5oZWlnaHQ+bC50b3AmJmkubGVmdCtpLndpZHRoPmwubGVmdHx8cz8oZS5zcGxpY2Uoby0tLDEpLHItLSk6aT1sfXJldHVybiBlfTtVdC5nZXRTdHlsZU9iamVjdEZyb21DU1M9emQ7VXQudHJpbVRleHRDb250ZW50RnJvbUFuY2hvcj1mdW5jdGlvbih0LGUsbil7bGV0IHI9ZS5nZXROb2RlKCk7aWYoc2UuJGlzRWxlbWVudE5vZGUocikpe3ZhciBpPXIuZ2V0RGVzY2VuZGFudEJ5SW5kZXgoZS5vZmZzZXQpO2khPT1udWxsJiYocj1pKX1mb3IoOzA8biYmciE9PW51bGw7KXt2YXIgbz1yLmdldFByZXZpb3VzU2libGluZygpLGw9MDtpZihvPT09bnVsbCl7aT1yLmdldFBhcmVudE9yVGhyb3coKTtmb3IodmFyIHM9aS5nZXRQcmV2aW91c1NpYmxpbmcoKTtzPT09bnVsbDspe2lmKGk9aS5nZXRQYXJlbnQoKSxpPT09bnVsbCl7bz1udWxsO2JyZWFrfXM9aS5nZXRQcmV2aW91c1NpYmxpbmcoKX1pIT09bnVsbCYmKGw9aS5pc0lubGluZSgpPzA6MixvPXNlLiRpc0VsZW1lbnROb2RlKHMpP3MuZ2V0TGFzdERlc2NlbmRhbnQoKTpzKX1pZihzPXIuZ2V0VGV4dENvbnRlbnQoKSxzPT09IiImJnNlLiRpc0VsZW1lbnROb2RlKHIpJiYhci5pc0lubGluZSgpJiYocz1gCgpgKSxpPXMubGVuZ3RoLCFzZS4kaXNUZXh0Tm9kZShyKXx8bj49aSlzPXIuZ2V0UGFyZW50KCksci5yZW1vdmUoKSxzPT1udWxsfHxzLmdldENoaWxkcmVuU2l6ZSgpIT09MHx8c2UuJGlzUm9vdE5vZGUocyl8fHMucmVtb3ZlKCksbi09aStsLHI9bztlbHNle2xldCBhPXIuZ2V0S2V5KCk7bD10LmdldEVkaXRvclN0YXRlKCkucmVhZCgoKT0+e2NvbnN0IGM9c2UuJGdldE5vZGVCeUtleShhKTtyZXR1cm4gc2UuJGlzVGV4dE5vZGUoYykmJmMuaXNTaW1wbGVUZXh0KCk/Yy5nZXRUZXh0Q29udGVudCgpOm51bGx9KSxvPWktbjtsZXQgdT1zLnNsaWNlKDAsbyk7bCE9PW51bGwmJmwhPT1zPyhuPXNlLiRnZXRQcmV2aW91c1NlbGVjdGlvbigpLGk9cixyLmlzU2ltcGxlVGV4dCgpP3Iuc2V0VGV4dENvbnRlbnQobCk6KGk9c2UuJGNyZWF0ZVRleHROb2RlKGwpLHIucmVwbGFjZShpKSksc2UuJGlzUmFuZ2VTZWxlY3Rpb24obikmJm4uaXNDb2xsYXBzZWQoKSYmKG49bi5hbmNob3Iub2Zmc2V0LGkuc2VsZWN0KG4sbikpKTpyLmlzU2ltcGxlVGV4dCgpPyhsPWUua2V5PT09YSxzPWUub2Zmc2V0LHM8biYmKHM9aSksbj1sP3MtbjowLGk9bD9zOm8sbCYmbj09PTA/KFtuXT1yLnNwbGl0VGV4dChuLGkpLG4ucmVtb3ZlKCkpOihbLG5dPXIuc3BsaXRUZXh0KG4saSksbi5yZW1vdmUoKSkpOihuPXNlLiRjcmVhdGVUZXh0Tm9kZSh1KSxyLnJlcGxhY2UobikpLG49MH19fTtjb25zdCBWTz1VdDt2YXIgY289Vk8sSE89Y28sRXQ9X2U7ZnVuY3Rpb24gS08odCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZCgiY29kZSIsdCk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllLmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHt0fTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7ZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWZ1bmN0aW9uIEJFKHQsZSl7Zm9yKGxldCBuIG9mIGUpaWYodC50eXBlLnN0YXJ0c1dpdGgobikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gVUUodCxlKXtmb3IoO3QhPT1FdC4kZ2V0Um9vdCgpJiZ0IT1udWxsOyl7aWYoZSh0KSlyZXR1cm4gdDt0PXQuZ2V0UGFyZW50KCl9cmV0dXJuIG51bGx9JHQuJHNwbGl0Tm9kZT1FdC4kc3BsaXROb2RlOyR0LmlzSFRNTEFuY2hvckVsZW1lbnQ9RXQuaXNIVE1MQW5jaG9yRWxlbWVudDskdC5pc0hUTUxFbGVtZW50PUV0LmlzSFRNTEVsZW1lbnQ7JHQuJGRmcz1mdW5jdGlvbih0LGUpe2xldCBuPVtdO3Q9KHR8fEV0LiRnZXRSb290KCkpLmdldExhdGVzdCgpLGU9ZXx8KEV0LiRpc0VsZW1lbnROb2RlKHQpP3QuZ2V0TGFzdERlc2NlbmRhbnQoKTp0KTtmb3IodmFyIHI9dCxpPTA7KHI9ci5nZXRQYXJlbnQoKSkhPT1udWxsOylpKys7Zm9yKHI9aTt0IT09bnVsbCYmIXQuaXMoZSk7KWlmKG4ucHVzaCh7ZGVwdGg6cixub2RlOnR9KSxFdC4kaXNFbGVtZW50Tm9kZSh0KSYmMDx0LmdldENoaWxkcmVuU2l6ZSgpKXQ9dC5nZXRGaXJzdENoaWxkKCkscisrO2Vsc2UgZm9yKGk9bnVsbDtpPT09bnVsbCYmdCE9PW51bGw7KWk9dC5nZXROZXh0U2libGluZygpLGk9PT1udWxsPyh0PXQuZ2V0UGFyZW50KCksci0tKTp0PWk7cmV0dXJuIHQhPT1udWxsJiZ0LmlzKGUpJiZuLnB1c2goe2RlcHRoOnIsbm9kZTp0fSksbn07JHQuJGZpbHRlcj1mdW5jdGlvbih0LGUpe2xldCBuPVtdO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtsZXQgaT1lKHRbcl0pO2khPT1udWxsJiZuLnB1c2goaSl9cmV0dXJuIG59OyR0LiRmaW5kTWF0Y2hpbmdQYXJlbnQ9VUU7JHQuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3c9ZnVuY3Rpb24odCl7bGV0IGU9VUUodCxuPT5FdC4kaXNFbGVtZW50Tm9kZShuKSYmIW4uaXNJbmxpbmUoKSk7cmV0dXJuIEV0LiRpc0VsZW1lbnROb2RlKGUpfHxLTyg0LHQuX19rZXkpLGV9OyR0LiRnZXROZWFyZXN0Tm9kZU9mVHlwZT1mdW5jdGlvbih0LGUpe2Zvcig7dCE9bnVsbDspe2lmKHQgaW5zdGFuY2VvZiBlKXJldHVybiB0O3Q9dC5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH07JHQuJGluc2VydEZpcnN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dC5nZXRGaXJzdENoaWxkKCk7biE9PW51bGw/bi5pbnNlcnRCZWZvcmUoZSk6dC5hcHBlbmQoZSl9OyR0LiRpbnNlcnROb2RlVG9OZWFyZXN0Um9vdD1mdW5jdGlvbih0KXt2YXIgZT1FdC4kZ2V0U2VsZWN0aW9uKCl8fEV0LiRnZXRQcmV2aW91c1NlbGVjdGlvbigpO2lmKEV0LiRpc1JhbmdlU2VsZWN0aW9uKGUpKXt2YXJ7Zm9jdXM6bn09ZTtpZihlPW4uZ2V0Tm9kZSgpLG49bi5vZmZzZXQsRXQuJGlzUm9vdE9yU2hhZG93Um9vdChlKSluPWUuZ2V0Q2hpbGRBdEluZGV4KG4pLG49PW51bGw/ZS5hcHBlbmQodCk6bi5pbnNlcnRCZWZvcmUodCksdC5zZWxlY3ROZXh0KCk7ZWxzZXtsZXQgcixpO0V0LiRpc1RleHROb2RlKGUpPyhyPWUuZ2V0UGFyZW50T3JUaHJvdygpLGk9ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpLDA8biYmKGkrPTEsZS5zcGxpdFRleHQobikpKToocj1lLGk9biksWyxlXT1FdC4kc3BsaXROb2RlKHIsaSksZS5pbnNlcnRCZWZvcmUodCksZS5zZWxlY3RTdGFydCgpfX1lbHNlIEV0LiRpc05vZGVTZWxlY3Rpb24oZSl8fEV0LkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihlKT8oZT1lLmdldE5vZGVzKCksZVtlLmxlbmd0aC0xXS5nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCkuaW5zZXJ0QWZ0ZXIodCkpOkV0LiRnZXRSb290KCkuYXBwZW5kKHQpLGU9RXQuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSx0Lmluc2VydEFmdGVyKGUpLGUuc2VsZWN0KCk7cmV0dXJuIHQuZ2V0TGF0ZXN0KCl9OyR0LiRyZXN0b3JlRWRpdG9yU3RhdGU9ZnVuY3Rpb24odCxlKXtsZXQgbj1uZXcgTWFwLHI9dC5fcGVuZGluZ0VkaXRvclN0YXRlO2ZvcihsZXRbaSxvXW9mIGUuX25vZGVNYXApe2xldCBsPUhPLiRjbG9uZVdpdGhQcm9wZXJ0aWVzKG8pO0V0LiRpc1RleHROb2RlKGwpJiYobC5fX3RleHQ9by5fX3RleHQpLG4uc2V0KGksbCl9ciYmKHIuX25vZGVNYXA9biksdC5fZGlydHlUeXBlPTIsdD1lLl9zZWxlY3Rpb24sRXQuJHNldFNlbGVjdGlvbih0PT09bnVsbD9udWxsOnQuY2xvbmUoKSl9OyR0LiR3cmFwTm9kZUluRWxlbWVudD1mdW5jdGlvbih0LGUpe3JldHVybiBlPWUoKSx0LnJlcGxhY2UoZSksZS5hcHBlbmQodCksZX07JHQuYWRkQ2xhc3NOYW1lc1RvRWxlbWVudD1mdW5jdGlvbih0LC4uLmUpe2UuZm9yRWFjaChuPT57dHlwZW9mIG49PSJzdHJpbmciJiYobj1uLnNwbGl0KCIgIikuZmlsdGVyKHI9PnIhPT0iIiksdC5jbGFzc0xpc3QuYWRkKC4uLm4pKX0pfTskdC5pc01pbWVUeXBlPUJFOyR0Lm1lZGlhRmlsZVJlYWRlcj1mdW5jdGlvbih0LGUpe2xldCBuPXRbU3ltYm9sLml0ZXJhdG9yXSgpO3JldHVybiBuZXcgUHJvbWlzZSgocixpKT0+e2xldCBvPVtdLGw9KCk9Pntjb25zdHtkb25lOnMsdmFsdWU6YX09bi5uZXh0KCk7aWYocylyZXR1cm4gcihvKTtjb25zdCB1PW5ldyBGaWxlUmVhZGVyO3UuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGkpLHUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBjPXUucmVzdWx0O3R5cGVvZiBjPT0ic3RyaW5nIiYmby5wdXNoKHtmaWxlOmEscmVzdWx0OmN9KSxsKCl9KSxCRShhLGUpP3UucmVhZEFzRGF0YVVSTChhKTpsKCl9O2woKX0pfTskdC5tZXJnZVJlZ2lzdGVyPWZ1bmN0aW9uKC4uLnQpe3JldHVybigpPT57dC5mb3JFYWNoKGU9PmUoKSl9fTskdC5vYmplY3RLbGFzc0VxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0IT09bnVsbD9PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkuY29uc3RydWN0b3IubmFtZT09PWUubmFtZTohMX07JHQucmVnaXN0ZXJOZXN0ZWRFbGVtZW50UmVzb2x2ZXI9ZnVuY3Rpb24odCxlLG4scil7cmV0dXJuIHQucmVnaXN0ZXJOb2RlVHJhbnNmb3JtKGUsaT0+e2U6e2Zvcih2YXIgbz1pLmdldENoaWxkcmVuKCksbD0wO2w8by5sZW5ndGg7bCsrKWlmKG9bbF1pbnN0YW5jZW9mIGUpe289bnVsbDticmVhayBlfWZvcihvPWk7byE9PW51bGw7KWlmKGw9byxvPW8uZ2V0UGFyZW50KCksbyBpbnN0YW5jZW9mIGUpe289e2NoaWxkOmwscGFyZW50Om99O2JyZWFrIGV9bz1udWxsfWlmKG8hPT1udWxsKXtjb25zdHtjaGlsZDpzLHBhcmVudDphfT1vO2lmKHMuaXMoaSkpe2lmKHIoYSxpKSxpPXMuZ2V0TmV4dFNpYmxpbmdzKCksbz1pLmxlbmd0aCxhLmluc2VydEFmdGVyKHMpLG8hPT0wKXtsPW4oYSkscy5pbnNlcnRBZnRlcihsKTtmb3IobGV0IHU9MDt1PG87dSsrKWwuYXBwZW5kKGlbdV0pfWEuY2FuQmVFbXB0eSgpfHxhLmdldENoaWxkcmVuU2l6ZSgpIT09MHx8YS5yZW1vdmUoKX19fSl9OyR0LnJlbW92ZUNsYXNzTmFtZXNGcm9tRWxlbWVudD1mdW5jdGlvbih0LC4uLmUpe2UuZm9yRWFjaChuPT57dHlwZW9mIG49PSJzdHJpbmciJiZ0LmNsYXNzTGlzdC5yZW1vdmUoLi4ubi5zcGxpdCgiICIpKX0pfTtjb25zdCBaTz0kdDt2YXIgRnQ9Wk8semU9X2UsZm89RnQ7ZnVuY3Rpb24gZ3ModCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZCgiY29kZSIsdCk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllLmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHt0fTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7ZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWZ1bmN0aW9uIFdFKHQpe2xldCBlPTE7Zm9yKHQ9dC5nZXRQYXJlbnQoKTt0IT1udWxsOyl7aWYoZnQodCkpe2lmKHQ9dC5nZXRQYXJlbnQoKSxOZSh0KSl7ZSsrLHQ9dC5nZXRQYXJlbnQoKTtjb250aW51ZX1ncyg0MCl9YnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gJG0odCl7dD10LmdldFBhcmVudCgpLE5lKHQpfHxncyg0MCk7bGV0IGU9dDtmb3IoO2UhPT1udWxsOyllPWUuZ2V0UGFyZW50KCksTmUoZSkmJih0PWUpO3JldHVybiB0fWZ1bmN0aW9uIFZFKHQpe2xldCBlPVtdO3Q9dC5nZXRDaGlsZHJlbigpLmZpbHRlcihmdCk7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2xldCByPXRbbl0saT1yLmdldEZpcnN0Q2hpbGQoKTtOZShpKT9lPWUuY29uY2F0KFZFKGkpKTplLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gTXIodCl7cmV0dXJuIGZ0KHQpJiZOZSh0LmdldEZpcnN0Q2hpbGQoKSl9ZnVuY3Rpb24gR08odCl7Zm9yKDt0LmdldE5leHRTaWJsaW5nKCk9PW51bGwmJnQuZ2V0UHJldmlvdXNTaWJsaW5nKCk9PW51bGw7KXtsZXQgZT10LmdldFBhcmVudCgpO2lmKGU9PW51bGx8fCFmdCh0KSYmIU5lKHQpKWJyZWFrO3Q9ZX10LnJlbW92ZSgpfWZ1bmN0aW9uIGZ4KHQpe3JldHVybiBCbigpLmFwcGVuZCh0KX1mdW5jdGlvbiBIRSh0LGUpe3JldHVybiBmdCh0KSYmKGUubGVuZ3RoPT09MHx8ZS5sZW5ndGg9PT0xJiZ0LmlzKGVbMF0pJiZ0LmdldENoaWxkcmVuU2l6ZSgpPT09MCl9ZnVuY3Rpb24gcW8odCxlKXt0LnNwbGljZSh0LmdldENoaWxkcmVuU2l6ZSgpLDAsZSl9ZnVuY3Rpb24gaHgodCxlKXtpZihOZSh0KSlyZXR1cm4gdDtsZXQgbj10LmdldFByZXZpb3VzU2libGluZygpLHI9dC5nZXROZXh0U2libGluZygpLGk9Qm4oKTtyZXR1cm4gaS5zZXRGb3JtYXQodC5nZXRGb3JtYXRUeXBlKCkpLGkuc2V0SW5kZW50KHQuZ2V0SW5kZW50KCkpLHFvKGksdC5nZXRDaGlsZHJlbigpKSxOZShuKSYmZT09PW4uZ2V0TGlzdFR5cGUoKT8obi5hcHBlbmQoaSksdC5yZW1vdmUoKSxOZShyKSYmZT09PXIuZ2V0TGlzdFR5cGUoKSYmKHFvKG4sci5nZXRDaGlsZHJlbigpKSxyLnJlbW92ZSgpKSxuKTpOZShyKSYmZT09PXIuZ2V0TGlzdFR5cGUoKT8oci5nZXRGaXJzdENoaWxkT3JUaHJvdygpLmluc2VydEJlZm9yZShpKSx0LnJlbW92ZSgpLHIpOihlPWduKGUpLGUuYXBwZW5kKGkpLHQucmVwbGFjZShlKSxjbihlKSxlKX1mdW5jdGlvbiBLRSh0LGUpe3ZhciBuPXQuZ2V0TGFzdENoaWxkKCk7bGV0IHI9ZS5nZXRGaXJzdENoaWxkKCk7biYmciYmTXIobikmJk1yKHIpJiYoS0Uobi5nZXRGaXJzdENoaWxkKCksci5nZXRGaXJzdENoaWxkKCkpLHIucmVtb3ZlKCkpLG49ZS5nZXRDaGlsZHJlbigpLDA8bi5sZW5ndGgmJih0LmFwcGVuZCguLi5uKSxjbih0KSksZS5yZW1vdmUoKX1mdW5jdGlvbiBjbih0LGUpe2lmKHQ9ZXx8dC5nZXRDaGlsZHJlbigpLHQhPT12b2lkIDApZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl7bGV0IG89dFtlXTtpZihmdChvKSl7bGV0IGw9by5nZXRWYWx1ZSgpO3ZhciBuPW8scj1uLmdldFBhcmVudCgpLGk9MTtmb3IociE9bnVsbCYmKE5lKHIpP2k9ci5nZXRTdGFydCgpOmdzKDQ0KSksbj1uLmdldFByZXZpb3VzU2libGluZ3MoKSxyPTA7cjxuLmxlbmd0aDtyKyspe2xldCBzPW5bcl07ZnQocykmJiFOZShzLmdldEZpcnN0Q2hpbGQoKSkmJmkrK31sIT09aSYmby5zZXRWYWx1ZShpKX19fWZ1bmN0aW9uIFlPKHQpe2lmKCFNcih0KSl7dmFyIGU9dC5nZXRQYXJlbnQoKSxuPWU/ZS5nZXRQYXJlbnQoKTp2b2lkIDAscj1uP24uZ2V0UGFyZW50KCk6dm9pZCAwO2lmKE5lKHIpJiZmdChuKSYmTmUoZSkpe3ZhciBpPWU/ZS5nZXRGaXJzdENoaWxkKCk6dm9pZCAwLG89ZT9lLmdldExhc3RDaGlsZCgpOnZvaWQgMDtpZih0LmlzKGkpKW4uaW5zZXJ0QmVmb3JlKHQpLGUuaXNFbXB0eSgpJiZuLnJlbW92ZSgpO2Vsc2UgaWYodC5pcyhvKSluLmluc2VydEFmdGVyKHQpLGUuaXNFbXB0eSgpJiZuLnJlbW92ZSgpO2Vsc2V7dmFyIGw9ZS5nZXRMaXN0VHlwZSgpO2k9Qm4oKTtsZXQgcz1nbihsKTtpLmFwcGVuZChzKSx0LmdldFByZXZpb3VzU2libGluZ3MoKS5mb3JFYWNoKGE9PnMuYXBwZW5kKGEpKSxvPUJuKCksbD1nbihsKSxvLmFwcGVuZChsKSxxbyhsLHQuZ2V0TmV4dFNpYmxpbmdzKCkpLG4uaW5zZXJ0QmVmb3JlKGkpLG4uaW5zZXJ0QWZ0ZXIobyksbi5yZXBsYWNlKHQpfWNuKGUpLGNuKHIpfX19bGV0IERmPWNsYXNzIFpFIGV4dGVuZHMgemUuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4ibGlzdGl0ZW0ifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IFpFKGUuX192YWx1ZSxlLl9fY2hlY2tlZCxlLl9fa2V5KX1jb25zdHJ1Y3RvcihlLG4scil7c3VwZXIociksdGhpcy5fX3ZhbHVlPWU9PT12b2lkIDA/MTplLHRoaXMuX19jaGVja2VkPW59Y3JlYXRlRE9NKGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIikscj10aGlzLmdldFBhcmVudCgpO3JldHVybiBOZShyKSYmci5nZXRMaXN0VHlwZSgpPT09ImNoZWNrIiYmbXgobix0aGlzLG51bGwpLG4udmFsdWU9dGhpcy5fX3ZhbHVlLHB4KG4sZS50aGVtZSx0aGlzKSxufXVwZGF0ZURPTShlLG4scil7bGV0IGk9dGhpcy5nZXRQYXJlbnQoKTtyZXR1cm4gTmUoaSkmJmkuZ2V0TGlzdFR5cGUoKT09PSJjaGVjayImJm14KG4sdGhpcyxlKSxuLnZhbHVlPXRoaXMuX192YWx1ZSxweChuLHIudGhlbWUsdGhpcyksITF9c3RhdGljIHRyYW5zZm9ybSgpe3JldHVybiBlPT57bGV0IG49ZS5nZXRQYXJlbnQoKTtOZShuKSYmKGNuKG4pLG4uZ2V0TGlzdFR5cGUoKSE9PSJjaGVjayImJmUuZ2V0Q2hlY2tlZCgpIT1udWxsJiZlLnNldENoZWNrZWQodm9pZCAwKSl9fXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57bGk6KCk9Pih7Y29udmVyc2lvbjpYTyxwcmlvcml0eTowfSl9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPUJuKCk7cmV0dXJuIG4uc2V0Q2hlY2tlZChlLmNoZWNrZWQpLG4uc2V0VmFsdWUoZS52YWx1ZSksbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0RGlyZWN0aW9uKGUuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLGNoZWNrZWQ6dGhpcy5nZXRDaGVja2VkKCksdHlwZToibGlzdGl0ZW0iLHZhbHVlOnRoaXMuZ2V0VmFsdWUoKSx2ZXJzaW9uOjF9fWFwcGVuZCguLi5lKXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl7bGV0IHI9ZVtuXTtpZih6ZS4kaXNFbGVtZW50Tm9kZShyKSYmdGhpcy5jYW5NZXJnZVdpdGgocikpe2xldCBpPXIuZ2V0Q2hpbGRyZW4oKTt0aGlzLmFwcGVuZCguLi5pKSxyLnJlbW92ZSgpfWVsc2Ugc3VwZXIuYXBwZW5kKHIpfXJldHVybiB0aGlzfXJlcGxhY2UoZSxuKXtpZihmdChlKSlyZXR1cm4gc3VwZXIucmVwbGFjZShlKTt0aGlzLnNldEluZGVudCgwKTtsZXQgcj10aGlzLmdldFBhcmVudE9yVGhyb3coKTtpZighTmUocikpcmV0dXJuIGU7aWYoci5fX2ZpcnN0PT09dGhpcy5nZXRLZXkoKSlyLmluc2VydEJlZm9yZShlKTtlbHNlIGlmKHIuX19sYXN0PT09dGhpcy5nZXRLZXkoKSlyLmluc2VydEFmdGVyKGUpO2Vsc2V7bGV0IGk9Z24oci5nZXRMaXN0VHlwZSgpKSxvPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKTtmb3IoO287KXtsZXQgbD1vO289by5nZXROZXh0U2libGluZygpLGkuYXBwZW5kKGwpfXIuaW5zZXJ0QWZ0ZXIoZSksZS5pbnNlcnRBZnRlcihpKX1yZXR1cm4gbiYmdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goaT0+e2UuYXBwZW5kKGkpfSksdGhpcy5yZW1vdmUoKSxyLmdldENoaWxkcmVuU2l6ZSgpPT09MCYmci5yZW1vdmUoKSxlfWluc2VydEFmdGVyKGUsbj0hMCl7dmFyIHI9dGhpcy5nZXRQYXJlbnRPclRocm93KCk7TmUocil8fGdzKDM5KTt2YXIgaT10aGlzLmdldE5leHRTaWJsaW5ncygpO2lmKGZ0KGUpKXJldHVybiBuPXN1cGVyLmluc2VydEFmdGVyKGUsbiksZT1lLmdldFBhcmVudE9yVGhyb3coKSxOZShlKSYmY24oZSksbjtpZihOZShlKSl7Zm9yKHI9ZSxlPWUuZ2V0Q2hpbGRyZW4oKSxpPWUubGVuZ3RoLTE7MDw9aTtpLS0pcj1lW2ldLHRoaXMuaW5zZXJ0QWZ0ZXIocixuKTtyZXR1cm4gcn1pZihyLmluc2VydEFmdGVyKGUsbiksaS5sZW5ndGghPT0wKXtsZXQgbz1nbihyLmdldExpc3RUeXBlKCkpO2kuZm9yRWFjaChsPT5vLmFwcGVuZChsKSksZS5pbnNlcnRBZnRlcihvLG4pfXJldHVybiBlfXJlbW92ZShlKXtsZXQgbj10aGlzLmdldFByZXZpb3VzU2libGluZygpLHI9dGhpcy5nZXROZXh0U2libGluZygpO3N1cGVyLnJlbW92ZShlKSxuJiZyJiZNcihuKSYmTXIocik/KEtFKG4uZ2V0Rmlyc3RDaGlsZCgpLHIuZ2V0Rmlyc3RDaGlsZCgpKSxyLnJlbW92ZSgpKTpyJiYoZT1yLmdldFBhcmVudCgpLE5lKGUpJiZjbihlKSl9aW5zZXJ0TmV3QWZ0ZXIoZSxuPSEwKXtyZXR1cm4gZT1Cbih0aGlzLl9fY2hlY2tlZD09bnVsbD92b2lkIDA6ITEpLHRoaXMuaW5zZXJ0QWZ0ZXIoZSxuKSxlfWNvbGxhcHNlQXRTdGFydChlKXtsZXQgbj16ZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpO3RoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGw9Pm4uYXBwZW5kKGwpKTt2YXIgcj10aGlzLmdldFBhcmVudE9yVGhyb3coKSxpPXIuZ2V0UGFyZW50T3JUaHJvdygpO2xldCBvPWZ0KGkpO3JldHVybiByLmdldENoaWxkcmVuU2l6ZSgpPT09MT9vPyhyLnJlbW92ZSgpLGkuc2VsZWN0KCkpOihyLmluc2VydEJlZm9yZShuKSxyLnJlbW92ZSgpLHI9ZS5hbmNob3IsZT1lLmZvY3VzLGk9bi5nZXRLZXkoKSxyLnR5cGU9PT0iZWxlbWVudCImJnIuZ2V0Tm9kZSgpLmlzKHRoaXMpJiZyLnNldChpLHIub2Zmc2V0LCJlbGVtZW50IiksZS50eXBlPT09ImVsZW1lbnQiJiZlLmdldE5vZGUoKS5pcyh0aGlzKSYmZS5zZXQoaSxlLm9mZnNldCwiZWxlbWVudCIpKTooci5pbnNlcnRCZWZvcmUobiksdGhpcy5yZW1vdmUoKSksITB9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3ZhbHVlfXNldFZhbHVlKGUpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3ZhbHVlPWV9Z2V0Q2hlY2tlZCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fY2hlY2tlZH1zZXRDaGVja2VkKGUpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX2NoZWNrZWQ9ZX10b2dnbGVDaGVja2VkKCl7dGhpcy5zZXRDaGVja2VkKCF0aGlzLl9fY2hlY2tlZCl9Z2V0SW5kZW50KCl7dmFyIGU9dGhpcy5nZXRQYXJlbnQoKTtpZihlPT09bnVsbClyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2luZGVudDtlPWUuZ2V0UGFyZW50T3JUaHJvdygpO2xldCBuPTA7Zm9yKDtmdChlKTspZT1lLmdldFBhcmVudE9yVGhyb3coKS5nZXRQYXJlbnRPclRocm93KCksbisrO3JldHVybiBufXNldEluZGVudChlKXt0eXBlb2YgZT09Im51bWJlciImJi0xPGV8fGdzKDExNyk7bGV0IG49dGhpcy5nZXRJbmRlbnQoKTtmb3IoO24hPT1lOylpZihuPGUpe2U6e3ZhciByPW5ldyBTZXQ7aWYoTXIodGhpcyl8fHIuaGFzKHRoaXMuZ2V0S2V5KCkpKWJyZWFrIGU7bGV0IHM9dGhpcy5nZXRQYXJlbnQoKTt2YXIgaT10aGlzLmdldE5leHRTaWJsaW5nKCksbz10aGlzLmdldFByZXZpb3VzU2libGluZygpO2lmKE1yKGkpJiZNcihvKSl7aWYobz1vLmdldEZpcnN0Q2hpbGQoKSxOZShvKSl7by5hcHBlbmQodGhpcyk7dmFyIGw9aS5nZXRGaXJzdENoaWxkKCk7TmUobCkmJihsPWwuZ2V0Q2hpbGRyZW4oKSxxbyhvLGwpLGkucmVtb3ZlKCksci5hZGQoaS5nZXRLZXkoKSkpLGNuKG8pfX1lbHNlIE1yKGkpPyhpPWkuZ2V0Rmlyc3RDaGlsZCgpLE5lKGkpJiYocj1pLmdldEZpcnN0Q2hpbGQoKSxyIT09bnVsbCYmci5pbnNlcnRCZWZvcmUodGhpcyksY24oaSkpKTpNcihvKT8oaT1vLmdldEZpcnN0Q2hpbGQoKSxOZShpKSYmKGkuYXBwZW5kKHRoaXMpLGNuKGkpKSk6TmUocykmJihyPUJuKCksbD1nbihzLmdldExpc3RUeXBlKCkpLHIuYXBwZW5kKGwpLGwuYXBwZW5kKHRoaXMpLG8/by5pbnNlcnRBZnRlcihyKTppP2kuaW5zZXJ0QmVmb3JlKHIpOnMuYXBwZW5kKHIpLGNuKGwpKTtOZShzKSYmY24ocyl9bisrfWVsc2UgWU8odGhpcyksbi0tO3JldHVybiB0aGlzfWluc2VydEJlZm9yZShlKXtpZihmdChlKSl7bGV0IG49dGhpcy5nZXRQYXJlbnRPclRocm93KCk7aWYoTmUobikpe2xldCByPXRoaXMuZ2V0TmV4dFNpYmxpbmdzKCk7Y24obixyKX19cmV0dXJuIHN1cGVyLmluc2VydEJlZm9yZShlKX1jYW5JbnNlcnRBZnRlcihlKXtyZXR1cm4gZnQoZSl9Y2FuUmVwbGFjZVdpdGgoZSl7cmV0dXJuIGZ0KGUpfWNhbk1lcmdlV2l0aChlKXtyZXR1cm4gemUuJGlzUGFyYWdyYXBoTm9kZShlKXx8ZnQoZSl9ZXh0cmFjdFdpdGhDaGlsZChlLG4pe2lmKCF6ZS4kaXNSYW5nZVNlbGVjdGlvbihuKSlyZXR1cm4hMTtlPW4uYW5jaG9yLmdldE5vZGUoKTtsZXQgcj1uLmZvY3VzLmdldE5vZGUoKTtyZXR1cm4gdGhpcy5pc1BhcmVudE9mKGUpJiZ0aGlzLmlzUGFyZW50T2YocikmJnRoaXMuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg9PT1uLmdldFRleHRDb250ZW50KCkubGVuZ3RofWlzUGFyZW50UmVxdWlyZWQoKXtyZXR1cm4hMH1jcmVhdGVQYXJlbnRFbGVtZW50Tm9kZSgpe3JldHVybiBnbigiYnVsbGV0Iil9fTtmdW5jdGlvbiBweCh0LGUsbil7bGV0IHI9W10saT1bXTt2YXIgbz0oZT1lLmxpc3QpP2UubGlzdGl0ZW06dm9pZCAwO2lmKGUmJmUubmVzdGVkKXZhciBsPWUubmVzdGVkLmxpc3RpdGVtO2lmKG8hPT12b2lkIDAmJihvPW8uc3BsaXQoIiAiKSxyLnB1c2goLi4ubykpLGUpe289bi5nZXRQYXJlbnQoKSxvPU5lKG8pJiZvLmdldExpc3RUeXBlKCk9PT0iY2hlY2siO2xldCBzPW4uZ2V0Q2hlY2tlZCgpO28mJiFzfHxpLnB1c2goZS5saXN0aXRlbVVuY2hlY2tlZCksbyYmc3x8aS5wdXNoKGUubGlzdGl0ZW1DaGVja2VkKSxvJiZyLnB1c2gocz9lLmxpc3RpdGVtQ2hlY2tlZDplLmxpc3RpdGVtVW5jaGVja2VkKX1sIT09dm9pZCAwJiYobD1sLnNwbGl0KCIgIiksbi5nZXRDaGlsZHJlbigpLnNvbWUocz0+TmUocykpP3IucHVzaCguLi5sKTppLnB1c2goLi4ubCkpLDA8aS5sZW5ndGgmJmZvLnJlbW92ZUNsYXNzTmFtZXNGcm9tRWxlbWVudCh0LC4uLmkpLDA8ci5sZW5ndGgmJmZvLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQodCwuLi5yKX1mdW5jdGlvbiBteCh0LGUsbil7TmUoZS5nZXRGaXJzdENoaWxkKCkpPyh0LnJlbW92ZUF0dHJpYnV0ZSgicm9sZSIpLHQucmVtb3ZlQXR0cmlidXRlKCJ0YWJJbmRleCIpLHQucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWNoZWNrZWQiKSk6KHQuc2V0QXR0cmlidXRlKCJyb2xlIiwiY2hlY2tib3giKSx0LnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpLG4mJmUuX19jaGVja2VkPT09bi5fX2NoZWNrZWR8fHQuc2V0QXR0cmlidXRlKCJhcmlhLWNoZWNrZWQiLGUuZ2V0Q2hlY2tlZCgpPyJ0cnVlIjoiZmFsc2UiKSl9ZnVuY3Rpb24gWE8odCl7cmV0dXJuIHQ9Zm8uaXNIVE1MRWxlbWVudCh0KSYmdC5nZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIpPT09InRydWUiLHtub2RlOkJuKHQpfX1mdW5jdGlvbiBCbih0KXtyZXR1cm4gemUuJGFwcGx5Tm9kZVJlcGxhY2VtZW50KG5ldyBEZih2b2lkIDAsdCkpfWZ1bmN0aW9uIGZ0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgRGZ9bGV0IGt2PWNsYXNzIEdFIGV4dGVuZHMgemUuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4ibGlzdCJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgR0UoZS5fX2xpc3RUeXBlfHx5eFtlLl9fdGFnXSxlLl9fc3RhcnQsZS5fX2tleSl9Y29uc3RydWN0b3IoZSxuLHIpe3N1cGVyKHIpLHRoaXMuX19saXN0VHlwZT1lPXl4W2VdfHxlLHRoaXMuX190YWc9ZT09PSJudW1iZXIiPyJvbCI6InVsIix0aGlzLl9fc3RhcnQ9bn1nZXRUYWcoKXtyZXR1cm4gdGhpcy5fX3RhZ31zZXRMaXN0VHlwZShlKXtsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7bi5fX2xpc3RUeXBlPWUsbi5fX3RhZz1lPT09Im51bWJlciI/Im9sIjoidWwifWdldExpc3RUeXBlKCl7cmV0dXJuIHRoaXMuX19saXN0VHlwZX1nZXRTdGFydCgpe3JldHVybiB0aGlzLl9fc3RhcnR9Y3JlYXRlRE9NKGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fX3RhZyk7cmV0dXJuIHRoaXMuX19zdGFydCE9PTEmJm4uc2V0QXR0cmlidXRlKCJzdGFydCIsU3RyaW5nKHRoaXMuX19zdGFydCkpLG4uX19sZXhpY2FsTGlzdFR5cGU9dGhpcy5fX2xpc3RUeXBlLGd4KG4sZS50aGVtZSx0aGlzKSxufXVwZGF0ZURPTShlLG4scil7cmV0dXJuIGUuX190YWchPT10aGlzLl9fdGFnPyEwOihneChuLHIudGhlbWUsdGhpcyksITEpfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57b2w6KCk9Pih7Y29udmVyc2lvbjp2eCxwcmlvcml0eTowfSksdWw6KCk9Pih7Y29udmVyc2lvbjp2eCxwcmlvcml0eTowfSl9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPWduKGUubGlzdFR5cGUsZS5zdGFydCk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldEluZGVudChlLmluZGVudCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59ZXhwb3J0RE9NKGUpe3JldHVybntlbGVtZW50OmV9PXN1cGVyLmV4cG9ydERPTShlKSxlJiZmby5pc0hUTUxFbGVtZW50KGUpJiYodGhpcy5fX3N0YXJ0IT09MSYmZS5zZXRBdHRyaWJ1dGUoInN0YXJ0IixTdHJpbmcodGhpcy5fX3N0YXJ0KSksdGhpcy5fX2xpc3RUeXBlPT09ImNoZWNrIiYmZS5zZXRBdHRyaWJ1dGUoIl9fbGV4aWNhbExpc3RUeXBlIiwiY2hlY2siKSkse2VsZW1lbnQ6ZX19ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksbGlzdFR5cGU6dGhpcy5nZXRMaXN0VHlwZSgpLHN0YXJ0OnRoaXMuZ2V0U3RhcnQoKSx0YWc6dGhpcy5nZXRUYWcoKSx0eXBlOiJsaXN0Iix2ZXJzaW9uOjF9fWNhbkJlRW1wdHkoKXtyZXR1cm4hMX1jYW5JbmRlbnQoKXtyZXR1cm4hMX1hcHBlbmQoLi4uZSl7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYoZnQobikpc3VwZXIuYXBwZW5kKG4pO2Vsc2V7bGV0IGk9Qm4oKTtOZShuKXx8emUuJGlzRWxlbWVudE5vZGUobikmJihuPXplLiRjcmVhdGVUZXh0Tm9kZShuLmdldFRleHRDb250ZW50KCkpKSxpLmFwcGVuZChuKSxzdXBlci5hcHBlbmQoaSl9fXJldHVybiBjbih0aGlzKSx0aGlzfWV4dHJhY3RXaXRoQ2hpbGQoZSl7cmV0dXJuIGZ0KGUpfX07ZnVuY3Rpb24gZ3godCxlLG4pe2xldCByPVtdLGk9W107dmFyIG89ZS5saXN0O2lmKG8hPT12b2lkIDApe2xldCBzPW9bYCR7bi5fX3RhZ31EZXB0aGBdfHxbXTtlPVdFKG4pLTE7bGV0IGE9ZSVzLmxlbmd0aDt2YXIgbD1zW2FdO2xldCB1PW9bbi5fX3RhZ10sYztpZihvPW8ubmVzdGVkLG8hPT12b2lkIDAmJm8ubGlzdCYmKGM9by5saXN0KSx1IT09dm9pZCAwJiZyLnB1c2godSksbCE9PXZvaWQgMClmb3IobD1sLnNwbGl0KCIgIiksci5wdXNoKC4uLmwpLGw9MDtsPHMubGVuZ3RoO2wrKylsIT09YSYmaS5wdXNoKG4uX190YWcrbCk7YyE9PXZvaWQgMCYmKG49Yy5zcGxpdCgiICIpLDE8ZT9yLnB1c2goLi4ubik6aS5wdXNoKC4uLm4pKX0wPGkubGVuZ3RoJiZmby5yZW1vdmVDbGFzc05hbWVzRnJvbUVsZW1lbnQodCwuLi5pKSwwPHIubGVuZ3RoJiZmby5hZGRDbGFzc05hbWVzVG9FbGVtZW50KHQsLi4ucil9ZnVuY3Rpb24gSk8odCl7bGV0IGU9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07ZnQobik/KGUucHVzaChuKSxuPW4uZ2V0Q2hpbGRyZW4oKSwxPG4ubGVuZ3RoJiZuLmZvckVhY2goaT0+e05lKGkpJiZlLnB1c2goZngoaSkpfSkpOmUucHVzaChmeChuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdngodCl7bGV0IGU9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49bnVsbDtyZXR1cm4gZT09PSJvbCI/bj1nbigibnVtYmVyIix0LnN0YXJ0KTplPT09InVsIiYmKG49Zm8uaXNIVE1MRWxlbWVudCh0KSYmdC5nZXRBdHRyaWJ1dGUoIl9fbGV4aWNhbGxpc3R0eXBlIik9PT0iY2hlY2siP2duKCJjaGVjayIpOmduKCJidWxsZXQiKSkse2FmdGVyOkpPLG5vZGU6bn19bGV0IHl4PXtvbDoibnVtYmVyIix1bDoiYnVsbGV0In07ZnVuY3Rpb24gZ24odCxlPTEpe3JldHVybiB6ZS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IGt2KHQsZSkpfWZ1bmN0aW9uIE5lKHQpe3JldHVybiB0IGluc3RhbmNlb2Yga3Z9bGV0IFFPPXplLmNyZWF0ZUNvbW1hbmQoIklOU0VSVF9VTk9SREVSRURfTElTVF9DT01NQU5EIikscU89emUuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5EIiksZVA9emUuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX0NIRUNLX0xJU1RfQ09NTUFORCIpLHRQPXplLmNyZWF0ZUNvbW1hbmQoIlJFTU9WRV9MSVNUX0NPTU1BTkQiKTt3bi4kY3JlYXRlTGlzdEl0ZW1Ob2RlPUJuO3duLiRjcmVhdGVMaXN0Tm9kZT1nbjt3bi4kZ2V0TGlzdERlcHRoPVdFO3duLiRoYW5kbGVMaXN0SW5zZXJ0UGFyYWdyYXBoPWZ1bmN0aW9uKCl7dmFyIHQ9emUuJGdldFNlbGVjdGlvbigpO2lmKCF6ZS4kaXNSYW5nZVNlbGVjdGlvbih0KXx8IXQuaXNDb2xsYXBzZWQoKXx8KHQ9dC5hbmNob3IuZ2V0Tm9kZSgpLCFmdCh0KXx8dC5nZXRDaGlsZHJlblNpemUoKSE9PTApKXJldHVybiExO3ZhciBlPSRtKHQpLG49dC5nZXRQYXJlbnQoKTtOZShuKXx8Z3MoNDApO2xldCByPW4uZ2V0UGFyZW50KCksaTtpZih6ZS4kaXNSb290T3JTaGFkb3dSb290KHIpKWk9emUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSxlLmluc2VydEFmdGVyKGkpO2Vsc2UgaWYoZnQocikpaT1CbigpLHIuaW5zZXJ0QWZ0ZXIoaSk7ZWxzZSByZXR1cm4hMTtpZihpLnNlbGVjdCgpLGU9dC5nZXROZXh0U2libGluZ3MoKSwwPGUubGVuZ3RoKXtsZXQgbz1nbihuLmdldExpc3RUeXBlKCkpO3plLiRpc1BhcmFncmFwaE5vZGUoaSk/aS5pbnNlcnRBZnRlcihvKToobj1CbigpLG4uYXBwZW5kKG8pLGkuaW5zZXJ0QWZ0ZXIobikpLGUuZm9yRWFjaChsPT57bC5yZW1vdmUoKSxvLmFwcGVuZChsKX0pfXJldHVybiBHTyh0KSwhMH07d24uJGlzTGlzdEl0ZW1Ob2RlPWZ0O3duLiRpc0xpc3ROb2RlPU5lO3duLklOU0VSVF9DSEVDS19MSVNUX0NPTU1BTkQ9ZVA7d24uSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5EPXFPO3duLklOU0VSVF9VTk9SREVSRURfTElTVF9DT01NQU5EPVFPO3duLkxpc3RJdGVtTm9kZT1EZjt3bi5MaXN0Tm9kZT1rdjt3bi5SRU1PVkVfTElTVF9DT01NQU5EPXRQO3duLmluc2VydExpc3Q9ZnVuY3Rpb24odCxlKXt0LnVwZGF0ZSgoKT0+e3ZhciBuPXplLiRnZXRTZWxlY3Rpb24oKTtpZih6ZS4kaXNSYW5nZVNlbGVjdGlvbihuKXx8emUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pKXt2YXIgcj1uLmdldE5vZGVzKCk7bj1uLmFuY2hvci5nZXROb2RlKCk7dmFyIGk9bi5nZXRQYXJlbnQoKTtpZihIRShuLHIpKXI9Z24oZSksemUuJGlzUm9vdE9yU2hhZG93Um9vdChpKT8obi5yZXBsYWNlKHIpLGk9Qm4oKSx6ZS4kaXNFbGVtZW50Tm9kZShuKSYmKGkuc2V0Rm9ybWF0KG4uZ2V0Rm9ybWF0VHlwZSgpKSxpLnNldEluZGVudChuLmdldEluZGVudCgpKSksci5hcHBlbmQoaSkpOmZ0KG4pJiYobj1uLmdldFBhcmVudE9yVGhyb3coKSxxbyhyLG4uZ2V0Q2hpbGRyZW4oKSksbi5yZXBsYWNlKHIpKTtlbHNlIGZvcihuPW5ldyBTZXQsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbz1yW2ldO2lmKHplLiRpc0VsZW1lbnROb2RlKG8pJiZvLmlzRW1wdHkoKSYmIW4uaGFzKG8uZ2V0S2V5KCkpKWh4KG8sZSk7ZWxzZSBpZih6ZS4kaXNMZWFmTm9kZShvKSlmb3Iobz1vLmdldFBhcmVudCgpO28hPW51bGw7KXtsZXQgcz1vLmdldEtleSgpO2lmKE5lKG8pKXtpZighbi5oYXMocykpe3ZhciBsPWduKGUpO3FvKGwsby5nZXRDaGlsZHJlbigpKSxvLnJlcGxhY2UobCksY24obCksbi5hZGQocyl9YnJlYWt9ZWxzZXtpZihsPW8uZ2V0UGFyZW50KCksemUuJGlzUm9vdE9yU2hhZG93Um9vdChsKSYmIW4uaGFzKHMpKXtuLmFkZChzKSxoeChvLGUpO2JyZWFrfW89bH19fX19KX07d24ucmVtb3ZlTGlzdD1mdW5jdGlvbih0KXt0LnVwZGF0ZSgoKT0+e2xldCBlPXplLiRnZXRTZWxlY3Rpb24oKTtpZih6ZS4kaXNSYW5nZVNlbGVjdGlvbihlKSl7dmFyIG49bmV3IFNldCxyPWUuZ2V0Tm9kZXMoKSxpPWUuYW5jaG9yLmdldE5vZGUoKTtpZihIRShpLHIpKW4uYWRkKCRtKGkpKTtlbHNlIGZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07emUuJGlzTGVhZk5vZGUobykmJihvPWZvLiRnZXROZWFyZXN0Tm9kZU9mVHlwZShvLERmKSxvIT1udWxsJiZuLmFkZCgkbShvKSkpfWZvcihsZXQgbCBvZiBuKXtuPWwscj1WRShsKTtmb3IobGV0IHMgb2YgcilyPXplLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCkscW8ocixzLmdldENoaWxkcmVuKCkpLG4uaW5zZXJ0QWZ0ZXIociksbj1yLHMuX19rZXk9PT1lLmFuY2hvci5rZXkmJmUuYW5jaG9yLnNldChyLmdldEtleSgpLDAsImVsZW1lbnQiKSxzLl9fa2V5PT09ZS5mb2N1cy5rZXkmJmUuZm9jdXMuc2V0KHIuZ2V0S2V5KCksMCwiZWxlbWVudCIpLHMucmVtb3ZlKCk7bC5yZW1vdmUoKX19fSl9O2NvbnN0IG5QPXduO3ZhciBVaT1uUCxZRT17fSxJZj17fSxYRT1wO2Z1bmN0aW9uIHJQKHQpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7ZS5hcHBlbmQoImNvZGUiLHQpO2ZvcihsZXQgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZS5hcHBlbmQoInYiLGFyZ3VtZW50c1tuXSk7dGhyb3cgRXJyb3IoYE1pbmlmaWVkIExleGljYWwgZXJyb3IgIyR7dH07IHZpc2l0IGh0dHBzOi8vbGV4aWNhbC5kZXYvZG9jcy9lcnJvcj8ke2V9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5gKX1sZXQgSkU9WEUuY3JlYXRlQ29udGV4dChudWxsKTtJZi5MZXhpY2FsQ29tcG9zZXJDb250ZXh0PUpFO0lmLmNyZWF0ZUxleGljYWxDb21wb3NlckNvbnRleHQ9ZnVuY3Rpb24odCxlKXtsZXQgbj1udWxsO3JldHVybiB0IT1udWxsJiYobj10WzFdKSx7Z2V0VGhlbWU6ZnVuY3Rpb24oKXtyZXR1cm4gZT8/KG4hPW51bGw/bi5nZXRUaGVtZSgpOm51bGwpfX19O0lmLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQ9ZnVuY3Rpb24oKXtsZXQgdD1YRS51c2VDb250ZXh0KEpFKTtyZXR1cm4gdD09bnVsbCYmclAoOCksdH07Y29uc3QgaVA9SWY7dmFyIE5yPWlQLHh4PU5yLGdhPV9lLEZkPXA7bGV0IFFFPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1Ijt2YXIgb1A9UUU/RmQudXNlTGF5b3V0RWZmZWN0OkZkLnVzZUVmZmVjdDtsZXQgeGM9e3RhZzoiaGlzdG9yeS1tZXJnZSJ9O2Z1bmN0aW9uIGxQKHQsZSl7aWYoZSE9PW51bGwpe2lmKGU9PT12b2lkIDApdC51cGRhdGUoKCk9Pnt2YXIgbj1nYS4kZ2V0Um9vdCgpO2lmKG4uaXNFbXB0eSgpKXtsZXQgcj1nYS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpO24uYXBwZW5kKHIpLG49UUU/ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDpudWxsLChnYS4kZ2V0U2VsZWN0aW9uKCkhPT1udWxsfHxuIT09bnVsbCYmbj09PXQuZ2V0Um9vdEVsZW1lbnQoKSkmJnIuc2VsZWN0KCl9fSx4Yyk7ZWxzZSBpZihlIT09bnVsbClzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpsZXQgbj10LnBhcnNlRWRpdG9yU3RhdGUoZSk7dC5zZXRFZGl0b3JTdGF0ZShuLHhjKTticmVhaztjYXNlIm9iamVjdCI6dC5zZXRFZGl0b3JTdGF0ZShlLHhjKTticmVhaztjYXNlImZ1bmN0aW9uIjp0LnVwZGF0ZSgoKT0+e2dhLiRnZXRSb290KCkuaXNFbXB0eSgpJiZlKHQpfSx4Yyl9fX1ZRS5MZXhpY2FsQ29tcG9zZXI9ZnVuY3Rpb24oe2luaXRpYWxDb25maWc6dCxjaGlsZHJlbjplfSl7bGV0IG49RmQudXNlTWVtbygoKT0+e2NvbnN0e3RoZW1lOnIsbmFtZXNwYWNlOmksZWRpdG9yX19ERVBSRUNBVEVEOm8sbm9kZXM6bCxvbkVycm9yOnMsZWRpdG9yU3RhdGU6YX09dCx1PXh4LmNyZWF0ZUxleGljYWxDb21wb3NlckNvbnRleHQobnVsbCxyKTtsZXQgYz1vfHxudWxsO2lmKGM9PT1udWxsKXtjb25zdCBkPWdhLmNyZWF0ZUVkaXRvcih7ZWRpdGFibGU6dC5lZGl0YWJsZSxuYW1lc3BhY2U6aSxub2RlczpsLG9uRXJyb3I6Zj0+cyhmLGQpLHRoZW1lOnJ9KTtsUChkLGEpLGM9ZH1yZXR1cm5bYyx1XX0sW10pO3JldHVybiBvUCgoKT0+e2xldCByPXQuZWRpdGFibGUsW2ldPW47aS5zZXRFZGl0YWJsZShyIT09dm9pZCAwP3I6ITApfSxbXSksRmQuY3JlYXRlRWxlbWVudCh4eC5MZXhpY2FsQ29tcG9zZXJDb250ZXh0LlByb3ZpZGVyLHt2YWx1ZTpufSxlKX07Y29uc3Qgc1A9WUU7dmFyIGFQPXNQLExhPXA7ZnVuY3Rpb24gVG0odCxlKXtyZXR1cm4gVG09T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24obixyKXtyZXR1cm4gbi5fX3Byb3RvX189cixufSxUbSh0LGUpfWZ1bmN0aW9uIHVQKHQsZSl7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCxUbSh0LGUpfWZ1bmN0aW9uIGNQKHQsZSl7cmV0dXJuIHQ9PT12b2lkIDAmJih0PVtdKSxlPT09dm9pZCAwJiYoZT1bXSksdC5sZW5ndGghPT1lLmxlbmd0aHx8dC5zb21lKGZ1bmN0aW9uKG4scil7cmV0dXJuIU9iamVjdC5pcyhuLGVbcl0pfSl9dmFyIF94PXtlcnJvcjpudWxsfSxkUD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7Zm9yKHZhciByLGk9YXJndW1lbnRzLmxlbmd0aCxvPUFycmF5KGkpLGw9MDtsPGk7bCsrKW9bbF09YXJndW1lbnRzW2xdO3JldHVybiByPXQuY2FsbC5hcHBseSh0LFt0aGlzXS5jb25jYXQobykpfHx0aGlzLHIuc3RhdGU9X3gsci5yZXNldEVycm9yQm91bmRhcnk9ZnVuY3Rpb24oKXtmb3IodmFyIHMsYT1hcmd1bWVudHMubGVuZ3RoLHU9QXJyYXkoYSksYz0wO2M8YTtjKyspdVtjXT1hcmd1bWVudHNbY107ci5wcm9wcy5vblJlc2V0PT1udWxsfHwocz1yLnByb3BzKS5vblJlc2V0LmFwcGx5KHMsdSksci5yZXNldCgpfSxyfXVQKGUsdCksZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I9ZnVuY3Rpb24ocil7cmV0dXJue2Vycm9yOnJ9fTt2YXIgbj1lLnByb3RvdHlwZTtyZXR1cm4gbi5yZXNldD1mdW5jdGlvbigpe3RoaXMuc2V0U3RhdGUoX3gpfSxuLmNvbXBvbmVudERpZENhdGNoPWZ1bmN0aW9uKHIsaSl7dmFyIG8sbDsobz0obD10aGlzLnByb3BzKS5vbkVycm9yKT09bnVsbHx8by5jYWxsKGwscixpKX0sbi5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24ocixpKXt2YXIgbz10aGlzLnByb3BzLnJlc2V0S2V5cztpZih0aGlzLnN0YXRlLmVycm9yIT09bnVsbCYmaS5lcnJvciE9PW51bGwmJmNQKHIucmVzZXRLZXlzLG8pKXt2YXIgbCxzOyhsPShzPXRoaXMucHJvcHMpLm9uUmVzZXRLZXlzQ2hhbmdlKT09bnVsbHx8bC5jYWxsKHMsci5yZXNldEtleXMsbyksdGhpcy5yZXNldCgpfX0sbi5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgcj10aGlzLnN0YXRlLmVycm9yLGk9dGhpcy5wcm9wcyxvPWkuZmFsbGJhY2tSZW5kZXIsbD1pLkZhbGxiYWNrQ29tcG9uZW50O2lmKGk9aS5mYWxsYmFjayxyIT09bnVsbCl7aWYocj17ZXJyb3I6cixyZXNldEVycm9yQm91bmRhcnk6dGhpcy5yZXNldEVycm9yQm91bmRhcnl9LExhLmlzVmFsaWRFbGVtZW50KGkpKXJldHVybiBpO2lmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXJldHVybiBvKHIpO2lmKGwpcmV0dXJuIExhLmNyZWF0ZUVsZW1lbnQobCxyKTt0aHJvdyBFcnJvcigicmVhY3QtZXJyb3ItYm91bmRhcnkgcmVxdWlyZXMgZWl0aGVyIGEgZmFsbGJhY2ssIGZhbGxiYWNrUmVuZGVyLCBvciBGYWxsYmFja0NvbXBvbmVudCBwcm9wIil9cmV0dXJuIHRoaXMucHJvcHMuY2hpbGRyZW59LGV9KExhLkNvbXBvbmVudCksZlA9ZnVuY3Rpb24oe2NoaWxkcmVuOnQsb25FcnJvcjplfSl7cmV0dXJuIExhLmNyZWF0ZUVsZW1lbnQoZFAse2ZhbGxiYWNrOkxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse3N0eWxlOntib3JkZXI6IjFweCBzb2xpZCAjZjAwIixjb2xvcjoiI2YwMCIscGFkZGluZzoiOHB4In19LCJBbiBlcnJvciB3YXMgdGhyb3duLiIpLG9uRXJyb3I6ZX0sdCl9O2NvbnN0IGhQPWZQO3ZhciBwUD1oUDtjb25zdCBtUD1PdShwUCk7dmFyIGJ2PXt9LCR2PXt9LGdQPUZ0LFllPV9lO2Z1bmN0aW9uIHZQKHQsZSxuLHIsaSl7aWYodD09PW51bGx8fG4uc2l6ZT09PTAmJnIuc2l6ZT09PTAmJiFpKXJldHVybiAwO3ZhciBvPWUuX3NlbGVjdGlvbixsPXQuX3NlbGVjdGlvbjtpZihpKXJldHVybiAxO2lmKCEoWWUuJGlzUmFuZ2VTZWxlY3Rpb24obykmJlllLiRpc1JhbmdlU2VsZWN0aW9uKGwpJiZsLmlzQ29sbGFwc2VkKCkmJm8uaXNDb2xsYXBzZWQoKSkpcmV0dXJuIDA7aT1lLl9ub2RlTWFwO2xldCBzPVtdO2ZvcihsZXQgYSBvZiBuKW49aS5nZXQoYSksbiE9PXZvaWQgMCYmcy5wdXNoKG4pO2ZvcihsZXRbYSx1XW9mIHIpdSYmKHI9aS5nZXQoYSkscj09PXZvaWQgMHx8WWUuJGlzUm9vdE5vZGUocil8fHMucHVzaChyKSk7cmV0dXJuIHMubGVuZ3RoPT09MD8wOjE8cy5sZW5ndGg/KHI9ZS5fbm9kZU1hcCxlPXIuZ2V0KG8uYW5jaG9yLmtleSksbD1yLmdldChsLmFuY2hvci5rZXkpLGUmJmwmJiF0Ll9ub2RlTWFwLmhhcyhlLl9fa2V5KSYmWWUuJGlzVGV4dE5vZGUoZSkmJmUuX190ZXh0Lmxlbmd0aD09PTEmJm8uYW5jaG9yLm9mZnNldD09PTE/MjowKTooZT1zWzBdLHQ9dC5fbm9kZU1hcC5nZXQoZS5fX2tleSksIVllLiRpc1RleHROb2RlKHQpfHwhWWUuJGlzVGV4dE5vZGUoZSl8fHQuX19tb2RlIT09ZS5fX21vZGV8fCh0PXQuX190ZXh0LGU9ZS5fX3RleHQsdD09PWUpfHwobz1vLmFuY2hvcixsPWwuYW5jaG9yLG8ua2V5IT09bC5rZXl8fG8udHlwZSE9PSJ0ZXh0Iik/MDoobz1vLm9mZnNldCxsPWwub2Zmc2V0LHQ9ZS5sZW5ndGgtdC5sZW5ndGgsdD09PTEmJmw9PT1vLTE/Mjp0PT09LTEmJmw9PT1vKzE/Mzp0PT09LTEmJmw9PT1vPzQ6MCkpfWZ1bmN0aW9uIHlQKHQsZSl7bGV0IG49RGF0ZS5ub3coKSxyPTA7cmV0dXJuKGksbyxsLHMsYSx1KT0+e2xldCBjPURhdGUubm93KCk7aWYodS5oYXMoImhpc3RvcmljIikpcmV0dXJuIHI9MCxuPWMsMjtsZXQgZD12UChpLG8scyxhLHQuaXNDb21wb3NpbmcoKSksZj0oKCk9Pnt2YXIgaD1sPT09bnVsbHx8bC5lZGl0b3I9PT10LGc9dS5oYXMoImhpc3RvcnktcHVzaCIpO2lmKCFnJiZoJiZ1LmhhcygiaGlzdG9yeS1tZXJnZSIpKXJldHVybiAwO2lmKGk9PT1udWxsKXJldHVybiAxO3ZhciBtPW8uX3NlbGVjdGlvbjtpZighKDA8cy5zaXplfHwwPGEuc2l6ZSkpcmV0dXJuIG0hPT1udWxsPzA6MjtpZihnPT09ITEmJmQhPT0wJiZkPT09ciYmYzxuK2UmJmgpcmV0dXJuIDA7aWYocy5zaXplPT09MSl7e2c9QXJyYXkuZnJvbShzKVswXSxoPWkuX25vZGVNYXAuZ2V0KGcpLGc9by5fbm9kZU1hcC5nZXQoZyksbT1pLl9zZWxlY3Rpb247bGV0IHc9by5fc2VsZWN0aW9uLHY9ITE7WWUuJGlzUmFuZ2VTZWxlY3Rpb24obSkmJlllLiRpc1JhbmdlU2VsZWN0aW9uKHcpJiYodj1tLmFuY2hvci50eXBlPT09ImVsZW1lbnQiJiZtLmZvY3VzLnR5cGU9PT0iZWxlbWVudCImJncuYW5jaG9yLnR5cGU9PT0idGV4dCImJncuZm9jdXMudHlwZT09PSJ0ZXh0IiksaD0hdiYmWWUuJGlzVGV4dE5vZGUoaCkmJlllLiRpc1RleHROb2RlKGcpP2guX190eXBlPT09Zy5fX3R5cGUmJmguX190ZXh0PT09Zy5fX3RleHQmJmguX19tb2RlPT09Zy5fX21vZGUmJmguX19kZXRhaWw9PT1nLl9fZGV0YWlsJiZoLl9fc3R5bGU9PT1nLl9fc3R5bGUmJmguX19mb3JtYXQ9PT1nLl9fZm9ybWF0JiZoLl9fcGFyZW50PT09Zy5fX3BhcmVudDohMX1pZihoKXJldHVybiAwfXJldHVybiAxfSkoKTtyZXR1cm4gbj1jLHI9ZCxmfX0kdi5jcmVhdGVFbXB0eUhpc3RvcnlTdGF0ZT1mdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGwscmVkb1N0YWNrOltdLHVuZG9TdGFjazpbXX19OyR2LnJlZ2lzdGVySGlzdG9yeT1mdW5jdGlvbih0LGUsbil7bGV0IHI9eVAodCxuKTtuPSh7ZWRpdG9yU3RhdGU6bCxwcmV2RWRpdG9yU3RhdGU6cyxkaXJ0eUxlYXZlczphLGRpcnR5RWxlbWVudHM6dSx0YWdzOmN9KT0+e2NvbnN0IGQ9ZS5jdXJyZW50LGY9ZS5yZWRvU3RhY2ssaD1lLnVuZG9TdGFjayxnPWQ9PT1udWxsP251bGw6ZC5lZGl0b3JTdGF0ZTtpZihkPT09bnVsbHx8bCE9PWcpe2lmKHM9cihzLGwsZCxhLHUsYykscz09PTEpZi5sZW5ndGghPT0wJiYoZS5yZWRvU3RhY2s9W10sdC5kaXNwYXRjaENvbW1hbmQoWWUuQ0FOX1JFRE9fQ09NTUFORCwhMSkpLGQhPT1udWxsJiYoaC5wdXNoKHsuLi5kfSksdC5kaXNwYXRjaENvbW1hbmQoWWUuQ0FOX1VORE9fQ09NTUFORCwhMCkpO2Vsc2UgaWYocz09PTIpcmV0dXJuO2UuY3VycmVudD17ZWRpdG9yOnQsZWRpdG9yU3RhdGU6bH19fTtsZXQgaT1nUC5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJDb21tYW5kKFllLlVORE9fQ09NTUFORCwoKT0+e2xldCBsPWUucmVkb1N0YWNrLHM9ZS51bmRvU3RhY2s7aWYocy5sZW5ndGghPT0wKXtsZXQgYT1lLmN1cnJlbnQsdT1zLnBvcCgpO2EhPT1udWxsJiYobC5wdXNoKGEpLHQuZGlzcGF0Y2hDb21tYW5kKFllLkNBTl9SRURPX0NPTU1BTkQsITApKSxzLmxlbmd0aD09PTAmJnQuZGlzcGF0Y2hDb21tYW5kKFllLkNBTl9VTkRPX0NPTU1BTkQsITEpLGUuY3VycmVudD11fHxudWxsLHUmJnUuZWRpdG9yLnNldEVkaXRvclN0YXRlKHUuZWRpdG9yU3RhdGUse3RhZzoiaGlzdG9yaWMifSl9cmV0dXJuITB9LFllLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChZZS5SRURPX0NPTU1BTkQsKCk9PntsZXQgbD1lLnJlZG9TdGFjazt2YXIgcz1lLnVuZG9TdGFjaztpZihsLmxlbmd0aCE9PTApe2xldCBhPWUuY3VycmVudDthIT09bnVsbCYmKHMucHVzaChhKSx0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fVU5ET19DT01NQU5ELCEwKSkscz1sLnBvcCgpLGwubGVuZ3RoPT09MCYmdC5kaXNwYXRjaENvbW1hbmQoWWUuQ0FOX1JFRE9fQ09NTUFORCwhMSksZS5jdXJyZW50PXN8fG51bGwscyYmcy5lZGl0b3Iuc2V0RWRpdG9yU3RhdGUocy5lZGl0b3JTdGF0ZSx7dGFnOiJoaXN0b3JpYyJ9KX1yZXR1cm4hMH0sWWUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKFllLkNMRUFSX0VESVRPUl9DT01NQU5ELCgpPT4oZS51bmRvU3RhY2s9W10sZS5yZWRvU3RhY2s9W10sZS5jdXJyZW50PW51bGwsITEpLFllLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChZZS5DTEVBUl9ISVNUT1JZX0NPTU1BTkQsKCk9PihlLnVuZG9TdGFjaz1bXSxlLnJlZG9TdGFjaz1bXSxlLmN1cnJlbnQ9bnVsbCx0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fUkVET19DT01NQU5ELCExKSx0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fVU5ET19DT01NQU5ELCExKSwhMCksWWUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcihuKSksbz10LnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIobik7cmV0dXJuKCk9PntpKCksbygpfX07Y29uc3QgeFA9JHY7dmFyIF9QPXhQLHdQPU5yLE5tPV9QLHd4PXA7ZnVuY3Rpb24gU1AodCxlLG49MWUzKXtsZXQgcj13eC51c2VNZW1vKCgpPT5lfHxObS5jcmVhdGVFbXB0eUhpc3RvcnlTdGF0ZSgpLFtlXSk7d3gudXNlRWZmZWN0KCgpPT5ObS5yZWdpc3Rlckhpc3RvcnkodCxyLG4pLFtuLHQscl0pfWJ2LmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlPU5tLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlO2J2Lkhpc3RvcnlQbHVnaW49ZnVuY3Rpb24oe2V4dGVybmFsSGlzdG9yeVN0YXRlOnR9KXtsZXRbZV09d1AudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBTUChlLHQpLG51bGx9O2NvbnN0IEVQPWJ2O3ZhciBDUD1FUCxxRT17fSxrUD1OcixEYT1wLGJQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1Ij9EYS51c2VMYXlvdXRFZmZlY3Q6RGEudXNlRWZmZWN0O2Z1bmN0aW9uICRQKHQpe2xldFtlXT1rUC51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCksbj1EYS51c2VNZW1vKCgpPT50KGUpLFtlLHRdKSxyPURhLnVzZVJlZihuLmluaXRpYWxWYWx1ZUZuKCkpLFtpLG9dPURhLnVzZVN0YXRlKHIuY3VycmVudCk7cmV0dXJuIGJQKCgpPT57bGV0e2luaXRpYWxWYWx1ZUZuOmwsc3Vic2NyaWJlOnN9PW4sYT1sKCk7cmV0dXJuIHIuY3VycmVudCE9PWEmJihyLmN1cnJlbnQ9YSxvKGEpKSxzKHU9PntyLmN1cnJlbnQ9dSxvKHUpfSl9LFtuLHRdKSxpfWZ1bmN0aW9uIFRQKHQpe3JldHVybntpbml0aWFsVmFsdWVGbjooKT0+dC5pc0VkaXRhYmxlKCksc3Vic2NyaWJlOmU9PnQucmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKGUpfX12YXIgTlA9ZnVuY3Rpb24oKXtyZXR1cm4gJFAoVFApfTtjb25zdCBSUD1OUDt2YXIgT1A9UlAsU289e30sZG49X2U7ZnVuY3Rpb24gVHYodCxlPSEwKXtyZXR1cm4gdD8hMToodD1lQygpLGUmJih0PXQudHJpbSgpKSx0PT09IiIpfWZ1bmN0aW9uIGVDKCl7cmV0dXJuIGRuLiRnZXRSb290KCkuZ2V0VGV4dENvbnRlbnQoKX1mdW5jdGlvbiB0Qyh0KXtpZighVHYodCwhMSkpcmV0dXJuITE7dD1kbi4kZ2V0Um9vdCgpLmdldENoaWxkcmVuKCk7bGV0IGU9dC5sZW5ndGg7aWYoMTxlKXJldHVybiExO2ZvcihsZXQgcj0wO3I8ZTtyKyspe3ZhciBuPXRbcl07aWYoZG4uJGlzRGVjb3JhdG9yTm9kZShuKSlyZXR1cm4hMTtpZihkbi4kaXNFbGVtZW50Tm9kZShuKSl7aWYoIWRuLiRpc1BhcmFncmFwaE5vZGUobil8fG4uX19pbmRlbnQhPT0wKXJldHVybiExO249bi5nZXRDaGlsZHJlbigpO2xldCBpPW4ubGVuZ3RoO2ZvcihsZXQgbz0wO288aTtvKyspaWYoIWRuLiRpc1RleHROb2RlKG5bcl0pKXJldHVybiExfX1yZXR1cm4hMH1Tby4kY2FuU2hvd1BsYWNlaG9sZGVyPXRDO1NvLiRjYW5TaG93UGxhY2Vob2xkZXJDdXJyeT1mdW5jdGlvbih0KXtyZXR1cm4oKT0+dEModCl9O1NvLiRmaW5kVGV4dEludGVyc2VjdGlvbkZyb21DaGFyYWN0ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5nZXRGaXJzdENoaWxkKCk7dD0wO2U6Zm9yKDtuIT09bnVsbDspe2lmKGRuLiRpc0VsZW1lbnROb2RlKG4pKXt2YXIgcj1uLmdldEZpcnN0Q2hpbGQoKTtpZihyIT09bnVsbCl7bj1yO2NvbnRpbnVlfX1lbHNlIGlmKGRuLiRpc1RleHROb2RlKG4pKXtpZihyPW4uZ2V0VGV4dENvbnRlbnRTaXplKCksdCtyPmUpcmV0dXJue25vZGU6bixvZmZzZXQ6ZS10fTt0Kz1yfWlmKHI9bi5nZXROZXh0U2libGluZygpLHIhPT1udWxsKW49cjtlbHNle2ZvcihuPW4uZ2V0UGFyZW50KCk7biE9PW51bGw7KXtpZihyPW4uZ2V0TmV4dFNpYmxpbmcoKSxyIT09bnVsbCl7bj1yO2NvbnRpbnVlIGV9bj1uLmdldFBhcmVudCgpfWJyZWFrfX1yZXR1cm4gbnVsbH07U28uJGlzUm9vdFRleHRDb250ZW50RW1wdHk9VHY7U28uJGlzUm9vdFRleHRDb250ZW50RW1wdHlDdXJyeT1mdW5jdGlvbih0LGUpe3JldHVybigpPT5Udih0LGUpfTtTby4kcm9vdFRleHRDb250ZW50PWVDO1NvLnJlZ2lzdGVyTGV4aWNhbFRleHRFbnRpdHk9ZnVuY3Rpb24odCxlLG4scil7bGV0IGk9bD0+e2NvbnN0IHM9ZG4uJGNyZWF0ZVRleHROb2RlKGwuZ2V0VGV4dENvbnRlbnQoKSk7cy5zZXRGb3JtYXQobC5nZXRGb3JtYXQoKSksbC5yZXBsYWNlKHMpfSxvPXQucmVnaXN0ZXJOb2RlVHJhbnNmb3JtKGRuLlRleHROb2RlLGw9PntpZihsLmlzU2ltcGxlVGV4dCgpKXt2YXIgcz1sLmdldFByZXZpb3VzU2libGluZygpLGE9bC5nZXRUZXh0Q29udGVudCgpLHU9bDtpZihkbi4kaXNUZXh0Tm9kZShzKSl7dmFyIGM9cy5nZXRUZXh0Q29udGVudCgpLGQ9ZShjK2EpO2lmKHMgaW5zdGFuY2VvZiBuKXtpZihkPT09bnVsbHx8cy5nZXRMYXRlc3QoKS5fX21vZGUhPT0wKXtpKHMpO3JldHVybn1pZihkPWQuZW5kLWMubGVuZ3RoLDA8ZCl7dT1hLnNsaWNlKDAsZCksdT1jK3Uscy5zZWxlY3QoKSxzLnNldFRleHRDb250ZW50KHUpLGQ9PT1hLmxlbmd0aD9sLnJlbW92ZSgpOihzPWEuc2xpY2UoZCksbC5zZXRUZXh0Q29udGVudChzKSk7cmV0dXJufX1lbHNlIGlmKGQ9PT1udWxsfHxkLnN0YXJ0PGMubGVuZ3RoKXJldHVybn1mb3IoOzspe2lmKGw9ZShhKSxhPWQ9bD09PW51bGw/IiI6YS5zbGljZShsLmVuZCksZD09PSIiKXtpZihjPXUuZ2V0TmV4dFNpYmxpbmcoKSxkbi4kaXNUZXh0Tm9kZShjKSl7aWYoZD11LmdldFRleHRDb250ZW50KCkrYy5nZXRUZXh0Q29udGVudCgpLGQ9ZShkKSxkPT09bnVsbCl7YyBpbnN0YW5jZW9mIG4/aShjKTpjLm1hcmtEaXJ0eSgpO2JyZWFrfWVsc2UgaWYoZC5zdGFydCE9PTApYnJlYWt9fWVsc2UgaWYoYz1lKGQpLGMhPT1udWxsJiZjLnN0YXJ0PT09MClicmVhaztpZihsPT09bnVsbClicmVhaztpZihsLnN0YXJ0PT09MCYmZG4uJGlzVGV4dE5vZGUocykmJnMuaXNUZXh0RW50aXR5KCkpY29udGludWU7bGV0IGY7aWYobC5zdGFydD09PTA/W2YsdV09dS5zcGxpdFRleHQobC5lbmQpOlssZix1XT11LnNwbGl0VGV4dChsLnN0YXJ0LGwuZW5kKSxsPXIoZiksbC5zZXRGb3JtYXQoZi5nZXRGb3JtYXQoKSksZi5yZXBsYWNlKGwpLHU9PW51bGwpYnJlYWt9fX0pO3JldHVybiB0PXQucmVnaXN0ZXJOb2RlVHJhbnNmb3JtKG4sbD0+e3ZhciBzPWwuZ2V0VGV4dENvbnRlbnQoKTtjb25zdCBhPWUocyk7YT09PW51bGx8fGEuc3RhcnQhPT0wP2kobCk6cy5sZW5ndGg+YS5lbmQ/bC5zcGxpdFRleHQoYS5lbmQpOihzPWwuZ2V0UHJldmlvdXNTaWJsaW5nKCksZG4uJGlzVGV4dE5vZGUocykmJnMuaXNUZXh0RW50aXR5KCkmJihpKHMpLGkobCkpLHM9bC5nZXROZXh0U2libGluZygpLGRuLiRpc1RleHROb2RlKHMpJiZzLmlzVGV4dEVudGl0eSgpJiYoaShzKSxsIGluc3RhbmNlb2YgbiYmaShsKSkpfSksW28sdF19O2NvbnN0IFBQPVNvO3ZhciBBUD1QUCxuQz17fSxfYz1fZTtuQy5yZWdpc3RlckRyYWdvblN1cHBvcnQ9ZnVuY3Rpb24odCl7bGV0IGU9d2luZG93LmxvY2F0aW9uLm9yaWdpbixuPXI9PntpZihyLm9yaWdpbj09PWUpe3ZhciBpPXQuZ2V0Um9vdEVsZW1lbnQoKTtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09aSYmKGk9ci5kYXRhLHR5cGVvZiBpPT0ic3RyaW5nIikpe3RyeXt2YXIgbz1KU09OLnBhcnNlKGkpfWNhdGNoe3JldHVybn1pZihvJiZvLnByb3RvY29sPT09Im51YW5yaWFfbWVzc2FnaW5nIiYmby50eXBlPT09InJlcXVlc3QiJiYobz1vLnBheWxvYWQpJiZvLmZ1bmN0aW9uSWQ9PT0ibWFrZUNoYW5nZXMiJiYobz1vLmFyZ3MpKXtjb25zdFtsLHMsYSx1LGNdPW87dC51cGRhdGUoKCk9Pntjb25zdCBkPV9jLiRnZXRTZWxlY3Rpb24oKTtpZihfYy4kaXNSYW5nZVNlbGVjdGlvbihkKSl7dmFyIGY9ZC5hbmNob3I7bGV0IGg9Zi5nZXROb2RlKCksZz0wLG09MDtfYy4kaXNUZXh0Tm9kZShoKSYmMDw9bCYmMDw9cyYmKGc9bCxtPWwrcyxkLnNldFRleHROb2RlUmFuZ2UoaCxnLGgsbSkpLChnIT09bXx8YSE9PSIiKSYmKGQuaW5zZXJ0UmF3VGV4dChhKSxoPWYuZ2V0Tm9kZSgpKSxfYy4kaXNUZXh0Tm9kZShoKSYmKGc9dSxtPXUrYyxmPWguZ2V0VGV4dENvbnRlbnRTaXplKCksZz1nPmY/ZjpnLG09bT5mP2Y6bSxkLnNldFRleHROb2RlUmFuZ2UoaCxnLGgsbSkpLHIuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9fSl9fX19O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbiwhMCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbiwhMCl9fTtjb25zdCBNUD1uQzt2YXIgTFA9TVAscXI9e30sYmk9e30sTnY9e30sU3g9Y28sRFA9RnQsV2w9X2U7ZnVuY3Rpb24gckModCxlLG4scj1udWxsKXtsZXQgaT1yIT1udWxsP2UuaXNTZWxlY3RlZChyKTohMCxvPVdsLiRpc0VsZW1lbnROb2RlKGUpJiZlLmV4Y2x1ZGVGcm9tQ29weSgiaHRtbCIpO3ZhciBsPWU7ciE9PW51bGwmJihsPVN4LiRjbG9uZVdpdGhQcm9wZXJ0aWVzKGUpLGw9V2wuJGlzVGV4dE5vZGUobCkmJnIhPW51bGw/U3guJHNsaWNlU2VsZWN0ZWRUZXh0Tm9kZUNvbnRlbnQocixsKTpsKTtsZXQgcz1XbC4kaXNFbGVtZW50Tm9kZShsKT9sLmdldENoaWxkcmVuKCk6W10se2VsZW1lbnQ6YSxhZnRlcjp1fT1sLmV4cG9ydERPTSh0KTtpZighYSlyZXR1cm4hMTtsZXQgYz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Zm9yKGxldCBkPTA7ZDxzLmxlbmd0aDtkKyspe2xldCBmPXNbZF0saD1yQyh0LGYsYyxyKTshaSYmV2wuJGlzRWxlbWVudE5vZGUoZSkmJmgmJmUuZXh0cmFjdFdpdGhDaGlsZChmLHIsImh0bWwiKSYmKGk9ITApfXJldHVybiBpJiYhbz8oRFAuaXNIVE1MRWxlbWVudChhKSYmYS5hcHBlbmQoYyksbi5hcHBlbmQoYSksdSYmKHQ9dS5jYWxsKGwsYSkpJiZhLnJlcGxhY2VXaXRoKHQpKTpuLmFwcGVuZChjKSxpfWxldCBpQz1uZXcgU2V0KFsiU1RZTEUiLCJTQ1JJUFQiXSk7ZnVuY3Rpb24gb0ModCxlLG49bmV3IE1hcCxyKXtsZXQgaT1bXTtpZihpQy5oYXModC5ub2RlTmFtZSkpcmV0dXJuIGk7bGV0IG89bnVsbDt2YXIgbCx7bm9kZU5hbWU6c309dCxhPWUuX2h0bWxDb252ZXJzaW9ucy5nZXQocy50b0xvd2VyQ2FzZSgpKTtpZihzPW51bGwsYSE9PXZvaWQgMClmb3IobCBvZiBhKWE9bCh0KSxhIT09bnVsbCYmKHM9PT1udWxsfHxzLnByaW9yaXR5PGEucHJpb3JpdHkpJiYocz1hKTtpZihzPShsPXMhPT1udWxsP3MuY29udmVyc2lvbjpudWxsKT9sKHQpOm51bGwsbD1udWxsLHMhPT1udWxsKXtpZihsPXMuYWZ0ZXIsYT1zLm5vZGUsbz1BcnJheS5pc0FycmF5KGEpP2FbYS5sZW5ndGgtMV06YSxvIT09bnVsbCl7Zm9yKHZhclssdV1vZiBuKWlmKG89dShvLHIpLCFvKWJyZWFrO28mJmkucHVzaCguLi5BcnJheS5pc0FycmF5KGEpP2E6W29dKX1zLmZvckNoaWxkIT1udWxsJiZuLnNldCh0Lm5vZGVOYW1lLHMuZm9yQ2hpbGQpfWZvcih0PXQuY2hpbGROb2RlcyxyPVtdLHU9MDt1PHQubGVuZ3RoO3UrKylyLnB1c2goLi4ub0ModFt1XSxlLG5ldyBNYXAobiksbykpO3JldHVybiBsIT1udWxsJiYocj1sKHIpKSxvPT1udWxsP2k9aS5jb25jYXQocik6V2wuJGlzRWxlbWVudE5vZGUobykmJm8uYXBwZW5kKC4uLnIpLGl9TnYuJGdlbmVyYXRlSHRtbEZyb21Ob2Rlcz1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBkb2N1bWVudD4idSJ8fHR5cGVvZiB3aW5kb3c+InUiKXRocm93IEVycm9yKCJUbyB1c2UgJGdlbmVyYXRlSHRtbEZyb21Ob2RlcyBpbiBoZWFkbGVzcyBtb2RlIHBsZWFzZSBpbml0aWFsaXplIGEgaGVhZGxlc3MgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBzdWNoIGFzIEpTRG9tIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIik7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikscj1XbC4kZ2V0Um9vdCgpLmdldENoaWxkcmVuKCk7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspckModCxyW2ldLG4sZSk7cmV0dXJuIG4uaW5uZXJIVE1MfTtOdi4kZ2VuZXJhdGVOb2Rlc0Zyb21ET009ZnVuY3Rpb24odCxlKXtlPWUuYm9keT9lLmJvZHkuY2hpbGROb2RlczpbXTtsZXQgbj1bXTtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIHI9ZVtpXTtpQy5oYXMoci5ub2RlTmFtZSl8fChyPW9DKHIsdCksciE9PW51bGwmJihuPW4uY29uY2F0KHIpKSl9cmV0dXJuIG59O2NvbnN0IElQPU52O3ZhciBqUD1JUCxsQz1qUCxSbT1jbyx0cz1GdCxwZT1fZTtmdW5jdGlvbiBzaSh0KXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2UuYXBwZW5kKCJjb2RlIix0KTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWUuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke3R9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHtlfSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9bGV0IHNDPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1IjtmdW5jdGlvbiBhQyh0KXtsZXQgZT1wZS4kZ2V0U2VsZWN0aW9uKCk7aWYoZT09bnVsbCl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgdmFsaWQgTGV4aWNhbFNlbGVjdGlvbiIpO3JldHVybiBwZS4kaXNSYW5nZVNlbGVjdGlvbihlKSYmZS5pc0NvbGxhcHNlZCgpfHxlLmdldE5vZGVzKCkubGVuZ3RoPT09MD8iIjpsQy4kZ2VuZXJhdGVIdG1sRnJvbU5vZGVzKHQsZSl9ZnVuY3Rpb24gdUModCl7bGV0IGU9cGUuJGdldFNlbGVjdGlvbigpO2lmKGU9PW51bGwpdGhyb3cgRXJyb3IoIkV4cGVjdGVkIHZhbGlkIExleGljYWxTZWxlY3Rpb24iKTtyZXR1cm4gcGUuJGlzUmFuZ2VTZWxlY3Rpb24oZSkmJmUuaXNDb2xsYXBzZWQoKXx8ZS5nZXROb2RlcygpLmxlbmd0aD09PTA/bnVsbDpKU09OLnN0cmluZ2lmeShkQyh0LGUpKX1mdW5jdGlvbiBPbSh0LGUsbil7KHBlLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKXx8dHMuJGZpbmRNYXRjaGluZ1BhcmVudChuLmFuY2hvci5nZXROb2RlKCkscj0+cGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUocikpIT09bnVsbCYmdHMuJGZpbmRNYXRjaGluZ1BhcmVudChuLmZvY3VzLmdldE5vZGUoKSxyPT5wZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShyKSkhPT1udWxsKSYmZS5sZW5ndGg9PT0xJiZwZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKGVbMF0pP0ZQKGUsbiwhMSx0KTp6UChlLG4pfWZ1bmN0aW9uIHpQKHQsZSl7bGV0IG49W10scj1udWxsO2ZvcihsZXQgaT0wO2k8dC5sZW5ndGg7aSsrKXtsZXQgbz10W2ldLGw9cGUuJGlzTGluZUJyZWFrTm9kZShvKTtpZihsfHxwZS4kaXNEZWNvcmF0b3JOb2RlKG8pJiZvLmlzSW5saW5lKCl8fHBlLiRpc0VsZW1lbnROb2RlKG8pJiZvLmlzSW5saW5lKCl8fHBlLiRpc1RleHROb2RlKG8pfHxvLmlzUGFyZW50UmVxdWlyZWQoKSl7aWYocj09PW51bGwmJihyPW8uY3JlYXRlUGFyZW50RWxlbWVudE5vZGUoKSxuLnB1c2gociksbCkpY29udGludWU7ciE9PW51bGwmJnIuYXBwZW5kKG8pfWVsc2Ugbi5wdXNoKG8pLHI9bnVsbH1wZS4kaXNSYW5nZVNlbGVjdGlvbihlKT9lLmluc2VydE5vZGVzKG4pOnBlLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihlKSYmKHQ9ZS5hbmNob3IuZ2V0Tm9kZSgpLHBlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKHQpfHxzaSg0MSksdC5hcHBlbmQoLi4ubikpfWZ1bmN0aW9uIEZQKHQsZSxuLHIpe3QubGVuZ3RoPT09MSYmcGUuREVQUkVDQVRFRF8kaXNHcmlkTm9kZSh0WzBdKXx8c2koNDIpO3ZhciBpPXRbMF07dD1pLmdldENoaWxkcmVuKCksbj1pLmdldEZpcnN0Q2hpbGRPclRocm93KCkuZ2V0Q2hpbGRyZW5TaXplKCk7dmFyIG89aS5nZXRDaGlsZHJlblNpemUoKSxsPXRzLiRmaW5kTWF0Y2hpbmdQYXJlbnQoZS5hbmNob3IuZ2V0Tm9kZSgpLGg9PnBlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGgpKTtlPShpPWwmJnRzLiRmaW5kTWF0Y2hpbmdQYXJlbnQobCxoPT5wZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKGgpKSkmJnRzLiRmaW5kTWF0Y2hpbmdQYXJlbnQoaSxoPT5wZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKGgpKSxwZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShsKSYmcGUuREVQUkVDQVRFRF8kaXNHcmlkUm93Tm9kZShpKSYmcGUuREVQUkVDQVRFRF8kaXNHcmlkTm9kZShlKXx8c2koNDMpO3ZhciBzPWkuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxhPU1hdGgubWluKGUuZ2V0Q2hpbGRyZW5TaXplKCktMSxzK28tMSk7bz1sLmdldEluZGV4V2l0aGluUGFyZW50KCksbD1NYXRoLm1pbihpLmdldENoaWxkcmVuU2l6ZSgpLTEsbytuLTEpLG49TWF0aC5taW4obyxsKSxpPU1hdGgubWluKHMsYSksbz1NYXRoLm1heChvLGwpLHM9TWF0aC5tYXgocyxhKSxhPWUuZ2V0Q2hpbGRyZW4oKSxsPTA7bGV0IHUsYztmb3IobGV0IGg9aTtoPD1zO2grKyl7dmFyIGQ9YVtoXTtwZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKGQpfHxzaSgyNCk7dmFyIGY9dFtsXTtwZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKGYpfHxzaSgyNCksZD1kLmdldENoaWxkcmVuKCksZj1mLmdldENoaWxkcmVuKCk7bGV0IGc9MDtmb3IobGV0IG09bjttPD1vO20rKyl7bGV0IHc9ZFttXTtwZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZSh3KXx8c2koMjUpO2xldCB2PWZbZ107cGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUodil8fHNpKDI1KSxoPT09aSYmbT09PW4/dT13LmdldEtleSgpOmg9PT1zJiZtPT09byYmKGM9dy5nZXRLZXkoKSk7bGV0IHk9dy5nZXRDaGlsZHJlbigpO3YuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKF89PntwZS4kaXNUZXh0Tm9kZShfKSYmcGUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKS5hcHBlbmQoXyksdy5hcHBlbmQoXyl9KSx5LmZvckVhY2goXz0+Xy5yZW1vdmUoKSksZysrfWwrK311JiZjJiYodD1wZS5ERVBSRUNBVEVEXyRjcmVhdGVHcmlkU2VsZWN0aW9uKCksdC5zZXQoZS5nZXRLZXkoKSx1LGMpLHBlLiRzZXRTZWxlY3Rpb24odCksci5kaXNwYXRjaENvbW1hbmQocGUuU0VMRUNUSU9OX0NIQU5HRV9DT01NQU5ELHZvaWQgMCkpfWZ1bmN0aW9uIGNDKHQsZSxuLHI9W10pe2xldCBpPWUhPW51bGw/bi5pc1NlbGVjdGVkKGUpOiEwLG89cGUuJGlzRWxlbWVudE5vZGUobikmJm4uZXhjbHVkZUZyb21Db3B5KCJodG1sIik7dmFyIGw9bjtpZihlIT09bnVsbCl7dmFyIHM9Um0uJGNsb25lV2l0aFByb3BlcnRpZXMobik7bD1zPXBlLiRpc1RleHROb2RlKHMpJiZlIT1udWxsP1JtLiRzbGljZVNlbGVjdGVkVGV4dE5vZGVDb250ZW50KGUscyk6c31sZXQgYT1wZS4kaXNFbGVtZW50Tm9kZShsKT9sLmdldENoaWxkcmVuKCk6W107dmFyIHU9bDtzPXUuZXhwb3J0SlNPTigpO3ZhciBjPXUuY29uc3RydWN0b3I7cy50eXBlIT09Yy5nZXRUeXBlKCkmJnNpKDU4LGMubmFtZSk7bGV0IGQ9cy5jaGlsZHJlbjtmb3IocGUuJGlzRWxlbWVudE5vZGUodSkmJihBcnJheS5pc0FycmF5KGQpfHxzaSg1OSxjLm5hbWUpKSxwZS4kaXNUZXh0Tm9kZShsKSYmKGw9bC5fX3RleHQsMDxsLmxlbmd0aD9zLnRleHQ9bDppPSExKSxsPTA7bDxhLmxlbmd0aDtsKyspdT1hW2xdLGM9Y0ModCxlLHUscy5jaGlsZHJlbiksIWkmJnBlLiRpc0VsZW1lbnROb2RlKG4pJiZjJiZuLmV4dHJhY3RXaXRoQ2hpbGQodSxlLCJjbG9uZSIpJiYoaT0hMCk7aWYoaSYmIW8pci5wdXNoKHMpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShzLmNoaWxkcmVuKSlmb3IodD0wO3Q8cy5jaGlsZHJlbi5sZW5ndGg7dCsrKXIucHVzaChzLmNoaWxkcmVuW3RdKTtyZXR1cm4gaX1mdW5jdGlvbiBkQyh0LGUpe2xldCBuPVtdLHI9cGUuJGdldFJvb3QoKS5nZXRDaGlsZHJlbigpO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKWNDKHQsZSxyW2ldLG4pO3JldHVybntuYW1lc3BhY2U6dC5fY29uZmlnLm5hbWVzcGFjZSxub2RlczpufX1mdW5jdGlvbiBmQyh0KXtsZXQgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IHI9cGUuJHBhcnNlU2VyaWFsaXplZE5vZGUodFtuXSk7cGUuJGlzVGV4dE5vZGUocikmJlJtLiRhZGROb2RlU3R5bGUociksZS5wdXNoKHIpfXJldHVybiBlfWxldCB3bD1udWxsO2Z1bmN0aW9uIEV4KHQsZSl7dmFyIG49c0M/KHQuX3dpbmRvd3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKTpudWxsO2lmKCFuKXJldHVybiExO3ZhciByPW4uYW5jaG9yTm9kZTtpZihuPW4uZm9jdXNOb2RlLHIhPT1udWxsJiZuIT09bnVsbCYmIXBlLmlzU2VsZWN0aW9uV2l0aGluRWRpdG9yKHQscixuKXx8KGUucHJldmVudERlZmF1bHQoKSxlPWUuY2xpcGJvYXJkRGF0YSxyPXBlLiRnZXRTZWxlY3Rpb24oKSxlPT09bnVsbHx8cj09PW51bGwpKXJldHVybiExO249YUModCksdD11Qyh0KTtsZXQgaT0iIjtyZXR1cm4gciE9PW51bGwmJihpPXIuZ2V0VGV4dENvbnRlbnQoKSksbiE9PW51bGwmJmUuc2V0RGF0YSgidGV4dC9odG1sIixuKSx0IT09bnVsbCYmZS5zZXREYXRhKCJhcHBsaWNhdGlvbi94LWxleGljYWwtZWRpdG9yIix0KSxlLnNldERhdGEoInRleHQvcGxhaW4iLGkpLCEwfWJpLiRnZW5lcmF0ZUpTT05Gcm9tU2VsZWN0ZWROb2Rlcz1kQztiaS4kZ2VuZXJhdGVOb2Rlc0Zyb21TZXJpYWxpemVkTm9kZXM9ZkM7YmkuJGdldEh0bWxDb250ZW50PWFDO2JpLiRnZXRMZXhpY2FsQ29udGVudD11QztiaS4kaW5zZXJ0RGF0YVRyYW5zZmVyRm9yUGxhaW5UZXh0PWZ1bmN0aW9uKHQsZSl7dD10LmdldERhdGEoInRleHQvcGxhaW4iKXx8dC5nZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiksdCE9bnVsbCYmZS5pbnNlcnRSYXdUZXh0KHQpfTtiaS4kaW5zZXJ0RGF0YVRyYW5zZmVyRm9yUmljaFRleHQ9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQuZ2V0RGF0YSgiYXBwbGljYXRpb24veC1sZXhpY2FsLWVkaXRvciIpO2lmKHIpdHJ5e2xldCBsPUpTT04ucGFyc2Uocik7aWYobC5uYW1lc3BhY2U9PT1uLl9jb25maWcubmFtZXNwYWNlJiZBcnJheS5pc0FycmF5KGwubm9kZXMpKXtsZXQgcz1mQyhsLm5vZGVzKTtyZXR1cm4gT20obixzLGUpfX1jYXRjaHt9aWYocj10LmdldERhdGEoInRleHQvaHRtbCIpKXRyeXt2YXIgaT1uZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHIsInRleHQvaHRtbCIpLG89bEMuJGdlbmVyYXRlTm9kZXNGcm9tRE9NKG4saSk7cmV0dXJuIE9tKG4sbyxlKX1jYXRjaHt9aWYodD10LmdldERhdGEoInRleHQvcGxhaW4iKXx8dC5nZXREYXRhKCJ0ZXh0L3VyaS1saXN0IiksdCE9bnVsbClpZihwZS4kaXNSYW5nZVNlbGVjdGlvbihlKSlmb3IodD10LnNwbGl0KC8oXHI/XG58XHQpLyksbj10Lmxlbmd0aCxpPTA7aTxuO2krKylvPXRbaV0sbz09PWAKYHx8bz09PWBccgpgP2UuaW5zZXJ0UGFyYWdyYXBoKCk6bz09PSIJIj9lLmluc2VydE5vZGVzKFtwZS4kY3JlYXRlVGFiTm9kZSgpXSk6ZS5pbnNlcnRUZXh0KG8pO2Vsc2UgZS5pbnNlcnRSYXdUZXh0KHQpfTtiaS4kaW5zZXJ0R2VuZXJhdGVkTm9kZXM9T207YmkuY29weVRvQ2xpcGJvYXJkPWFzeW5jIGZ1bmN0aW9uKHQsZSl7aWYod2whPT1udWxsKXJldHVybiExO2lmKGUhPT1udWxsKXJldHVybiBuZXcgUHJvbWlzZShsPT57dC51cGRhdGUoKCk9PntsKEV4KHQsZSkpfSl9KTt2YXIgbj10LmdldFJvb3RFbGVtZW50KCk7bGV0IHI9dC5fd2luZG93PT1udWxsP3dpbmRvdy5kb2N1bWVudDp0Ll93aW5kb3cuZG9jdW1lbnQsaT1zQz8odC5fd2luZG93fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpOm51bGw7aWYobj09PW51bGx8fGk9PT1udWxsKXJldHVybiExO2xldCBvPXIuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiBvLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBmaXhlZDsgdG9wOiAtMTAwMHB4OyIsby5hcHBlbmQoci5jcmVhdGVUZXh0Tm9kZSgiIyIpKSxuLmFwcGVuZChvKSxuPW5ldyBSYW5nZSxuLnNldFN0YXJ0KG8sMCksbi5zZXRFbmQobywxKSxpLnJlbW92ZUFsbFJhbmdlcygpLGkuYWRkUmFuZ2UobiksbmV3IFByb21pc2UobD0+e2xldCBzPXQucmVnaXN0ZXJDb21tYW5kKHBlLkNPUFlfQ09NTUFORCxhPT4odHMub2JqZWN0S2xhc3NFcXVhbHMoYSxDbGlwYm9hcmRFdmVudCkmJihzKCksd2whPT1udWxsJiYod2luZG93LmNsZWFyVGltZW91dCh3bCksd2w9bnVsbCksbChFeCh0LGEpKSksITApLHBlLkNPTU1BTkRfUFJJT1JJVFlfQ1JJVElDQUwpO3dsPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT57cygpLHdsPW51bGwsbCghMSl9LDUwKSxyLmV4ZWNDb21tYW5kKCJjb3B5Iiksby5yZW1vdmUoKX0pfTtjb25zdCBCUD1iaTt2YXIgVVA9QlAsQmQ9VVAsd2M9Y28senI9RnQsTz1fZTtmdW5jdGlvbiBDeCh0LGUpe3JldHVybiB0eXBlb2YgZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludDwidSI/KHQ9ZG9jdW1lbnQuY2FyZXRSYW5nZUZyb21Qb2ludCh0LGUpLHQ9PT1udWxsP251bGw6e25vZGU6dC5zdGFydENvbnRhaW5lcixvZmZzZXQ6dC5zdGFydE9mZnNldH0pOmRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQhPT0idW5kZWZpbmVkIj8odD1kb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHQsZSksdD09PW51bGw/bnVsbDp7bm9kZTp0Lm9mZnNldE5vZGUsb2Zmc2V0OnQub2Zmc2V0fSk6bnVsbH1sZXQgRHM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLFdQPURzJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50P2RvY3VtZW50LmRvY3VtZW50TW9kZTpudWxsLFZQPURzJiYiSW5wdXRFdmVudCJpbiB3aW5kb3cmJiFXUD8iZ2V0VGFyZ2V0UmFuZ2VzImluIG5ldyB3aW5kb3cuSW5wdXRFdmVudCgiaW5wdXQiKTohMSxIUD1EcyYmL1ZlcnNpb25cL1tcZC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEtQPURzJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSxaUD1EcyYmL14oPz0uKkNocm9tZSkuKi9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksR1A9RHMmJi9BcHBsZVdlYktpdFwvW1xkLl0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhWlAsUG09Ty5jcmVhdGVDb21tYW5kKCJEUkFHX0RST1BfUEFTVEVfRklMRSIpLFJ2PWNsYXNzIGhDIGV4dGVuZHMgTy5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJxdW90ZSJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgaEMoZS5fX2tleSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoZSl9Y3JlYXRlRE9NKGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJsb2NrcXVvdGUiKTtyZXR1cm4genIuYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChuLGUudGhlbWUucXVvdGUpLG59dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntibG9ja3F1b3RlOigpPT4oe2NvbnZlcnNpb246WVAscHJpb3JpdHk6MH0pfX1leHBvcnRET00oZSl7aWYoe2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUmJnpyLmlzSFRNTEVsZW1lbnQoZSkpe3RoaXMuaXNFbXB0eSgpJiZlLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTt2YXIgbj10aGlzLmdldEZvcm1hdFR5cGUoKTtlLnN0eWxlLnRleHRBbGlnbj1uLChuPXRoaXMuZ2V0RGlyZWN0aW9uKCkpJiYoZS5kaXI9bil9cmV0dXJue2VsZW1lbnQ6ZX19c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49T3YoKTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSx0eXBlOiJxdW90ZSJ9fWluc2VydE5ld0FmdGVyKGUsbil7ZT1PLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7bGV0IHI9dGhpcy5nZXREaXJlY3Rpb24oKTtyZXR1cm4gZS5zZXREaXJlY3Rpb24ociksdGhpcy5pbnNlcnRBZnRlcihlLG4pLGV9Y29sbGFwc2VBdFN0YXJ0KCl7bGV0IGU9Ty4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpO3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChuPT5lLmFwcGVuZChuKSksdGhpcy5yZXBsYWNlKGUpLCEwfX07ZnVuY3Rpb24gT3YoKXtyZXR1cm4gTy4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IFJ2KX1sZXQgUHY9Y2xhc3MgcEMgZXh0ZW5kcyBPLkVsZW1lbnROb2Rle3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImhlYWRpbmcifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IHBDKGUuX190YWcsZS5fX2tleSl9Y29uc3RydWN0b3IoZSxuKXtzdXBlcihuKSx0aGlzLl9fdGFnPWV9Z2V0VGFnKCl7cmV0dXJuIHRoaXMuX190YWd9Y3JlYXRlRE9NKGUpe2xldCBuPXRoaXMuX190YWcscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KG4pO3JldHVybiBlPWUudGhlbWUuaGVhZGluZyxlIT09dm9pZCAwJiZ6ci5hZGRDbGFzc05hbWVzVG9FbGVtZW50KHIsZVtuXSkscn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue2gxOigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLGgyOigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLGgzOigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLGg0OigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLGg1OigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLGg2OigpPT4oe2NvbnZlcnNpb246U2wscHJpb3JpdHk6MH0pLHA6ZT0+KGU9ZS5maXJzdENoaWxkLGUhPT1udWxsJiZreChlKT97Y29udmVyc2lvbjooKT0+KHtub2RlOm51bGx9KSxwcmlvcml0eTozfTpudWxsKSxzcGFuOmU9Pmt4KGUpP3tjb252ZXJzaW9uOigpPT4oe25vZGU6VmwoImgxIil9KSxwcmlvcml0eTozfTpudWxsfX1leHBvcnRET00oZSl7aWYoe2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUmJnpyLmlzSFRNTEVsZW1lbnQoZSkpe3RoaXMuaXNFbXB0eSgpJiZlLmFwcGVuZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTt2YXIgbj10aGlzLmdldEZvcm1hdFR5cGUoKTtlLnN0eWxlLnRleHRBbGlnbj1uLChuPXRoaXMuZ2V0RGlyZWN0aW9uKCkpJiYoZS5kaXI9bil9cmV0dXJue2VsZW1lbnQ6ZX19c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49VmwoZS50YWcpO3JldHVybiBuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXRJbmRlbnQoZS5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKGUuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHRhZzp0aGlzLmdldFRhZygpLHR5cGU6ImhlYWRpbmciLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIoZSxuPSEwKXtlPWU/ZS5hbmNob3Iub2Zmc2V0OjAsZT0wPGUmJmU8dGhpcy5nZXRUZXh0Q29udGVudFNpemUoKT9WbCh0aGlzLmdldFRhZygpKTpPLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7bGV0IHI9dGhpcy5nZXREaXJlY3Rpb24oKTtyZXR1cm4gZS5zZXREaXJlY3Rpb24ociksdGhpcy5pbnNlcnRBZnRlcihlLG4pLGV9Y29sbGFwc2VBdFN0YXJ0KCl7bGV0IGU9dGhpcy5pc0VtcHR5KCk/Ty4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpOlZsKHRoaXMuZ2V0VGFnKCkpO3JldHVybiB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChuPT5lLmFwcGVuZChuKSksdGhpcy5yZXBsYWNlKGUpLCEwfWV4dHJhY3RXaXRoQ2hpbGQoKXtyZXR1cm4hMH19O2Z1bmN0aW9uIGt4KHQpe3JldHVybiB0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic3BhbiI/dC5zdHlsZS5mb250U2l6ZT09PSIyNnB0IjohMX1mdW5jdGlvbiBTbCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1udWxsO3JldHVybihlPT09ImgxInx8ZT09PSJoMiJ8fGU9PT0iaDMifHxlPT09Img0Inx8ZT09PSJoNSJ8fGU9PT0iaDYiKSYmKG49VmwoZSksdC5zdHlsZSE9PW51bGwmJm4uc2V0Rm9ybWF0KHQuc3R5bGUudGV4dEFsaWduKSkse25vZGU6bn19ZnVuY3Rpb24gWVAodCl7bGV0IGU9T3YoKTtyZXR1cm4gdC5zdHlsZSE9PW51bGwmJmUuc2V0Rm9ybWF0KHQuc3R5bGUudGV4dEFsaWduKSx7bm9kZTplfX1mdW5jdGlvbiBWbCh0KXtyZXR1cm4gTy4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IFB2KHQpKX1mdW5jdGlvbiBYUCh0LGUpe3QucHJldmVudERlZmF1bHQoKSxlLnVwZGF0ZSgoKT0+e2xldCBuPU8uJGdldFNlbGVjdGlvbigpLHI9dCBpbnN0YW5jZW9mIElucHV0RXZlbnR8fHQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50P251bGw6dC5jbGlwYm9hcmREYXRhO3IhPW51bGwmJihPLiRpc1JhbmdlU2VsZWN0aW9uKG4pfHxPLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKSkmJkJkLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JSaWNoVGV4dChyLG4sZSl9LHt0YWc6InBhc3RlIn0pfWFzeW5jIGZ1bmN0aW9uIEpQKHQsZSl7YXdhaXQgQmQuY29weVRvQ2xpcGJvYXJkKGUsenIub2JqZWN0S2xhc3NFcXVhbHModCxDbGlwYm9hcmRFdmVudCk/dDpudWxsKSxlLnVwZGF0ZSgoKT0+e2xldCBuPU8uJGdldFNlbGVjdGlvbigpO08uJGlzUmFuZ2VTZWxlY3Rpb24obik/bi5yZW1vdmVUZXh0KCk6Ty4kaXNOb2RlU2VsZWN0aW9uKG4pJiZuLmdldE5vZGVzKCkuZm9yRWFjaChyPT5yLnJlbW92ZSgpKX0pfWZ1bmN0aW9uIHZhKHQpe2xldCBlPW51bGw7aWYodCBpbnN0YW5jZW9mIERyYWdFdmVudD9lPXQuZGF0YVRyYW5zZmVyOnQgaW5zdGFuY2VvZiBDbGlwYm9hcmRFdmVudCYmKGU9dC5jbGlwYm9hcmREYXRhKSxlPT09bnVsbClyZXR1cm5bITEsW10sITFdO3ZhciBuPWUudHlwZXM7cmV0dXJuIHQ9bi5pbmNsdWRlcygiRmlsZXMiKSxuPW4uaW5jbHVkZXMoInRleHQvaHRtbCIpfHxuLmluY2x1ZGVzKCJ0ZXh0L3BsYWluIiksW3QsQXJyYXkuZnJvbShlLmZpbGVzKSxuXX1mdW5jdGlvbiBieCh0KXt2YXIgZT1PLiRnZXRTZWxlY3Rpb24oKTtpZighTy4kaXNSYW5nZVNlbGVjdGlvbihlKSlyZXR1cm4hMTtsZXQgbj1uZXcgU2V0O2U9ZS5nZXROb2RlcygpO2ZvcihsZXQgbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgcj1lW29dLGk9ci5nZXRLZXkoKTtuLmhhcyhpKXx8KHI9enIuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3cociksaT1yLmdldEtleSgpLHIuY2FuSW5kZW50KCkmJiFuLmhhcyhpKSYmKG4uYWRkKGkpLHQocikpKX1yZXR1cm4gMDxuLnNpemV9ZnVuY3Rpb24gU2ModCl7cmV0dXJuIHQ9Ty4kZ2V0TmVhcmVzdE5vZGVGcm9tRE9NTm9kZSh0KSxPLiRpc0RlY29yYXRvck5vZGUodCl9cXIuJGNyZWF0ZUhlYWRpbmdOb2RlPVZsO3FyLiRjcmVhdGVRdW90ZU5vZGU9T3Y7cXIuJGlzSGVhZGluZ05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBQdn07cXIuJGlzUXVvdGVOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUnZ9O3FyLkRSQUdfRFJPUF9QQVNURT1QbTtxci5IZWFkaW5nTm9kZT1Qdjtxci5RdW90ZU5vZGU9UnY7cXIuZXZlbnRGaWxlcz12YTtxci5yZWdpc3RlclJpY2hUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB6ci5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJDb21tYW5kKE8uQ0xJQ0tfQ09NTUFORCwoKT0+e2NvbnN0IGU9Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzTm9kZVNlbGVjdGlvbihlKT8oZS5jbGVhcigpLCEwKTohMX0sMCksdC5yZWdpc3RlckNvbW1hbmQoTy5ERUxFVEVfQ0hBUkFDVEVSX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uZGVsZXRlQ2hhcmFjdGVyKGUpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5ERUxFVEVfV09SRF9DT01NQU5ELGU9Pntjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhuLmRlbGV0ZVdvcmQoZSksITApOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkRFTEVURV9MSU5FX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uZGVsZXRlTGluZShlKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uQ09OVFJPTExFRF9URVhUX0lOU0VSVElPTl9DT01NQU5ELGU9Pntjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO2lmKHR5cGVvZiBlPT0ic3RyaW5nIilPLiRpc1JhbmdlU2VsZWN0aW9uKG4pP24uaW5zZXJ0VGV4dChlKTpPLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKTtlbHNle2lmKCFPLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYhTy5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obikpcmV0dXJuITE7Y29uc3Qgcj1lLmRhdGFUcmFuc2ZlcjtyIT1udWxsP0JkLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JSaWNoVGV4dChyLG4sdCk6Ty4kaXNSYW5nZVNlbGVjdGlvbihuKSYmKGU9ZS5kYXRhKSYmbi5pbnNlcnRUZXh0KGUpfXJldHVybiEwfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLlJFTU9WRV9URVhUX0NPTU1BTkQsKCk9Pntjb25zdCBlPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKGUpPyhlLnJlbW92ZVRleHQoKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uRk9STUFUX1RFWFRfQ09NTUFORCxlPT57Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5mb3JtYXRUZXh0KGUpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5GT1JNQVRfRUxFTUVOVF9DT01NQU5ELGU9Pnt2YXIgbj1PLiRnZXRTZWxlY3Rpb24oKTtpZighTy4kaXNSYW5nZVNlbGVjdGlvbihuKSYmIU8uJGlzTm9kZVNlbGVjdGlvbihuKSlyZXR1cm4hMTtuPW4uZ2V0Tm9kZXMoKTtmb3IoY29uc3QgciBvZiBuKW49enIuJGZpbmRNYXRjaGluZ1BhcmVudChyLGk9Pk8uJGlzRWxlbWVudE5vZGUoaSkmJiFpLmlzSW5saW5lKCkpLG4hPT1udWxsJiZuLnNldEZvcm1hdChlKTtyZXR1cm4hMH0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5JTlNFUlRfTElORV9CUkVBS19DT01NQU5ELGU9Pntjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhuLmluc2VydExpbmVCcmVhayhlKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uSU5TRVJUX1BBUkFHUkFQSF9DT01NQU5ELCgpPT57Y29uc3QgZT1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihlKT8oZS5pbnNlcnRQYXJhZ3JhcGgoKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uSU5TRVJUX1RBQl9DT01NQU5ELCgpPT4oTy4kaW5zZXJ0Tm9kZXMoW08uJGNyZWF0ZVRhYk5vZGUoKV0pLCEwKSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLklOREVOVF9DT05URU5UX0NPTU1BTkQsKCk9PmJ4KGU9Pntjb25zdCBuPWUuZ2V0SW5kZW50KCk7ZS5zZXRJbmRlbnQobisxKX0pLE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uT1VUREVOVF9DT05URU5UX0NPTU1BTkQsKCk9PmJ4KGU9Pntjb25zdCBuPWUuZ2V0SW5kZW50KCk7MDxuJiZlLnNldEluZGVudChuLTEpfSksTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfQVJST1dfVVBfQ09NTUFORCxlPT57dmFyIG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYoTy4kaXNOb2RlU2VsZWN0aW9uKG4pJiYhU2MoZS50YXJnZXQpKXtpZihlPW4uZ2V0Tm9kZXMoKSwwPGUubGVuZ3RoKXJldHVybiBlWzBdLnNlbGVjdFByZXZpb3VzKCksITB9ZWxzZSBpZihPLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYobj1PLiRnZXRBZGphY2VudE5vZGUobi5mb2N1cywhMCksIWUuc2hpZnRLZXkmJk8uJGlzRGVjb3JhdG9yTm9kZShuKSYmIW4uaXNJc29sYXRlZCgpJiYhbi5pc0lubGluZSgpKSlyZXR1cm4gbi5zZWxlY3RQcmV2aW91cygpLGUucHJldmVudERlZmF1bHQoKSwhMDtyZXR1cm4hMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfQVJST1dfRE9XTl9DT01NQU5ELGU9Pnt2YXIgbj1PLiRnZXRTZWxlY3Rpb24oKTtpZihPLiRpc05vZGVTZWxlY3Rpb24obikpe2lmKGU9bi5nZXROb2RlcygpLDA8ZS5sZW5ndGgpcmV0dXJuIGVbMF0uc2VsZWN0TmV4dCgwLDApLCEwfWVsc2UgaWYoTy4kaXNSYW5nZVNlbGVjdGlvbihuKSl7bGV0IHI9bi5mb2N1cztpZihyLmtleT09PSJyb290IiYmci5vZmZzZXQ9PT1PLiRnZXRSb290KCkuZ2V0Q2hpbGRyZW5TaXplKCkpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSwhMDtpZihuPU8uJGdldEFkamFjZW50Tm9kZShuLmZvY3VzLCExKSwhZS5zaGlmdEtleSYmTy4kaXNEZWNvcmF0b3JOb2RlKG4pJiYhbi5pc0lzb2xhdGVkKCkmJiFuLmlzSW5saW5lKCkpcmV0dXJuIG4uc2VsZWN0TmV4dCgpLGUucHJldmVudERlZmF1bHQoKSwhMH1yZXR1cm4hMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfQVJST1dfTEVGVF9DT01NQU5ELGU9Pntjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO2lmKE8uJGlzTm9kZVNlbGVjdGlvbihuKSl7dmFyIHI9bi5nZXROb2RlcygpO2lmKDA8ci5sZW5ndGgpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxyWzBdLnNlbGVjdFByZXZpb3VzKCksITB9cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obikmJndjLiRzaG91bGRPdmVycmlkZURlZmF1bHRDaGFyYWN0ZXJTZWxlY3Rpb24obiwhMCk/KHI9ZS5zaGlmdEtleSxlLnByZXZlbnREZWZhdWx0KCksd2MuJG1vdmVDaGFyYWN0ZXIobixyLCEwKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uS0VZX0FSUk9XX1JJR0hUX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYoTy4kaXNOb2RlU2VsZWN0aW9uKG4pJiYhU2MoZS50YXJnZXQpKXt2YXIgcj1uLmdldE5vZGVzKCk7aWYoMDxyLmxlbmd0aClyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHJbMF0uc2VsZWN0TmV4dCgwLDApLCEwfXJldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhyPWUuc2hpZnRLZXksd2MuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbihuLCExKT8oZS5wcmV2ZW50RGVmYXVsdCgpLHdjLiRtb3ZlQ2hhcmFjdGVyKG4sciwhMSksITApOiExKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfQkFDS1NQQUNFX0NPTU1BTkQsZT0+e2lmKFNjKGUudGFyZ2V0KSlyZXR1cm4hMTtjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO2lmKCFPLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXJldHVybiExO2UucHJldmVudERlZmF1bHQoKSx7YW5jaG9yOmV9PW47Y29uc3Qgcj1lLmdldE5vZGUoKTtyZXR1cm4gbi5pc0NvbGxhcHNlZCgpJiZlLm9mZnNldD09PTAmJiFPLiRpc1Jvb3ROb2RlKHIpJiYwPHpyLiRnZXROZWFyZXN0QmxvY2tFbGVtZW50QW5jZXN0b3JPclRocm93KHIpLmdldEluZGVudCgpP3QuZGlzcGF0Y2hDb21tYW5kKE8uT1VUREVOVF9DT05URU5UX0NPTU1BTkQsdm9pZCAwKTp0LmRpc3BhdGNoQ29tbWFuZChPLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORCwhMCl9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uS0VZX0RFTEVURV9DT01NQU5ELGU9PntpZihTYyhlLnRhcmdldCkpcmV0dXJuITE7Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihuKT8oZS5wcmV2ZW50RGVmYXVsdCgpLHQuZGlzcGF0Y2hDb21tYW5kKE8uREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5ELCExKSk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uS0VZX0VOVEVSX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYoIU8uJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7aWYoZSE9PW51bGwpe2lmKChLUHx8SFB8fEdQKSYmVlApcmV0dXJuITE7aWYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc2hpZnRLZXkpcmV0dXJuIHQuZGlzcGF0Y2hDb21tYW5kKE8uSU5TRVJUX0xJTkVfQlJFQUtfQ09NTUFORCwhMSl9cmV0dXJuIHQuZGlzcGF0Y2hDb21tYW5kKE8uSU5TRVJUX1BBUkFHUkFQSF9DT01NQU5ELHZvaWQgMCl9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uS0VZX0VTQ0FQRV9DT01NQU5ELCgpPT57Y29uc3QgZT1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihlKT8odC5ibHVyKCksITApOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkRST1BfQ09NTUFORCxlPT57Y29uc3RbLG5dPXZhKGUpO2lmKDA8bi5sZW5ndGgpe3ZhciByPUN4KGUuY2xpZW50WCxlLmNsaWVudFkpO2lmKHIhPT1udWxsKXtjb25zdHtvZmZzZXQ6byxub2RlOmx9PXI7dmFyIGk9Ty4kZ2V0TmVhcmVzdE5vZGVGcm9tRE9NTm9kZShsKTtpZihpIT09bnVsbCl7aWYocj1PLiRjcmVhdGVSYW5nZVNlbGVjdGlvbigpLE8uJGlzVGV4dE5vZGUoaSkpci5hbmNob3Iuc2V0KGkuZ2V0S2V5KCksbywidGV4dCIpLHIuZm9jdXMuc2V0KGkuZ2V0S2V5KCksbywidGV4dCIpO2Vsc2V7Y29uc3Qgcz1pLmdldFBhcmVudE9yVGhyb3coKS5nZXRLZXkoKTtpPWkuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLHIuYW5jaG9yLnNldChzLGksImVsZW1lbnQiKSxyLmZvY3VzLnNldChzLGksImVsZW1lbnQiKX1yPU8uJG5vcm1hbGl6ZVNlbGVjdGlvbl9fRVhQRVJJTUVOVEFMKHIpLE8uJHNldFNlbGVjdGlvbihyKX10LmRpc3BhdGNoQ29tbWFuZChQbSxuKX1yZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiBlPU8uJGdldFNlbGVjdGlvbigpLCEhTy4kaXNSYW5nZVNlbGVjdGlvbihlKX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5EUkFHU1RBUlRfQ09NTUFORCxlPT57W2VdPXZhKGUpO2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIShlJiYhTy4kaXNSYW5nZVNlbGVjdGlvbihuKSl9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uRFJBR09WRVJfQ09NTUFORCxlPT57dmFyW25dPXZhKGUpO2NvbnN0IHI9Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIG4mJiFPLiRpc1JhbmdlU2VsZWN0aW9uKHIpPyExOihuPUN4KGUuY2xpZW50WCxlLmNsaWVudFkpLG4hPT1udWxsJiYobj1PLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKG4ubm9kZSksTy4kaXNEZWNvcmF0b3JOb2RlKG4pJiZlLnByZXZlbnREZWZhdWx0KCkpLCEwKX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5TRUxFQ1RfQUxMX0NPTU1BTkQsKCk9PihPLiRzZWxlY3RBbGwoKSwhMCksTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5DT1BZX0NPTU1BTkQsZT0+KEJkLmNvcHlUb0NsaXBib2FyZCh0LHpyLm9iamVjdEtsYXNzRXF1YWxzKGUsQ2xpcGJvYXJkRXZlbnQpP2U6bnVsbCksITApLE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uQ1VUX0NPTU1BTkQsZT0+KEpQKGUsdCksITApLE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uUEFTVEVfQ09NTUFORCxlPT57Y29uc3RbLG4scl09dmEoZSk7aWYoMDxuLmxlbmd0aCYmIXIpcmV0dXJuIHQuZGlzcGF0Y2hDb21tYW5kKFBtLG4pLCEwO2lmKE8uaXNTZWxlY3Rpb25DYXB0dXJlZEluRGVjb3JhdG9ySW5wdXQoZS50YXJnZXQpKXJldHVybiExO2NvbnN0IGk9Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24oaSl8fE8uREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKGkpPyhYUChlLHQpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUikpfTtjb25zdCBRUD1xcjt2YXIgSWE9UVAsbUM9TnIscVA9T1AsdHI9cCxlQT1BUCxnQz1GdCwkeD1Zcix0QT1MUCxuQT1JYSxBdj10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSI/dHIudXNlTGF5b3V0RWZmZWN0OnRyLnVzZUVmZmVjdDtmdW5jdGlvbiBUeCh0KXtyZXR1cm4gdC5nZXRFZGl0b3JTdGF0ZSgpLnJlYWQoZUEuJGNhblNob3dQbGFjZWhvbGRlckN1cnJ5KHQuaXNDb21wb3NpbmcoKSkpfWZ1bmN0aW9uIHJBKHQpe2xldFtlLG5dPXRyLnVzZVN0YXRlKCgpPT5UeCh0KSk7cmV0dXJuIEF2KCgpPT57ZnVuY3Rpb24gcigpe2xldCBpPVR4KHQpO24oaSl9cmV0dXJuIHIoKSxnQy5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcigoKT0+e3IoKX0pLHQucmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKCgpPT57cigpfSkpfSxbdF0pLGV9ZnVuY3Rpb24gaUEodCxlKXtsZXRbbixyXT10ci51c2VTdGF0ZSgoKT0+dC5nZXREZWNvcmF0b3JzKCkpO3JldHVybiBBdigoKT0+dC5yZWdpc3RlckRlY29yYXRvckxpc3RlbmVyKGk9PnskeC5mbHVzaFN5bmMoKCk9PntyKGkpfSl9KSxbdF0pLHRyLnVzZUVmZmVjdCgoKT0+e3IodC5nZXREZWNvcmF0b3JzKCkpfSxbdF0pLHRyLnVzZU1lbW8oKCk9PntsZXQgaT1bXSxvPU9iamVjdC5rZXlzKG4pO2ZvcihsZXQgbD0wO2w8by5sZW5ndGg7bCsrKXtsZXQgcz1vW2xdLGE9dHIuY3JlYXRlRWxlbWVudChlLHtvbkVycm9yOmM9PnQuX29uRXJyb3IoYyl9LHRyLmNyZWF0ZUVsZW1lbnQodHIuU3VzcGVuc2Use2ZhbGxiYWNrOm51bGx9LG5bc10pKSx1PXQuZ2V0RWxlbWVudEJ5S2V5KHMpO3UhPT1udWxsJiZpLnB1c2goJHguY3JlYXRlUG9ydGFsKGEsdSxzKSl9cmV0dXJuIGl9LFtlLG4sdF0pfWZ1bmN0aW9uIG9BKHQpe0F2KCgpPT5nQy5tZXJnZVJlZ2lzdGVyKG5BLnJlZ2lzdGVyUmljaFRleHQodCksdEEucmVnaXN0ZXJEcmFnb25TdXBwb3J0KHQpKSxbdF0pfWZ1bmN0aW9uIGxBKHtjb250ZW50OnR9KXt2YXJbZV09bUMudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO2U9ckEoZSk7bGV0IG49cVAoKTtyZXR1cm4gZT90eXBlb2YgdD09ImZ1bmN0aW9uIj90KG4pOnQ6bnVsbH1xRS5SaWNoVGV4dFBsdWdpbj1mdW5jdGlvbih7Y29udGVudEVkaXRhYmxlOnQscGxhY2Vob2xkZXI6ZSxFcnJvckJvdW5kYXJ5Om59KXtsZXRbcl09bUMudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBuPWlBKHIsbiksb0EociksdHIuY3JlYXRlRWxlbWVudCh0ci5GcmFnbWVudCxudWxsLHQsdHIuY3JlYXRlRWxlbWVudChsQSx7Y29udGVudDplfSksbil9O2NvbnN0IHNBPXFFO3ZhciBhQT1zQSx2Qz17fSxyaT1VaSx1QT1Ocix5Qz1wLGNBPUZ0LGlhPV9lO2Z1bmN0aW9uIGRBKHQpe3lDLnVzZUVmZmVjdCgoKT0+Y0EubWVyZ2VSZWdpc3Rlcih0LnJlZ2lzdGVyQ29tbWFuZChyaS5JTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQsKCk9PihyaS5pbnNlcnRMaXN0KHQsIm51bWJlciIpLCEwKSxpYS5DT01NQU5EX1BSSU9SSVRZX0xPVyksdC5yZWdpc3RlckNvbW1hbmQocmkuSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQsKCk9PihyaS5pbnNlcnRMaXN0KHQsImJ1bGxldCIpLCEwKSxpYS5DT01NQU5EX1BSSU9SSVRZX0xPVyksdC5yZWdpc3RlckNvbW1hbmQocmkuUkVNT1ZFX0xJU1RfQ09NTUFORCwoKT0+KHJpLnJlbW92ZUxpc3QodCksITApLGlhLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSx0LnJlZ2lzdGVyQ29tbWFuZChpYS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsKCk9PiEhcmkuJGhhbmRsZUxpc3RJbnNlcnRQYXJhZ3JhcGgoKSxpYS5DT01NQU5EX1BSSU9SSVRZX0xPVykpLFt0XSl9dkMuTGlzdFBsdWdpbj1mdW5jdGlvbigpe2xldFt0XT11QS51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIHlDLnVzZUVmZmVjdCgoKT0+e2lmKCF0Lmhhc05vZGVzKFtyaS5MaXN0Tm9kZSxyaS5MaXN0SXRlbU5vZGVdKSl0aHJvdyBFcnJvcigiTGlzdFBsdWdpbjogTGlzdE5vZGUgYW5kL29yIExpc3RJdGVtTm9kZSBub3QgcmVnaXN0ZXJlZCBvbiBlZGl0b3IiKX0sW3RdKSxkQSh0KSxudWxsfTtjb25zdCBmQT12Qzt2YXIgaEE9ZkEseEM9e30sJGk9e30sX0M9RnQsV3I9X2U7bGV0IHBBPW5ldyBTZXQoWyJodHRwOiIsImh0dHBzOiIsIm1haWx0bzoiLCJzbXM6IiwidGVsOiJdKTtjbGFzcyBJcyBleHRlbmRzIFdyLkVsZW1lbnROb2Rle3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImxpbmsifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IElzKGUuX191cmwse3JlbDplLl9fcmVsLHRhcmdldDplLl9fdGFyZ2V0LHRpdGxlOmUuX190aXRsZX0sZS5fX2tleSl9Y29uc3RydWN0b3IoZSxuPXt9LHIpe3N1cGVyKHIpO2xldHt0YXJnZXQ6aT1udWxsLHJlbDpvPW51bGwsdGl0bGU6bD1udWxsfT1uO3RoaXMuX191cmw9ZSx0aGlzLl9fdGFyZ2V0PWksdGhpcy5fX3JlbD1vLHRoaXMuX190aXRsZT1sfWNyZWF0ZURPTShlKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIG4uaHJlZj10aGlzLnNhbml0aXplVXJsKHRoaXMuX191cmwpLHRoaXMuX190YXJnZXQhPT1udWxsJiYobi50YXJnZXQ9dGhpcy5fX3RhcmdldCksdGhpcy5fX3JlbCE9PW51bGwmJihuLnJlbD10aGlzLl9fcmVsKSx0aGlzLl9fdGl0bGUhPT1udWxsJiYobi50aXRsZT10aGlzLl9fdGl0bGUpLF9DLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQobixlLnRoZW1lLmxpbmspLG59dXBkYXRlRE9NKGUsbil7bGV0IHI9dGhpcy5fX3VybCxpPXRoaXMuX190YXJnZXQsbz10aGlzLl9fcmVsLGw9dGhpcy5fX3RpdGxlO3JldHVybiByIT09ZS5fX3VybCYmKG4uaHJlZj1yKSxpIT09ZS5fX3RhcmdldCYmKGk/bi50YXJnZXQ9aTpuLnJlbW92ZUF0dHJpYnV0ZSgidGFyZ2V0IikpLG8hPT1lLl9fcmVsJiYobz9uLnJlbD1vOm4ucmVtb3ZlQXR0cmlidXRlKCJyZWwiKSksbCE9PWUuX190aXRsZSYmKGw/bi50aXRsZT1sOm4ucmVtb3ZlQXR0cmlidXRlKCJ0aXRsZSIpKSwhMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue2E6KCk9Pih7Y29udmVyc2lvbjptQSxwcmlvcml0eToxfSl9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPWh1KGUudXJsLHtyZWw6ZS5yZWwsdGFyZ2V0OmUudGFyZ2V0LHRpdGxlOmUudGl0bGV9KTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1zYW5pdGl6ZVVybChlKXt0cnl7bGV0IG49bmV3IFVSTChlKTtpZighcEEuaGFzKG4ucHJvdG9jb2wpKXJldHVybiJhYm91dDpibGFuayJ9Y2F0Y2h7fXJldHVybiBlfWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHJlbDp0aGlzLmdldFJlbCgpLHRhcmdldDp0aGlzLmdldFRhcmdldCgpLHRpdGxlOnRoaXMuZ2V0VGl0bGUoKSx0eXBlOiJsaW5rIix1cmw6dGhpcy5nZXRVUkwoKSx2ZXJzaW9uOjF9fWdldFVSTCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdXJsfXNldFVSTChlKXt0aGlzLmdldFdyaXRhYmxlKCkuX191cmw9ZX1nZXRUYXJnZXQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3RhcmdldH1zZXRUYXJnZXQoZSl7dGhpcy5nZXRXcml0YWJsZSgpLl9fdGFyZ2V0PWV9Z2V0UmVsKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19yZWx9c2V0UmVsKGUpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3JlbD1lfWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX190aXRsZX1zZXRUaXRsZShlKXt0aGlzLmdldFdyaXRhYmxlKCkuX190aXRsZT1lfWluc2VydE5ld0FmdGVyKGUsbj0hMCl7cmV0dXJuIGU9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuaW5zZXJ0TmV3QWZ0ZXIoZSxuKSxXci4kaXNFbGVtZW50Tm9kZShlKT8obj1odSh0aGlzLl9fdXJsLHtyZWw6dGhpcy5fX3JlbCx0YXJnZXQ6dGhpcy5fX3RhcmdldCx0aXRsZTp0aGlzLl9fdGl0bGV9KSxlLmFwcGVuZChuKSxuKTpudWxsfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMX1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMX1jYW5CZUVtcHR5KCl7cmV0dXJuITF9aXNJbmxpbmUoKXtyZXR1cm4hMH1leHRyYWN0V2l0aENoaWxkKGUsbil7aWYoIVdyLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXJldHVybiExO2U9bi5hbmNob3IuZ2V0Tm9kZSgpO2xldCByPW4uZm9jdXMuZ2V0Tm9kZSgpO3JldHVybiB0aGlzLmlzUGFyZW50T2YoZSkmJnRoaXMuaXNQYXJlbnRPZihyKSYmMDxuLmdldFRleHRDb250ZW50KCkubGVuZ3RofX1mdW5jdGlvbiBtQSh0KXtsZXQgZT1udWxsO2lmKF9DLmlzSFRNTEFuY2hvckVsZW1lbnQodCkpe2xldCBuPXQudGV4dENvbnRlbnQ7biE9PW51bGwmJm4hPT0iIiYmKGU9aHUodC5nZXRBdHRyaWJ1dGUoImhyZWYiKXx8IiIse3JlbDp0LmdldEF0dHJpYnV0ZSgicmVsIiksdGFyZ2V0OnQuZ2V0QXR0cmlidXRlKCJ0YXJnZXQiKSx0aXRsZTp0LmdldEF0dHJpYnV0ZSgidGl0bGUiKX0pKX1yZXR1cm57bm9kZTplfX1mdW5jdGlvbiBodSh0LGUpe3JldHVybiBXci4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IElzKHQsZSkpfWZ1bmN0aW9uIFJvKHQpe3JldHVybiB0IGluc3RhbmNlb2YgSXN9Y2xhc3MgV3UgZXh0ZW5kcyBJc3tzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJhdXRvbGluayJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgV3UoZS5fX3VybCx7cmVsOmUuX19yZWwsdGFyZ2V0OmUuX190YXJnZXQsdGl0bGU6ZS5fX3RpdGxlfSxlLl9fa2V5KX1zdGF0aWMgaW1wb3J0SlNPTihlKXtsZXQgbj1BbShlLnVybCx7cmVsOmUucmVsLHRhcmdldDplLnRhcmdldCx0aXRsZTplLnRpdGxlfSk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldEluZGVudChlLmluZGVudCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59c3RhdGljIGltcG9ydERPTSgpe3JldHVybiBudWxsfWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHR5cGU6ImF1dG9saW5rIix2ZXJzaW9uOjF9fWluc2VydE5ld0FmdGVyKGUsbj0hMCl7cmV0dXJuIGU9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuaW5zZXJ0TmV3QWZ0ZXIoZSxuKSxXci4kaXNFbGVtZW50Tm9kZShlKT8obj1BbSh0aGlzLl9fdXJsLHtyZWw6dGhpcy5fcmVsLHRhcmdldDp0aGlzLl9fdGFyZ2V0LHRpdGxlOnRoaXMuX190aXRsZX0pLGUuYXBwZW5kKG4pLG4pOm51bGx9fWZ1bmN0aW9uIEFtKHQsZSl7cmV0dXJuIFdyLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgV3UodCxlKSl9bGV0IGdBPVdyLmNyZWF0ZUNvbW1hbmQoIlRPR0dMRV9MSU5LX0NPTU1BTkQiKTtmdW5jdGlvbiB2QSh0LGUpe2Zvcig7dCE9PW51bGwmJih0PXQuZ2V0UGFyZW50KCkpIT09bnVsbCYmIWUodCk7KTtyZXR1cm4gdH0kaS4kY3JlYXRlQXV0b0xpbmtOb2RlPUFtOyRpLiRjcmVhdGVMaW5rTm9kZT1odTskaS4kaXNBdXRvTGlua05vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBXdX07JGkuJGlzTGlua05vZGU9Um87JGkuQXV0b0xpbmtOb2RlPVd1OyRpLkxpbmtOb2RlPUlzOyRpLlRPR0dMRV9MSU5LX0NPTU1BTkQ9Z0E7JGkudG9nZ2xlTGluaz1mdW5jdGlvbih0LGU9e30pe2xldHt0YXJnZXQ6bix0aXRsZTpyfT1lLGk9ZS5yZWw9PT12b2lkIDA/Im5vcmVmZXJyZXIiOmUucmVsO2lmKGU9V3IuJGdldFNlbGVjdGlvbigpLFdyLiRpc1JhbmdlU2VsZWN0aW9uKGUpKWlmKGU9ZS5leHRyYWN0KCksdD09PW51bGwpZS5mb3JFYWNoKGw9PntpZihsPWwuZ2V0UGFyZW50KCksUm8obCkpe2xldCBzPWwuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IGE9MDthPHMubGVuZ3RoO2ErKylsLmluc2VydEJlZm9yZShzW2FdKTtsLnJlbW92ZSgpfX0pO2Vsc2V7aWYoZS5sZW5ndGg9PT0xKXt2YXIgbz1lWzBdO2lmKG89Um8obyk/bzp2QShvLFJvKSxvIT09bnVsbCl7by5zZXRVUkwodCksbiE9PXZvaWQgMCYmby5zZXRUYXJnZXQobiksaSE9PW51bGwmJm8uc2V0UmVsKGkpLHIhPT12b2lkIDAmJm8uc2V0VGl0bGUocik7cmV0dXJufX1sZXQgbD1udWxsLHM9bnVsbDtlLmZvckVhY2goYT0+e3ZhciB1PWEuZ2V0UGFyZW50KCk7aWYodSE9PXMmJnUhPT1udWxsJiYoIVdyLiRpc0VsZW1lbnROb2RlKGEpfHxhLmlzSW5saW5lKCkpKWlmKFJvKHUpKXM9dSx1LnNldFVSTCh0KSxuIT09dm9pZCAwJiZ1LnNldFRhcmdldChuKSxpIT09bnVsbCYmcy5zZXRSZWwoaSksciE9PXZvaWQgMCYmcy5zZXRUaXRsZShyKTtlbHNlIGlmKHUuaXMobCl8fChsPXUscz1odSh0LHtyZWw6aSx0YXJnZXQ6bn0pLFJvKHUpP2EuZ2V0UHJldmlvdXNTaWJsaW5nKCk9PT1udWxsP3UuaW5zZXJ0QmVmb3JlKHMpOnUuaW5zZXJ0QWZ0ZXIocyk6YS5pbnNlcnRCZWZvcmUocykpLFJvKGEpKXtpZighYS5pcyhzKSl7aWYocyE9PW51bGwpe3U9YS5nZXRDaGlsZHJlbigpO2ZvcihsZXQgYz0wO2M8dS5sZW5ndGg7YysrKXMuYXBwZW5kKHVbY10pfWEucmVtb3ZlKCl9fWVsc2UgcyE9PW51bGwmJnMuYXBwZW5kKGEpfSl9fTtjb25zdCB5QT0kaTt2YXIgZWw9eUEsRWw9ZWwseEE9TnIsX0E9RnQsQ2w9X2Usd0E9cDt4Qy5MaW5rUGx1Z2luPWZ1bmN0aW9uKHt2YWxpZGF0ZVVybDp0fSl7bGV0W2VdPXhBLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gd0EudXNlRWZmZWN0KCgpPT57aWYoIWUuaGFzTm9kZXMoW0VsLkxpbmtOb2RlXSkpdGhyb3cgRXJyb3IoIkxpbmtQbHVnaW46IExpbmtOb2RlIG5vdCByZWdpc3RlcmVkIG9uIGVkaXRvciIpO3JldHVybiBfQS5tZXJnZVJlZ2lzdGVyKGUucmVnaXN0ZXJDb21tYW5kKEVsLlRPR0dMRV9MSU5LX0NPTU1BTkQsbj0+e2lmKG49PT1udWxsKXJldHVybiBFbC50b2dnbGVMaW5rKG4pLCEwO2lmKHR5cGVvZiBuPT0ic3RyaW5nIilyZXR1cm4gdD09PXZvaWQgMHx8dChuKT8oRWwudG9nZ2xlTGluayhuKSwhMCk6ITE7bGV0e3VybDpyLHRhcmdldDppLHJlbDpvLHRpdGxlOmx9PW47cmV0dXJuIEVsLnRvZ2dsZUxpbmsocix7cmVsOm8sdGFyZ2V0OmksdGl0bGU6bH0pLCEwfSxDbC5DT01NQU5EX1BSSU9SSVRZX0xPVyksdCE9PXZvaWQgMD9lLnJlZ2lzdGVyQ29tbWFuZChDbC5QQVNURV9DT01NQU5ELG49PntsZXQgcj1DbC4kZ2V0U2VsZWN0aW9uKCk7aWYoIUNsLiRpc1JhbmdlU2VsZWN0aW9uKHIpfHxyLmlzQ29sbGFwc2VkKCl8fCEobiBpbnN0YW5jZW9mIENsaXBib2FyZEV2ZW50KXx8bi5jbGlwYm9hcmREYXRhPT1udWxsKXJldHVybiExO2xldCBpPW4uY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0Iik7cmV0dXJuIHQoaSk/ci5nZXROb2RlcygpLnNvbWUobz0+Q2wuJGlzRWxlbWVudE5vZGUobykpPyExOihlLmRpc3BhdGNoQ29tbWFuZChFbC5UT0dHTEVfTElOS19DT01NQU5ELGkpLG4ucHJldmVudERlZmF1bHQoKSwhMCk6ITF9LENsLkNPTU1BTkRfUFJJT1JJVFlfTE9XKTooKT0+e30pfSxbZSx0XSksbnVsbH07Y29uc3QgU0E9eEM7dmFyIEVBPVNBO2Z1bmN0aW9uIENBKHthcmlhQWN0aXZlRGVzY2VuZGFudDp0LGFyaWFBdXRvQ29tcGxldGU6ZSxhcmlhQ29udHJvbHM6bixhcmlhRGVzY3JpYmVkQnk6cixhcmlhRXhwYW5kZWQ6aSxhcmlhTGFiZWw6byxhcmlhTGFiZWxsZWRCeTpsLGFyaWFNdWx0aWxpbmU6cyxhcmlhT3duczphLGFyaWFSZXF1aXJlZDp1LGF1dG9DYXBpdGFsaXplOmMsY2xhc3NOYW1lOmQsaWQ6Zixyb2xlOmg9InRleHRib3giLHNwZWxsQ2hlY2s6Zz0hMCxzdHlsZTptLHRhYkluZGV4OncsImRhdGEtdGVzdGlkIjp2LC4uLnl9KXtjb25zdFtfXT1Oci51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCksW1MsRV09cC51c2VTdGF0ZSghMSksJD1wLnVzZUNhbGxiYWNrKEM9Pnt2YXIgQTtfLnNldFJvb3RFbGVtZW50KEMpO2NvbnN0IE49KEE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZhbC11aSIpKT09bnVsbD92b2lkIDA6QS5zaGFkb3dSb290O2lmKE4mJiJnZXRTZWxlY3Rpb24iaW4gTil7Xy5fd2luZG93PU47cmV0dXJufX0sW19dKTtyZXR1cm4gcC51c2VMYXlvdXRFZmZlY3QoKCk9PihFKF8uaXNFZGl0YWJsZSgpKSxfLnJlZ2lzdGVyRWRpdGFibGVMaXN0ZW5lcihDPT57RShDKX0pKSxbX10pLHguanN4KCJkaXYiLHsuLi55LCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiOlM/dDp2b2lkIDAsImFyaWEtYXV0b2NvbXBsZXRlIjpTP2U6Im5vbmUiLCJhcmlhLWNvbnRyb2xzIjpTP246dm9pZCAwLCJhcmlhLWRlc2NyaWJlZGJ5IjpyLCJhcmlhLWV4cGFuZGVkIjpTJiZoPT09ImNvbWJvYm94Ij8hIWk6dm9pZCAwLCJhcmlhLWxhYmVsIjpvLCJhcmlhLWxhYmVsbGVkYnkiOmwsImFyaWEtbXVsdGlsaW5lIjpzLCJhcmlhLW93bnMiOlM/YTp2b2lkIDAsImFyaWEtcmVhZG9ubHkiOlM/dm9pZCAwOiEwLCJhcmlhLXJlcXVpcmVkIjp1LGF1dG9DYXBpdGFsaXplOmMsY2xhc3NOYW1lOmQsY29udGVudEVkaXRhYmxlOlMsImRhdGEtdGVzdGlkIjp2LGlkOmYscmVmOiQscm9sZTpoLHNwZWxsQ2hlY2s6ZyxzdHlsZTptLHRhYkluZGV4Ond9KX1mdW5jdGlvbiBrQSh7Y2xhc3NOYW1lOnR9KXtyZXR1cm4geC5qc3goQ0Ese2NsYXNzTmFtZTp0fSl9Y2xhc3MganMgZXh0ZW5kcyBfZS5EZWNvcmF0b3JOb2Rle2NvbnN0cnVjdG9yKGUsbil7c3VwZXIobiksdGhpcy5fX3NyYz1lLnNyYyx0aGlzLl9fYWx0VGV4dD1lLmFsdFRleHQsdGhpcy5fX3dpZHRoPWUud2lkdGgsdGhpcy5fX2hlaWdodD1lLmhlaWdodH1zdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJpbWFnZSJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcganMoe3NyYzplLl9fc3JjLGFsdFRleHQ6ZS5fX2FsdFRleHQsd2lkdGg6ZS5fX3dpZHRoLGhlaWdodDplLl9faGVpZ2h0fSl9ZXhwb3J0SlNPTigpe3JldHVybnthbHRUZXh0OnRoaXMuX19hbHRUZXh0LGhlaWdodDp0aGlzLl9fd2lkdGgsc3JjOnRoaXMuX19zcmMsdHlwZToiaW1hZ2UiLHZlcnNpb246MSx3aWR0aDp0aGlzLl9fd2lkdGh9fXN0YXRpYyBpbXBvcnRKU09OKGUpe3JldHVybiB3QyhlKX1jcmVhdGVET00oKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iil9dXBkYXRlRE9NKCl7cmV0dXJuITF9ZGVjb3JhdGUoKXtyZXR1cm4geC5qc3goYkEse3NyYzp0aGlzLl9fc3JjLGFsdFRleHQ6dGhpcy5fX2FsdFRleHQsZW1wdHk6dGhpcy5fX2VtcHR5LGhlaWdodDp0aGlzLl9faGVpZ2h0LG5vZGVLZXk6dGhpcy5nZXRLZXkoKX0pfX1mdW5jdGlvbiBiQSh0KXtyZXR1cm4geC5qc3goImltZyIse3NyYzp0LnNyY30pfWZ1bmN0aW9uIHdDKHQpe3JldHVybiBuZXcganModCl9ZnVuY3Rpb24gJEEoKXtjb25zdFt0XT1Oci51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57dC5mb2N1cygpfSxbdF0pLG51bGx9Y29uc3QgU0M9X2UuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX0lNQUdFX0NPTU1BTkQiKTtmdW5jdGlvbiBUQSgpe2NvbnN0W3RdPU5yLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntpZighdC5oYXNOb2RlcyhbanNdKSl0aHJvdyBuZXcgRXJyb3IoIkltYWdlc1BsdWdpbjogSW1hZ2VOb2RlIG5vdCByZWdpc3RlcmVkIG9uIGVkaXRvciIpO3JldHVybiBGdC5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJDb21tYW5kKFNDLGU9Pntjb25zdCBuPXdDKGUpO3JldHVybiBfZS4kaW5zZXJ0Tm9kZXMoW25dKSxfZS4kaXNSb290T3JTaGFkb3dSb290KG4uZ2V0UGFyZW50T3JUaHJvdygpKSYmRnQuJHdyYXBOb2RlSW5FbGVtZW50KG4sX2UuJGNyZWF0ZVBhcmFncmFwaE5vZGUpLnNlbGVjdEVuZCgpLCEwfSxfZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUikpfSxbdF0pLG51bGx9Y29uc3QgTkE9KHtjbGFzc05hbWU6dH0pPT54LmpzeHMoInN2ZyIse2hlaWdodDoxMix3aWR0aDoxMix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6dCxjaGlsZHJlbjpbeC5qc3goInBhdGgiLHtkOiJNNiA0aDhhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEtNCA0SDZ6In0pLHguanN4KCJwYXRoIix7ZDoiTTYgMTJoOWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnoifSldfSksUkE9TkEsT0E9KHtjbGFzc05hbWU6dH0pPT54LmpzeHMoInN2ZyIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDkgMTAiLGZpbGw6Im5vbmUiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOnQsY2hpbGRyZW46W3guanN4cygiZyIse2NsaXBQYXRoOiJ1cmwoI2NsaXAwXzEyMjVfMTYzOCkiLGNoaWxkcmVuOlt4LmpzeCgicmVjdCIse3k6IjAuNSIsd2lkdGg6IjkiLGhlaWdodDoiOSJ9KSx4LmpzeCgicGF0aCIse2Q6Ik0wIDdMOC41IDUiLHN0cm9rZToiY3VycmVudENvbG9yIn0pLHguanN4KCJjaXJjbGUiLHtjeDoiMyIsY3k6IjMuNSIscjoiMSIsZmlsbDoiY3VycmVudENvbG9yIn0pXX0pLHguanN4KCJyZWN0Iix7eDoiMC41Iix5OiIxIix3aWR0aDoiOCIsaGVpZ2h0OiI4IixzdHJva2U6ImN1cnJlbnRDb2xvciJ9KSx4LmpzeCgiZGVmcyIse2NoaWxkcmVuOnguanN4KCJjbGlwUGF0aCIse2lkOiJjbGlwMF8xMjI1XzE2MzgiLGNoaWxkcmVuOnguanN4KCJyZWN0Iix7eToiMC41Iix3aWR0aDoiOSIsaGVpZ2h0OiI5IixmaWxsOiJ3aGl0ZSJ9KX0pfSldfSksUEE9T0EsQUE9KHtjbGFzc05hbWU6dH0pPT54LmpzeHMoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZTp0LHdpZHRoOjEyLGhlaWdodDoxMixjaGlsZHJlbjpbeC5qc3goImxpbmUiLHt4MToiMTkiLHkxOiI0Iix4MjoiMTAiLHkyOiI0In0pLHguanN4KCJsaW5lIix7eDE6IjE0Iix5MToiMjAiLHgyOiI1Iix5MjoiMjAifSkseC5qc3goImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiOSIseTI6IjIwIn0pXX0pLE1BPUFBLExBPSh7Y2xhc3NOYW1lOnR9KT0+eC5qc3goInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEiLGNsYXNzTmFtZTp0LHdpZHRoOjEyLGhlaWdodDoxMixjaGlsZHJlbjp4LmpzeCgicGF0aCIse2ZpbGxSdWxlOiJldmVub2RkIixkOiJNMTMsMTUgTDEzLDIxIEMxMywyMS41NTIyODQ3IDEyLjU1MjI4NDcsMjIgMTIsMjIgQzExLjQ0NzcxNTMsMjIgMTEsMjEuNTUyMjg0NyAxMSwyMSBMMTEsMTUgTDEzLDE1IFogTTMsMTMgQzIuNDQ3NzE1MjUsMTMgMiwxMi41NTIyODQ3IDIsMTIgQzIsMTEuNDQ3NzE1MyAyLjQ0NzcxNTI1LDExIDMsMTEgTDIxLDExIEMyMS41NTIyODQ3LDExIDIyLDExLjQ0NzcxNTMgMjIsMTIgQzIyLDEyLjU1MjI4NDcgMjEuNTUyMjg0NywxMyAyMSwxMyBMMywxMyBaIE0xOSwyIEMxOS41NTIyODQ3LDIgMjAsMi40NDc3MTUyNSAyMCwzIEMyMCwzLjU1MjI4NDc1IDE5LjU1MjI4NDcsNCAxOSw0IEwxMyw0IEwxMyw5IEwxMSw5IEwxMSw0IEw1LDQgQzQuNDQ3NzE1MjUsNCA0LDMuNTUyMjg0NzUgNCwzIEM0LDIuNDQ3NzE1MjUgNC40NDc3MTUyNSwyIDUsMiBMMTksMiBaIn0pfSksREE9TEEsSUE9KHt2YXJpYW50OnQ9InByaW1hcnkiLG9uQ2xpY2s6ZSxjaGlsZHJlbjpuLGljb246cixkaXNhYmxlZDppPSExfSk9PnguanN4KCJidXR0b24iLHtkaXNhYmxlZDppLGNsYXNzTmFtZTpQbigiZm9udC1zYW5zIGZvbnQtWzEycHhdIHRyYWNraW5nLVswLjA0ZW1dIHB5LTEgcHgtMiByb3VuZGVkIHdoaXRlc3BhY2Utbm93cmFwIGdyb3VwIHJlbGF0aXZlIHRleHQtcHJpbWFyeSIseyJmb250LWJvbGQiOnQ9PT0icHJpbWFyeSIsInRleHQtZmlsbCBkaXNhYmxlZDpiZy1maWxsIGRpc2FibGVkOnRleHQtYmFja2dyb3VuZCI6dD09PSJwcmltYXJ5IiwiYm9yZGVyIGJvcmRlci1wcmltYXJ5IHRleHQtcHJpbWFyeSBob3Zlcjpib3JkZXItaGlnaGxpZ2h0IGhvdmVyOnRleHQtaGlnaGxpZ2h0IGRpc2FibGVkOmJnLWZpbGwgZGlzYWJsZWQ6dGV4dC1iYWNrZ3JvdW5kIjp0IT09InByaW1hcnkifSksb25DbGljazplLGNoaWxkcmVuOnguanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIiLGNoaWxkcmVuOltyJiZyLG5dfSl9KSxPbz1JQSxqQT0oe2NsYXNzTmFtZTp0fSk9PnguanN4cygic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMTIgMTIiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2xhc3NOYW1lOnQsY2hpbGRyZW46W3guanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy43MDczMyAxLjAwMDE1TDguNzc4NCA2LjA3MTIxTDguMDcxMjkgNi43NzgzMkwzLjAwMDIyIDEuNzA3MjVMMy43MDczMyAxLjAwMDE1WiIsZmlsbDoiY3VycmVudENvbG9yIn0pLHguanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGNsaXBSdWxlOiJldmVub2RkIixkOiJNMy4wMDAxNSAxMC40NzA5TDguMDcxMjEgNS4zOTk4M0w4Ljc3ODMyIDYuMTA2OTNMMy43MDcyNSAxMS4xNzhMMy4wMDAxNSAxMC40NzA5WiIsZmlsbDoiY3VycmVudENvbG9yIn0pXX0pLHpBPWpBLEVDPXJlLmNyZWF0ZUNvbnRleHQoe2dldCBhcGkoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXNzaW9uKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgdGhlbWUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRUaGVtZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IGVkaXRNb2RlKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgc2V0RWRpdE1vZGUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBoaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRIaWdobGlnaHQoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRXaW5kb3dTaXplKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgd2luZG93U2l6ZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX19KTtmdW5jdGlvbiBqZigpe3JldHVybiByZS51c2VDb250ZXh0KEVDKX1jb25zdCBGQT0oe29wdGlvbnM6dCxvbkNoYW5nZTplLGxhYmVsOm4saWNvbjpyfSk9Pntjb25zdFtpLG9dPXAudXNlU3RhdGUoITEpLGw9cC51c2VSZWYobnVsbCksW3MsYV09cC51c2VTdGF0ZSgwKSx7d2luZG93U2l6ZTp1fT1qZigpLGM9KCk9PntvKCFpKX0sZD0oZixoKT0+e2EoaCksZShmKSxvKCExKX07cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgZj1oPT57aSYmbC5jdXJyZW50JiYhbC5jdXJyZW50LmNvbnRhaW5zKGgudGFyZ2V0KSYmbyghMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZiksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsZil9fSxbXSkseC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1bMTJweF0iLHJlZjpsLGNoaWxkcmVuOnguanN4KE9vLHtvbkNsaWNrOmY9PntmLnByZXZlbnREZWZhdWx0KCksYygpfSxpY29uOnguanN4KHpBLHtjbGFzc05hbWU6YHJvdGF0ZS1bLTkwZGVnXSB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0xNTAgZWFzZS1pbi1vdXQgJHtpPyIiOiJyb3RhdGUtWzkwZGVnXSJ9YH0pLGNoaWxkcmVuOnguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W3guanN4cygic3BhbiIse2NsYXNzTmFtZToiZmxleCBmbGV4LXJvdyBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEiLGNoaWxkcmVuOltuLHImJnJdfSksaSYmeC5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgLXRvcC1bNHB4XSBvdmVyZmxvdy1zY3JvbGwgc2hhZG93LWxnIC1sZWZ0LTIgdGV4dC1wcmltYXJ5IHctZml0IHotb3ZlcmxheSIsc3R5bGU6e21heEhlaWdodDp1PT1udWxsP3ZvaWQgMDp1LmlubmVySGVpZ2h0fSxjaGlsZHJlbjp4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sICIsY2hpbGRyZW46dD09bnVsbD92b2lkIDA6dC5tYXAoKGYsaCk9PnguanN4KCJidXR0b24iLHtvbkNsaWNrOmc9PntnLnByZXZlbnREZWZhdWx0KCksZChmLGgpfSxjbGFzc05hbWU6YHRleHQtbGVmdCBweC0yIHB5LTEgaG92ZXI6dGV4dC1oaWdobGlnaHQgICR7aD09PXMmJiJmb250LWJvbGQgdHJ1bmNhdGUifWAsY2hpbGRyZW46Zn0sZikpfSl9KV19KX0pfSl9LEJBPUZBLFVBPW5ldyBUZXh0RW5jb2RlcjtmdW5jdGlvbiBDQyh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9Pnt2YXIgbztjb25zdCByPShvPXQuY3VycmVudFRhcmdldC5maWxlcyk9PW51bGw/dm9pZCAwOm9bMF0saT1uZXcgRmlsZVJlYWRlcjtpLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCgpPT57Y29uc3QgbD1pLnJlc3VsdDtpZih0eXBlb2YgbD09InN0cmluZyIpe2NvbnN0IHM9bmV3IEltYWdlO3MuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBhPU9uLmdldFNIQTI1Nkhhc2goVUEuZW5jb2RlKGwpKTtpZihzLm5hdHVyYWxXaWR0aCYmcy5uYXR1cmFsSGVpZ2h0KXtjb25zdCB1PUV2KGwpO2Uoe3NyYzpsLHdpZHRoOnMubmF0dXJhbFdpZHRoLGhlaWdodDpzLm5hdHVyYWxIZWlnaHQsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphLG1pbWVUeXBlOnUsZmlsZUV4dDp1JiZDdih1KX0pfWVsc2UgZSh7c3JjOmwsZmlsZW5hbWU6cj09bnVsbD92b2lkIDA6ci5uYW1lLHNoYTI1NjphfSl9KSxzLnNyYz1sfWVsc2UgbihsP3ttZXNzYWdlOiJVbmV4cGVjdGVkIGltYWdlIHJlc3VsdCB0eXBlIixyZXN1bHQ6bH06e21lc3NhZ2U6IkVtcHR5IHJlc3VsdCJ9KX0pLHImJmkucmVhZEFzRGF0YVVSTChyKX0pfWZ1bmN0aW9uIGtDKHQpe2NvbnN0IGU9dC5hbmNob3Isbj10LmZvY3VzLHI9dC5hbmNob3IuZ2V0Tm9kZSgpLGk9dC5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHI9PT1pP3I6dC5pc0JhY2t3YXJkKCk/Y28uJGlzQXROb2RlRW5kKG4pP3I6aTpjby4kaXNBdE5vZGVFbmQoZSk/cjppfWZ1bmN0aW9uIFdBKCl7Y29uc3RbdF09TnIudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+RnQubWVyZ2VSZWdpc3Rlcih0LnJlZ2lzdGVyQ29tbWFuZChfZS5DTElDS19DT01NQU5ELGU9Pntjb25zdCBuPV9lLiRnZXRTZWxlY3Rpb24oKTtpZihfZS4kaXNSYW5nZVNlbGVjdGlvbihuKSl7Y29uc3Qgcj1rQyhuKSxpPUZ0LiRmaW5kTWF0Y2hpbmdQYXJlbnQocixlbC4kaXNMaW5rTm9kZSk7aWYoZWwuJGlzTGlua05vZGUoaSkmJihlLm1ldGFLZXl8fGUuY3RybEtleSkpcmV0dXJuIHdpbmRvdy5vcGVuKGkuZ2V0VVJMKCksIl9ibGFuayIpLCEwfXJldHVybiExfSxfZS5DT01NQU5EX1BSSU9SSVRZX0xPVykpLFtdKSxudWxsfXZhciBiQz17ZXhwb3J0czp7fX0sVkE9IlNFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEIixIQT1WQSxLQT1IQTtmdW5jdGlvbiAkQygpe31mdW5jdGlvbiBUQygpe31UQy5yZXNldFdhcm5pbmdDYWNoZT0kQzt2YXIgWkE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHIsaSxvLGwscyxhKXtpZihhIT09S0Epe3ZhciB1PW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO3Rocm93IHUubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsdX19dC5pc1JlcXVpcmVkPXQ7ZnVuY3Rpb24gZSgpe3JldHVybiB0fXZhciBuPXthcnJheTp0LGJpZ2ludDp0LGJvb2w6dCxmdW5jOnQsbnVtYmVyOnQsb2JqZWN0OnQsc3RyaW5nOnQsc3ltYm9sOnQsYW55OnQsYXJyYXlPZjplLGVsZW1lbnQ6dCxlbGVtZW50VHlwZTp0LGluc3RhbmNlT2Y6ZSxub2RlOnQsb2JqZWN0T2Y6ZSxvbmVPZjplLG9uZU9mVHlwZTplLHNoYXBlOmUsZXhhY3Q6ZSxjaGVja1Byb3BUeXBlczpUQyxyZXNldFdhcm5pbmdDYWNoZTokQ307cmV0dXJuIG4uUHJvcFR5cGVzPW4sbn07YkMuZXhwb3J0cz1aQSgpO3ZhciBHQT1iQy5leHBvcnRzO2NvbnN0IGlyPU91KEdBKTtmdW5jdGlvbiBNbSgpe3JldHVybiBNbT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxNbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWUEodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciBuPVhBKHQsZSkscixpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCk7Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKylyPW9baV0sIShlLmluZGV4T2Yocik+PTApJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodCxyKSYmKG5bcl09dFtyXSl9cmV0dXJuIG59ZnVuY3Rpb24gWEEodCxlKXtpZih0PT1udWxsKXJldHVybnt9O3ZhciBuPXt9LHI9T2JqZWN0LmtleXModCksaSxvO2ZvcihvPTA7bzxyLmxlbmd0aDtvKyspaT1yW29dLCEoZS5pbmRleE9mKGkpPj0wKSYmKG5baV09dFtpXSk7cmV0dXJuIG59dmFyIE12PXAuZm9yd2FyZFJlZihmdW5jdGlvbih0LGUpe3ZhciBuPXQuY29sb3Iscj1uPT09dm9pZCAwPyJjdXJyZW50Q29sb3IiOm4saT10LnNpemUsbz1pPT09dm9pZCAwPzI0OmksbD1ZQSh0LFsiY29sb3IiLCJzaXplIl0pO3JldHVybiByZS5jcmVhdGVFbGVtZW50KCJzdmciLE1tKHtyZWY6ZSx4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOm8saGVpZ2h0Om8sdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6cixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCJ9LGwpLHJlLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiJ9KSl9KTtNdi5wcm9wVHlwZXM9e2NvbG9yOmlyLnN0cmluZyxzaXplOmlyLm9uZU9mVHlwZShbaXIuc3RyaW5nLGlyLm51bWJlcl0pfTtNdi5kaXNwbGF5TmFtZT0iQ2hlY2siO2NvbnN0IEpBPU12O2Z1bmN0aW9uIExtKCl7cmV0dXJuIExtPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LExtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBRQSh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49cUEodCxlKSxyLGk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXI9b1tpXSwhKGUuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYobltyXT10W3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBxQSh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyh0KSxpLG87Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sIShlLmluZGV4T2YoaSk+PTApJiYobltpXT10W2ldKTtyZXR1cm4gbn12YXIgTHY9cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixpPXQuc2l6ZSxvPWk9PT12b2lkIDA/MjQ6aSxsPVFBKHQsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsTG0oe3JlZjplLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6byxoZWlnaHQ6byx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCkscmUuY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxIn0pLHJlLmNyZWF0ZUVsZW1lbnQoInBhdGgiLHtkOiJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEifSkpfSk7THYucHJvcFR5cGVzPXtjb2xvcjppci5zdHJpbmcsc2l6ZTppci5vbmVPZlR5cGUoW2lyLnN0cmluZyxpci5udW1iZXJdKX07THYuZGlzcGxheU5hbWU9IkxpbmsiO2NvbnN0IGVNPUx2O2Z1bmN0aW9uIERtKCl7cmV0dXJuIERtPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LERtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB0TSh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49bk0odCxlKSxyLGk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXI9b1tpXSwhKGUuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYobltyXT10W3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBuTSh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyh0KSxpLG87Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sIShlLmluZGV4T2YoaSk+PTApJiYobltpXT10W2ldKTtyZXR1cm4gbn12YXIgRHY9cC5mb3J3YXJkUmVmKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixpPXQuc2l6ZSxvPWk9PT12b2lkIDA/MjQ6aSxsPXRNKHQsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQoInN2ZyIsRG0oe3JlZjplLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6byxoZWlnaHQ6byx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCkscmUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSkscmUuY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkpfSk7RHYucHJvcFR5cGVzPXtjb2xvcjppci5zdHJpbmcsc2l6ZTppci5vbmVPZlR5cGUoW2lyLnN0cmluZyxpci5udW1iZXJdKX07RHYuZGlzcGxheU5hbWU9IlgiO2NvbnN0IHJNPUR2LGlNPSh7Zm9udFNpemVzOnQsZm9udHNGYW1pbGllczplLG9uRWRpdG9yOm4sY29sb3JzOnJ9KT0+e2NvbnN0W2ldPU5yLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtwLnVzZUVmZmVjdCgoKT0+e24mJm4oaSl9LFtpXSk7Y29uc3RbbyxsXT1wLnVzZVN0YXRlKGkpLFtzLGFdPXAudXNlU3RhdGUobnVsbCksW3UsY109cC51c2VTdGF0ZSghMSksW2QsZl09cC51c2VTdGF0ZSghMSksW2gsZ109cC51c2VTdGF0ZSghMSksW20sd109cC51c2VTdGF0ZSghMSk7cC51c2VTdGF0ZSgiMTVweCIpLHAudXNlU3RhdGUoIiMwMDAiKSxwLnVzZVN0YXRlKCJTYW5zIik7Y29uc3Rbdix5XT1wLnVzZVN0YXRlKCJwYXJhZ3JhcGgiKTtwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCExKSxwLnVzZVN0YXRlKCJ1cmwiKSxwLnVzZVN0YXRlKG51bGwpO2NvbnN0W18sU109cC51c2VTdGF0ZShudWxsKSxFPWs9PntpLmRpc3BhdGNoQ29tbWFuZChlbC5UT0dHTEVfTElOS19DT01NQU5ELGspfSwkPXtwYXJhZ3JhcGg6Ik5vcm1hbCIsaDE6IkhlYWRpbmcgMSIsaDI6IkhlYWRpbmcgMiIsaDM6IkhlYWRpbmcgMyIsaDQ6IkhlYWRpbmcgNCIsaDU6IkhlYWRpbmcgNSIsaDY6IkhlYWRpbmcgNiIsbnVtYmVyOiJOdW1iZXJlZCBMaXN0IixidWxsZXQ6IkJ1bGxldGVkIExpc3QifSxDPXt9O2Zvcihjb25zdCBrIGluICQpQ1skW2tdXT1rO2NvbnN0IE49cC51c2VDYWxsYmFjaygoKT0+e2NvbnN0IGs9X2UuJGdldFNlbGVjdGlvbigpO2lmKF9lLiRpc1JhbmdlU2VsZWN0aW9uKGspKXtjb25zdCBNPWsuYW5jaG9yLmdldE5vZGUoKTtsZXQgRD1NLmdldEtleSgpPT09InJvb3QiP006RnQuJGZpbmRNYXRjaGluZ1BhcmVudChNLFA9Pntjb25zdCBiPVAuZ2V0UGFyZW50KCk7cmV0dXJuIGIhPT1udWxsJiZfZS4kaXNSb290T3JTaGFkb3dSb290KGIpfSk7RD09PW51bGwmJihEPU0uZ2V0VG9wTGV2ZWxFbGVtZW50T3JUaHJvdygpKTtjb25zdCBpZT1rQyhrKSxWPUZ0LiRmaW5kTWF0Y2hpbmdQYXJlbnQoaWUsZWwuJGlzTGlua05vZGUpO2lmKFYhPT1udWxsKXtjb25zdCBQPVYuZ2V0VVJMKCk7UyhQKX1lbHNlIFMobnVsbCk7Y29uc3QgSz1ELmdldEtleSgpLFI9by5nZXRFbGVtZW50QnlLZXkoSyk7aWYoYyhrLmhhc0Zvcm1hdCgiYm9sZCIpKSxmKGsuaGFzRm9ybWF0KCJpdGFsaWMiKSksZyhrLmhhc0Zvcm1hdCgic3RyaWtldGhyb3VnaCIpKSx3KGsuaGFzRm9ybWF0KCJ1bmRlcmxpbmUiKSksUiE9PW51bGwpaWYoYShLKSxVaS4kaXNMaXN0Tm9kZShEKSl7Y29uc3QgUD1GdC4kZ2V0TmVhcmVzdE5vZGVPZlR5cGUoTSxVaS5MaXN0Tm9kZSksYj1QP1AuZ2V0TGlzdFR5cGUoKTpELmdldExpc3RUeXBlKCk7eShiKX1lbHNle2NvbnN0IFA9SWEuJGlzSGVhZGluZ05vZGUoRCk/RC5nZXRUYWcoKTpELmdldFR5cGUoKTtQIGluICQmJnkoUCl9fX0sW29dKTtwLnVzZUVmZmVjdCgoKT0+RnQubWVyZ2VSZWdpc3RlcihpLnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoKHtlZGl0b3JTdGF0ZTprfSk9PntrLnJlYWQoKCk9PntOKCl9KX0pKSxbTixvLGldKSxwLnVzZUVmZmVjdCgoKT0+aS5yZWdpc3RlckNvbW1hbmQoX2UuU0VMRUNUSU9OX0NIQU5HRV9DT01NQU5ELChrLE0pPT4oTigpLGwoTSksITEpLF9lLkNPTU1BTkRfUFJJT1JJVFlfQ1JJVElDQUwpLFtpLE5dKTtjb25zdCBBPWs9PntbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLmluY2x1ZGVzKGspP3YhPT1rJiZpLnVwZGF0ZSgoKT0+e2NvbnN0IE09X2UuJGdldFNlbGVjdGlvbigpO19lLiRpc1JhbmdlU2VsZWN0aW9uKE0pJiZjby4kc2V0QmxvY2tzVHlwZShNLCgpPT5JYS4kY3JlYXRlSGVhZGluZ05vZGUoaykpfSk6az09PSJwYXJhZ3JhcGgiJiZ2IT09InBhcmFncmFwaCI/aS51cGRhdGUoKCk9Pntjb25zdCBNPV9lLiRnZXRTZWxlY3Rpb24oKTsoX2UuJGlzUmFuZ2VTZWxlY3Rpb24oTSl8fF9lLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihNKSkmJmNvLiRzZXRCbG9ja3NUeXBlKE0sKCk9Pl9lLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCkpfSk6az09PSJudW1iZXIiJiZ2IT09Im51bWJlciI/aS5kaXNwYXRjaENvbW1hbmQoVWkuSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5ELHZvaWQgMCk6az09PSJidWxsZXQiJiZ2IT09ImJ1bGxldCI/aS5kaXNwYXRjaENvbW1hbmQoVWkuSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQsdm9pZCAwKTppLmRpc3BhdGNoQ29tbWFuZChVaS5SRU1PVkVfTElTVF9DT01NQU5ELHZvaWQgMCl9O3JldHVybiBwLnVzZUNhbGxiYWNrKCgpPT57aS51cGRhdGUoKCk9Pntjb25zdCBrPV9lLiRnZXRTZWxlY3Rpb24oKTtpZihfZS4kaXNSYW5nZVNlbGVjdGlvbihrKSl7Y29uc3QgTT1rLmFuY2hvcixEPWsuZm9jdXMsaWU9ay5nZXROb2RlcygpO2lmKE0ua2V5PT09RC5rZXkmJk0ub2Zmc2V0PT09RC5vZmZzZXQpcmV0dXJuO2llLmZvckVhY2goKFYsSyk9PntfZS4kaXNUZXh0Tm9kZShWKT8oSz09PTAmJk0ub2Zmc2V0IT09MCYmKFY9Vi5zcGxpdFRleHQoTS5vZmZzZXQpWzFdfHxWKSxLPT09aWUubGVuZ3RoLTEmJihWPVYuc3BsaXRUZXh0KEQub2Zmc2V0KVswXXx8ViksVi5fX3N0eWxlIT09IiImJlYuc2V0U3R5bGUoIiIpLFYuX19mb3JtYXQhPT0wJiYoVi5zZXRGb3JtYXQoMCksRnQuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3coVikuc2V0Rm9ybWF0KCIiKSkpOklhLiRpc0hlYWRpbmdOb2RlKFYpJiZWLnJlcGxhY2UoX2UuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSwhMCl9KX19KX0sW29dKSx4LmpzeHMoImRpdiIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIGZsZXggZmxleC1jb2wgcHgtNCBweS0yIGJvcmRlciByb3VuZGVkLW1kIHJvdW5kZWQtYi1ub25lIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIixjaGlsZHJlbjpbeC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgZ2FwLTEiLGNoaWxkcmVuOlt4LmpzeChCQSx7b3B0aW9uczpPYmplY3QudmFsdWVzKCQpLGxhYmVsOiRbdl0/P3YrIiAobm90IHN1cHBvcnRlZCkiLG9uQ2hhbmdlOms9PntBKENba10pfX0pLHguanN4KE9vLHt2YXJpYW50OiJwcmltYXJ5IixvbkNsaWNrOms9PntrLnByZXZlbnREZWZhdWx0KCksaS5kaXNwYXRjaENvbW1hbmQoX2UuRk9STUFUX1RFWFRfQ09NTUFORCwiYm9sZCIpfSxhY3RpdmU6dSxpY29uOnguanN4KFJBLHtjbGFzc05hbWU6YCR7dSYmInN0cm9rZS1bM3B4XSJ9YH0pfSkseC5qc3goT28se2FjdGl2ZTpoLG9uQ2xpY2s6az0+e2sucHJldmVudERlZmF1bHQoKSxpLmRpc3BhdGNoQ29tbWFuZChfZS5GT1JNQVRfVEVYVF9DT01NQU5ELCJzdHJpa2V0aHJvdWdoIil9LGljb246eC5qc3goREEse2NsYXNzTmFtZTpgJHtoJiYic3Ryb2tlLVsycHhdIn1gfSl9KSx4LmpzeChPbyx7YWN0aXZlOmQsb25DbGljazprPT57ay5wcmV2ZW50RGVmYXVsdCgpLGkuZGlzcGF0Y2hDb21tYW5kKF9lLkZPUk1BVF9URVhUX0NPTU1BTkQsIml0YWxpYyIpfSxpY29uOnguanN4KE1BLHtjbGFzc05hbWU6YCR7ZCYmInN0cm9rZS1bM3B4XSJ9YH0pfSkseC5qc3goT28se2FjdGl2ZTpfIT09bnVsbCxvbkNsaWNrOms9PntrLnByZXZlbnREZWZhdWx0KCksUygiIiksRSgiIil9LGljb246eC5qc3goZU0se3dpZHRoOjEyLGhlaWdodDoxMixjbGFzc05hbWU6YCR7XyE9PW51bGwmJiJzdHJva2UtWzNweF0ifWB9KX0pLHguanN4cygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIixjaGlsZHJlbjpbeC5qc3goUEEse30pLHguanN4KCJpbnB1dCIse3R5cGU6ImZpbGUiLGhpZGRlbjohMCxvbkNoYW5nZTprPT57ay5wcmV2ZW50RGVmYXVsdCgpLENDKGspLnRoZW4oTT0+e2kuZGlzcGF0Y2hDb21tYW5kKFNDLHsuLi5NfSl9KS5jYXRjaChNPT57Y29uc29sZS5lcnJvcigiRXJyb3IgcmVhZGluZyBpbWFnZSIsTSl9KX19KV19KV19KSxfIT09bnVsbCYmeC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgcC0yIixjaGlsZHJlbjpbeC5qc3goImlucHV0Iix7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6IkVudGVyIFVSTCIsY2xhc3NOYW1lOiJ3LTEvMyBweC0yIGJnLWJhY2tncm91bmQgdGV4dC1wcmltYXJ5Iix2YWx1ZTpfLG9uQ2hhbmdlOms9PntrLnByZXZlbnREZWZhdWx0KCksUyhrLnRhcmdldC52YWx1ZSl9fSkseC5qc3goT28se3ZhcmlhbnQ6InByaW1hcnkiLG9uQ2xpY2s6az0+e2sucHJldmVudERlZmF1bHQoKSxFKF98fG51bGwpfSxpY29uOnguanN4KEpBLHtzaXplOjE0fSl9KSx4LmpzeChPbyx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazprPT57ay5wcmV2ZW50RGVmYXVsdCgpLEUobnVsbCl9LGljb246eC5qc3gock0se3NpemU6MTR9KX0pXX0pXX0pfSxvTT1pTTtmdW5jdGlvbiBsTSh0KXtjb25zb2xlLmVycm9yKHQpfWNvbnN0IHNNPSh7cmljaHRleHQ6dCxvbkVkaXRvcjplfSk9Pntjb25zdCByPXtuYW1lc3BhY2U6InZhbCIsZWRpdG9yU3RhdGU6aT0+e2kuc2V0RWRpdG9yU3RhdGUoaS5wYXJzZUVkaXRvclN0YXRlKHtyb290OkRPKERFKHQpKX0pKX0sbm9kZXM6W0lhLkhlYWRpbmdOb2RlLGpzLFVpLkxpc3ROb2RlLFVpLkxpc3RJdGVtTm9kZSxlbC5MaW5rTm9kZV0sdGhlbWU6e3RleHQ6e2JvbGQ6ImZvbnQtc2VtaWJvbGQiLHVuZGVybGluZToidW5kZXJsaW5lIixpdGFsaWM6Iml0YWxpYyIsc3RyaWtldGhyb3VnaDoibGluZS10aHJvdWdoIix1bmRlcmxpbmVTdHJpa2V0aHJvdWdoOiJ1bmRlcmxpbmUgbGluZS10aHJvdWdoIn0sbGlzdDp7bGlzdGl0ZW06Im1sLVsyMHB4XSIsb2w6Imxpc3QtZGVjaW1hbCIsdWw6Imxpc3QtZGlzYyJ9LGhlYWRpbmc6e2gxOiJ0ZXh0LTR4bCBmb250LWJvbGQiLGgyOiJ0ZXh0LTN4bCBmb250LWJvbGQiLGgzOiJ0ZXh0LTJ4bCBmb250LWJvbGQiLGg0OiJ0ZXh0LXhsIGZvbnQtYm9sZCIsaDU6InRleHQtbGcgZm9udC1ib2xkIixoNjoidGV4dC1tZCBmb250LWJvbGQifSxsaW5rOiJ0ZXh0LWhpZ2hsaWdodCB1bmRlcmxpbmUifSxvbkVycm9yOmxNfTtyZXR1cm4geC5qc3hzKGFQLkxleGljYWxDb21wb3Nlcix7aW5pdGlhbENvbmZpZzpyLGNoaWxkcmVuOlt4LmpzeCgkQSx7fSkseC5qc3gob00se29uRWRpdG9yOmV9KSx4LmpzeChhQS5SaWNoVGV4dFBsdWdpbix7Y29udGVudEVkaXRhYmxlOnguanN4KCJkaXYiLHtjbGFzc05hbWU6InB4LTMgcHktMiB0ZXh0LXNtIGJvcmRlci1iIHJvdW5kZWQtbWQgcm91bmRlZC10LW5vbmUgYm9yZGVyLXggYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIixjaGlsZHJlbjp4LmpzeChrQSx7Y2xhc3NOYW1lOiJwLTQgb3V0bGluZS1ub25lIGJnLWZpbGwifSl9KSxwbGFjZWhvbGRlcjp4LmpzeCgicCIse2NsYXNzTmFtZToiIn0pLEVycm9yQm91bmRhcnk6bVB9KSx4LmpzeChFQS5MaW5rUGx1Z2luLHt9KSx4LmpzeChXQSx7fSkseC5qc3goaEEuTGlzdFBsdWdpbix7fSkseC5qc3goVEEse30pLHguanN4KENQLkhpc3RvcnlQbHVnaW4se30pXX0pfSxJdj0icC0xIGJvcmRlciByb3VuZGVkLWZ1bGwgc2hhZG93IGJvcmRlci1hY2NlbnQiLE54PSJ2YWxidWlsZDp1cmxCZWZvcmVOYXZpZ2F0aW9uIjtmdW5jdGlvbiBhTSh7YXBpOnQscGF0Y2hlczplLGRpcmVjdGlvbjpuLG9uQ29tbWl0OnJ9KXtjb25zdHt0aGVtZTppLHNldFRoZW1lOm8sZWRpdE1vZGU6bCxzZXRFZGl0TW9kZTpzLHNlc3Npb246YX09amYoKTtpZihhLnN0YXR1cz09PSJzdWNjZXNzIiYmYS5kYXRhLm1vZGU9PT0idW5hdXRob3JpemVkIilyZXR1cm4geC5qc3hzKFJ4LHtkaXJlY3Rpb246bixocmVmOnQuZ2V0TG9naW5Vcmwod2luZG93LmxvY2F0aW9uLmhyZWYpLGNoaWxkcmVuOlt4LmpzeCgic3BhbiIse2NoaWxkcmVuOiJMb2dpbiJ9KSx4LmpzeChQMCx7c2l6ZToxOH0pXX0pO2lmKGEuc3RhdHVzPT09InN1Y2Nlc3MiJiYhYS5kYXRhLmVuYWJsZWQpcmV0dXJuIHguanN4cyhSeCx7ZGlyZWN0aW9uOm4saHJlZjp0LmdldEVuYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W3guanN4KCJzcGFuIix7Y2hpbGRyZW46IkVuYWJsZSJ9KSx4LmpzeChQMCx7c2l6ZToxOH0pXX0pO2NvbnN0W3UsY109cC51c2VTdGF0ZSgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2xldCBkPTA7Zm9yKGNvbnN0IGYgaW4gZSlkKz1lW2ZdLmxlbmd0aDtjKGQpfSxbZV0pLHguanN4cyh1TSx7ZGlyZWN0aW9uOm4sY2hpbGRyZW46W3guanN4KEVjLHthY3RpdmU6bD09PSJob3ZlciJ8fGw9PT0id2luZG93IixvbkNsaWNrOigpPT57cyhkPT5kPT09ImhvdmVyInx8bD09PSJ3aW5kb3ciPyJvZmYiOiJob3ZlciIpfSxjaGlsZHJlbjp4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46bD09PSJob3ZlciJ8fGw9PT0id2luZG93Ij94LmpzeChjUix7c2l6ZToxOH0pOnguanN4KGRSLHtzaXplOjE4fSl9KX0pLHguanN4KEVjLHtvbkNsaWNrOigpPT57byhpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiKX0sY2hpbGRyZW46eC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbaT09PSJkYXJrIiYmeC5qc3gocFIse3NpemU6MTV9KSxpPT09ImxpZ2h0IiYmeC5qc3godVIse3NpemU6MTV9KV19KX0pLHguanN4KEVjLHthY3RpdmU6bD09PSJmdWxsIixvbkNsaWNrOigpPT57aWYobCE9PSJmdWxsIilsb2NhbFN0b3JhZ2Uuc2V0SXRlbShOeCx3aW5kb3cubG9jYXRpb24uaHJlZiksd2luZG93LmxvY2F0aW9uLmhyZWY9dC5nZXRFZGl0VXJsKCk7ZWxzZSBpZihsPT09ImZ1bGwiKXtjb25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKE54KTt3aW5kb3cubG9jYXRpb24uaHJlZj1kfHwiLyJ9fSxjaGlsZHJlbjp4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46bD09PSJmdWxsIj94LmpzeChhUix7c2l6ZToxNX0pOnguanN4KGxSLHtzaXplOjE1fSl9KX0pLHUhPT12b2lkIDAmJmEuc3RhdHVzPT09InN1Y2Nlc3MiJiZhLmRhdGEubW9kZT09PSJwcm94eSImJnguanN4KEVjLHtvbkNsaWNrOigpPT57dT4wP3QucG9zdENvbW1pdCh7cGF0Y2hlczplfSkudGhlbihkPT57em8uaXNFcnIoZCk/KGNvbnNvbGUuZXJyb3IoZC5lcnJvciksYWxlcnQoIkNvdWxkIG5vdCBjb21taXQgcGF0Y2hlczogIitkLmVycm9yLm1lc3NhZ2UpKTooY29uc29sZS5sb2coIkNvbW1pdHRlZCBwYXRjaGVzOiAiLGQudmFsdWUpLHIoKSl9KTphbGVydCgiTm8gcGF0Y2hlcyB0byBjb21taXQiKX0sY2hpbGRyZW46eC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbeC5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgLXJpZ2h0LVsxMHB4XSAtdG9wLVsxMHB4XSBib3JkZXIgYm9yZGVyLWJvcmRlciByb3VuZGVkLWZ1bGwgcHgtMSBmb250LXNhbnMgdGV4dC14cyBiZy1jYXJkIHRleHQtYWNjZW50IixjaGlsZHJlbjp1fSkseC5qc3goaFIse3NpemU6MTh9KV19KX0pLHguanN4KCJhIix7Y2xhc3NOYW1lOkl2LGhyZWY6dC5nZXREaXNhYmxlVXJsKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxjaGlsZHJlbjp4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46eC5qc3goZlIse3NpemU6MTh9KX0pfSldfSl9ZnVuY3Rpb24gUngoe2hyZWY6dCxkaXJlY3Rpb246ZSxjaGlsZHJlbjpufSl7cmV0dXJuIHguanN4KCJkaXYiLHtjbGFzc05hbWU6UG4oImZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCBmb250LXNhbnMgYm9yZGVyIHJvdW5kZWQtZnVsbCBnYXAtMyB0ZXh0LXByaW1hcnkgYm9yZGVyLWZpbGwgYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1iYWNrZ3JvdW5kLzkwIGZyb20tNDAlIHRvLWJhY2tncm91bmQgYmFja2Ryb3AtYmx1ci1sZyBkcm9wLXNoYWRvdy0yeGwiLHsiZmxleC1jb2wgaXRlbXMtc3RhcnQiOmU9PT0idmVydGljYWwiLCJmbGV4LXJvdyBpdGVtcy1jZW50ZXIiOmU9PT0iaG9yaXpvbnRhbCJ9KSxjaGlsZHJlbjp4LmpzeCgiYSIse2NsYXNzTmFtZTpJdixocmVmOnQsY2hpbGRyZW46eC5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiBnYXAteS0yIixjaGlsZHJlbjpufSl9KX0pfWZ1bmN0aW9uIHVNKHtjaGlsZHJlbjp0LGRpcmVjdGlvbjplfSl7cmV0dXJuIHguanN4KCJkaXYiLHtjbGFzc05hbWU6UG4oImZsZXgganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtZnVsbCBweC0yIHB5LTIgZm9udC1zYW5zIGJvcmRlciByb3VuZGVkLWZ1bGwgZ2FwLTMgdGV4dC1wcmltYXJ5IGJvcmRlci1maWxsIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tYmFja2dyb3VuZC85MCBmcm9tLTQwJSB0by1iYWNrZ3JvdW5kIGJhY2tkcm9wLWJsdXItbGcgZHJvcC1zaGFkb3ctMnhsIix7ImZsZXgtY29sIGl0ZW1zLXN0YXJ0IjplPT09InZlcnRpY2FsIiwiZmxleC1yb3cgaXRlbXMtY2VudGVyIjplPT09Imhvcml6b250YWwifSksY2hpbGRyZW46dH0pfWZ1bmN0aW9uIEVjKHthY3RpdmU6dCxvbkNsaWNrOmUsY2hpbGRyZW46bn0pe3JldHVybiB4LmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOlBuKEl2LHsiYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgZHJvcC1zaGFkb3ctWzBweF8wcHhfMTJweF9oc2wodmFyKC0tYWNjZW50KSldIjp0fSksb25DbGljazplLGNoaWxkcmVuOm59KX1mdW5jdGlvbiBjTSh0LGUpe2NvbnN0W24scl09cC51c2VTdGF0ZSh7fSksW2ksb109cC51c2VTdGF0ZSgwKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pnt0LnN0YXR1cz09PSJzdWNjZXNzIiYmdC5kYXRhLm1vZGU9PT0icHJveHkiJiZlLmdldFBhdGNoZXMoe30pLnRoZW4obD0+e2lmKHpvLmlzT2sobCkpe2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgaW4gbC52YWx1ZSlzW2FdPWwudmFsdWVbYV0ubWFwKHU9PnUucGF0Y2hfaWQpO3Iocyl9ZWxzZSBjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgbG9hZCBwYXRjaGVzIixsLmVycm9yKX0pfSxbdCxpXSkse3BhdGNoZXM6bixzZXRQYXRjaFJlc2V0SWQ6b319ZnVuY3Rpb24gZE0odD0iZGFyayIpe2NvbnN0W2Usbl09cC51c2VTdGF0ZSh0KTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFsLXRoZW1lIik9PT0ibGlnaHQiP24oImxpZ2h0Iik6bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpPT09ImRhcmsifHx3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzP24oImRhcmsiKTp3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIikubWF0Y2hlcyYmbigibGlnaHQiKTtjb25zdCByPWk9Pntsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFsLXRoZW1lIil8fG4oaS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiKX07cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyKSwoKT0+e3dpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyKX19LFtdKSxbZSxyPT57bG9jYWxTdG9yYWdlLnNldEl0ZW0oInZhbC10aGVtZSIsciksbihyKX1dfXZhciBEZTsoZnVuY3Rpb24odCl7dC5hc3NlcnRFcXVhbD1pPT5pO2Z1bmN0aW9uIGUoaSl7fXQuYXNzZXJ0SXM9ZTtmdW5jdGlvbiBuKGkpe3Rocm93IG5ldyBFcnJvcn10LmFzc2VydE5ldmVyPW4sdC5hcnJheVRvRW51bT1pPT57Y29uc3Qgbz17fTtmb3IoY29uc3QgbCBvZiBpKW9bbF09bDtyZXR1cm4gb30sdC5nZXRWYWxpZEVudW1WYWx1ZXM9aT0+e2NvbnN0IG89dC5vYmplY3RLZXlzKGkpLmZpbHRlcihzPT50eXBlb2YgaVtpW3NdXSE9Im51bWJlciIpLGw9e307Zm9yKGNvbnN0IHMgb2YgbylsW3NdPWlbc107cmV0dXJuIHQub2JqZWN0VmFsdWVzKGwpfSx0Lm9iamVjdFZhbHVlcz1pPT50Lm9iamVjdEtleXMoaSkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBpW29dfSksdC5vYmplY3RLZXlzPXR5cGVvZiBPYmplY3Qua2V5cz09ImZ1bmN0aW9uIj9pPT5PYmplY3Qua2V5cyhpKTppPT57Y29uc3Qgbz1bXTtmb3IoY29uc3QgbCBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGwpJiZvLnB1c2gobCk7cmV0dXJuIG99LHQuZmluZD0oaSxvKT0+e2Zvcihjb25zdCBsIG9mIGkpaWYobyhsKSlyZXR1cm4gbH0sdC5pc0ludGVnZXI9dHlwZW9mIE51bWJlci5pc0ludGVnZXI9PSJmdW5jdGlvbiI/aT0+TnVtYmVyLmlzSW50ZWdlcihpKTppPT50eXBlb2YgaT09Im51bWJlciImJmlzRmluaXRlKGkpJiZNYXRoLmZsb29yKGkpPT09aTtmdW5jdGlvbiByKGksbz0iIHwgIil7cmV0dXJuIGkubWFwKGw9PnR5cGVvZiBsPT0ic3RyaW5nIj9gJyR7bH0nYDpsKS5qb2luKG8pfXQuam9pblZhbHVlcz1yLHQuanNvblN0cmluZ2lmeVJlcGxhY2VyPShpLG8pPT50eXBlb2Ygbz09ImJpZ2ludCI/by50b1N0cmluZygpOm99KShEZXx8KERlPXt9KSk7dmFyIEltOyhmdW5jdGlvbih0KXt0Lm1lcmdlU2hhcGVzPShlLG4pPT4oey4uLmUsLi4ubn0pfSkoSW18fChJbT17fSkpO2NvbnN0IEo9RGUuYXJyYXlUb0VudW0oWyJzdHJpbmciLCJuYW4iLCJudW1iZXIiLCJpbnRlZ2VyIiwiZmxvYXQiLCJib29sZWFuIiwiZGF0ZSIsImJpZ2ludCIsInN5bWJvbCIsImZ1bmN0aW9uIiwidW5kZWZpbmVkIiwibnVsbCIsImFycmF5Iiwib2JqZWN0IiwidW5rbm93biIsInByb21pc2UiLCJ2b2lkIiwibmV2ZXIiLCJtYXAiLCJzZXQiXSksV2k9dD0+e3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBKLnVuZGVmaW5lZDtjYXNlInN0cmluZyI6cmV0dXJuIEouc3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNOYU4odCk/Si5uYW46Si5udW1iZXI7Y2FzZSJib29sZWFuIjpyZXR1cm4gSi5ib29sZWFuO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBKLmZ1bmN0aW9uO2Nhc2UiYmlnaW50IjpyZXR1cm4gSi5iaWdpbnQ7Y2FzZSJzeW1ib2wiOnJldHVybiBKLnN5bWJvbDtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Si5hcnJheTp0PT09bnVsbD9KLm51bGw6dC50aGVuJiZ0eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iJiZ0LmNhdGNoJiZ0eXBlb2YgdC5jYXRjaD09ImZ1bmN0aW9uIj9KLnByb21pc2U6dHlwZW9mIE1hcDwidSImJnQgaW5zdGFuY2VvZiBNYXA/Si5tYXA6dHlwZW9mIFNldDwidSImJnQgaW5zdGFuY2VvZiBTZXQ/Si5zZXQ6dHlwZW9mIERhdGU8InUiJiZ0IGluc3RhbmNlb2YgRGF0ZT9KLmRhdGU6Si5vYmplY3Q7ZGVmYXVsdDpyZXR1cm4gSi51bmtub3dufX0sVz1EZS5hcnJheVRvRW51bShbImludmFsaWRfdHlwZSIsImludmFsaWRfbGl0ZXJhbCIsImN1c3RvbSIsImludmFsaWRfdW5pb24iLCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiLCJpbnZhbGlkX2VudW1fdmFsdWUiLCJ1bnJlY29nbml6ZWRfa2V5cyIsImludmFsaWRfYXJndW1lbnRzIiwiaW52YWxpZF9yZXR1cm5fdHlwZSIsImludmFsaWRfZGF0ZSIsImludmFsaWRfc3RyaW5nIiwidG9vX3NtYWxsIiwidG9vX2JpZyIsImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzIiwibm90X211bHRpcGxlX29mIiwibm90X2Zpbml0ZSJdKSxmTT10PT5KU09OLnN0cmluZ2lmeSh0LG51bGwsMikucmVwbGFjZSgvIihbXiJdKykiOi9nLCIkMToiKTtjbGFzcyBDciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pc3N1ZXM9W10sdGhpcy5hZGRJc3N1ZT1yPT57dGhpcy5pc3N1ZXM9Wy4uLnRoaXMuaXNzdWVzLHJdfSx0aGlzLmFkZElzc3Vlcz0ocj1bXSk9Pnt0aGlzLmlzc3Vlcz1bLi4udGhpcy5pc3N1ZXMsLi4ucl19O2NvbnN0IG49bmV3LnRhcmdldC5wcm90b3R5cGU7T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG4pOnRoaXMuX19wcm90b19fPW4sdGhpcy5uYW1lPSJab2RFcnJvciIsdGhpcy5pc3N1ZXM9ZX1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuaXNzdWVzfWZvcm1hdChlKXtjb25zdCBuPWV8fGZ1bmN0aW9uKG8pe3JldHVybiBvLm1lc3NhZ2V9LHI9e19lcnJvcnM6W119LGk9bz0+e2Zvcihjb25zdCBsIG9mIG8uaXNzdWVzKWlmKGwuY29kZT09PSJpbnZhbGlkX3VuaW9uIilsLnVuaW9uRXJyb3JzLm1hcChpKTtlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX3JldHVybl90eXBlIilpKGwucmV0dXJuVHlwZUVycm9yKTtlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2FyZ3VtZW50cyIpaShsLmFyZ3VtZW50c0Vycm9yKTtlbHNlIGlmKGwucGF0aC5sZW5ndGg9PT0wKXIuX2Vycm9ycy5wdXNoKG4obCkpO2Vsc2V7bGV0IHM9cixhPTA7Zm9yKDthPGwucGF0aC5sZW5ndGg7KXtjb25zdCB1PWwucGF0aFthXTthPT09bC5wYXRoLmxlbmd0aC0xPyhzW3VdPXNbdV18fHtfZXJyb3JzOltdfSxzW3VdLl9lcnJvcnMucHVzaChuKGwpKSk6c1t1XT1zW3VdfHx7X2Vycm9yczpbXX0scz1zW3VdLGErK319fTtyZXR1cm4gaSh0aGlzKSxyfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubWVzc2FnZX1nZXQgbWVzc2FnZSgpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmlzc3VlcyxEZS5qc29uU3RyaW5naWZ5UmVwbGFjZXIsMil9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH1mbGF0dGVuKGU9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LHI9W107Zm9yKGNvbnN0IGkgb2YgdGhpcy5pc3N1ZXMpaS5wYXRoLmxlbmd0aD4wPyhuW2kucGF0aFswXV09bltpLnBhdGhbMF1dfHxbXSxuW2kucGF0aFswXV0ucHVzaChlKGkpKSk6ci5wdXNoKGUoaSkpO3JldHVybntmb3JtRXJyb3JzOnIsZmllbGRFcnJvcnM6bn19Z2V0IGZvcm1FcnJvcnMoKXtyZXR1cm4gdGhpcy5mbGF0dGVuKCl9fUNyLmNyZWF0ZT10PT5uZXcgQ3IodCk7Y29uc3QgcHU9KHQsZSk9PntsZXQgbjtzd2l0Y2godC5jb2RlKXtjYXNlIFcuaW52YWxpZF90eXBlOnQucmVjZWl2ZWQ9PT1KLnVuZGVmaW5lZD9uPSJSZXF1aXJlZCI6bj1gRXhwZWN0ZWQgJHt0LmV4cGVjdGVkfSwgcmVjZWl2ZWQgJHt0LnJlY2VpdmVkfWA7YnJlYWs7Y2FzZSBXLmludmFsaWRfbGl0ZXJhbDpuPWBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkodC5leHBlY3RlZCxEZS5qc29uU3RyaW5naWZ5UmVwbGFjZXIpfWA7YnJlYWs7Y2FzZSBXLnVucmVjb2duaXplZF9rZXlzOm49YFVucmVjb2duaXplZCBrZXkocykgaW4gb2JqZWN0OiAke0RlLmpvaW5WYWx1ZXModC5rZXlzLCIsICIpfWA7YnJlYWs7Y2FzZSBXLmludmFsaWRfdW5pb246bj0iSW52YWxpZCBpbnB1dCI7YnJlYWs7Y2FzZSBXLmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpuPWBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7RGUuam9pblZhbHVlcyh0Lm9wdGlvbnMpfWA7YnJlYWs7Y2FzZSBXLmludmFsaWRfZW51bV92YWx1ZTpuPWBJbnZhbGlkIGVudW0gdmFsdWUuIEV4cGVjdGVkICR7RGUuam9pblZhbHVlcyh0Lm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7dC5yZWNlaXZlZH0nYDticmVhaztjYXNlIFcuaW52YWxpZF9hcmd1bWVudHM6bj0iSW52YWxpZCBmdW5jdGlvbiBhcmd1bWVudHMiO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX3JldHVybl90eXBlOm49IkludmFsaWQgZnVuY3Rpb24gcmV0dXJuIHR5cGUiO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX2RhdGU6bj0iSW52YWxpZCBkYXRlIjticmVhaztjYXNlIFcuaW52YWxpZF9zdHJpbmc6dHlwZW9mIHQudmFsaWRhdGlvbj09Im9iamVjdCI/ImluY2x1ZGVzImluIHQudmFsaWRhdGlvbj8obj1gSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlICIke3QudmFsaWRhdGlvbi5pbmNsdWRlc30iYCx0eXBlb2YgdC52YWxpZGF0aW9uLnBvc2l0aW9uPT0ibnVtYmVyIiYmKG49YCR7bn0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3QudmFsaWRhdGlvbi5wb3NpdGlvbn1gKSk6InN0YXJ0c1dpdGgiaW4gdC52YWxpZGF0aW9uP249YEludmFsaWQgaW5wdXQ6IG11c3Qgc3RhcnQgd2l0aCAiJHt0LnZhbGlkYXRpb24uc3RhcnRzV2l0aH0iYDoiZW5kc1dpdGgiaW4gdC52YWxpZGF0aW9uP249YEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggIiR7dC52YWxpZGF0aW9uLmVuZHNXaXRofSJgOkRlLmFzc2VydE5ldmVyKHQudmFsaWRhdGlvbik6dC52YWxpZGF0aW9uIT09InJlZ2V4Ij9uPWBJbnZhbGlkICR7dC52YWxpZGF0aW9ufWA6bj0iSW52YWxpZCI7YnJlYWs7Y2FzZSBXLnRvb19zbWFsbDp0LnR5cGU9PT0iYXJyYXkiP249YEFycmF5IG11c3QgY29udGFpbiAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJhdCBsZWFzdCI6Im1vcmUgdGhhbiJ9ICR7dC5taW5pbXVtfSBlbGVtZW50KHMpYDp0LnR5cGU9PT0ic3RyaW5nIj9uPWBTdHJpbmcgbXVzdCBjb250YWluICR7dC5leGFjdD8iZXhhY3RseSI6dC5pbmNsdXNpdmU/ImF0IGxlYXN0Ijoib3ZlciJ9ICR7dC5taW5pbXVtfSBjaGFyYWN0ZXIocylgOnQudHlwZT09PSJudW1iZXIiP249YE51bWJlciBtdXN0IGJlICR7dC5leGFjdD8iZXhhY3RseSBlcXVhbCB0byAiOnQuaW5jbHVzaXZlPyJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIjoiZ3JlYXRlciB0aGFuICJ9JHt0Lm1pbmltdW19YDp0LnR5cGU9PT0iZGF0ZSI/bj1gRGF0ZSBtdXN0IGJlICR7dC5leGFjdD8iZXhhY3RseSBlcXVhbCB0byAiOnQuaW5jbHVzaXZlPyJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIjoiZ3JlYXRlciB0aGFuICJ9JHtuZXcgRGF0ZShOdW1iZXIodC5taW5pbXVtKSl9YDpuPSJJbnZhbGlkIGlucHV0IjticmVhaztjYXNlIFcudG9vX2JpZzp0LnR5cGU9PT0iYXJyYXkiP249YEFycmF5IG11c3QgY29udGFpbiAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJhdCBtb3N0IjoibGVzcyB0aGFuIn0gJHt0Lm1heGltdW19IGVsZW1lbnQocylgOnQudHlwZT09PSJzdHJpbmciP249YFN0cmluZyBtdXN0IGNvbnRhaW4gJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8iYXQgbW9zdCI6InVuZGVyIn0gJHt0Lm1heGltdW19IGNoYXJhY3RlcihzKWA6dC50eXBlPT09Im51bWJlciI/bj1gTnVtYmVyIG11c3QgYmUgJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8ibGVzcyB0aGFuIG9yIGVxdWFsIHRvIjoibGVzcyB0aGFuIn0gJHt0Lm1heGltdW19YDp0LnR5cGU9PT0iYmlnaW50Ij9uPWBCaWdJbnQgbXVzdCBiZSAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJsZXNzIHRoYW4gb3IgZXF1YWwgdG8iOiJsZXNzIHRoYW4ifSAke3QubWF4aW11bX1gOnQudHlwZT09PSJkYXRlIj9uPWBEYXRlIG11c3QgYmUgJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8ic21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIjoic21hbGxlciB0aGFuIn0gJHtuZXcgRGF0ZShOdW1iZXIodC5tYXhpbXVtKSl9YDpuPSJJbnZhbGlkIGlucHV0IjticmVhaztjYXNlIFcuY3VzdG9tOm49IkludmFsaWQgaW5wdXQiO2JyZWFrO2Nhc2UgVy5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpuPSJJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkIjticmVhaztjYXNlIFcubm90X211bHRpcGxlX29mOm49YE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHt0Lm11bHRpcGxlT2Z9YDticmVhaztjYXNlIFcubm90X2Zpbml0ZTpuPSJOdW1iZXIgbXVzdCBiZSBmaW5pdGUiO2JyZWFrO2RlZmF1bHQ6bj1lLmRlZmF1bHRFcnJvcixEZS5hc3NlcnROZXZlcih0KX1yZXR1cm57bWVzc2FnZTpufX07bGV0IE5DPXB1O2Z1bmN0aW9uIGhNKHQpe05DPXR9ZnVuY3Rpb24gVWQoKXtyZXR1cm4gTkN9Y29uc3QgV2Q9dD0+e2NvbnN0e2RhdGE6ZSxwYXRoOm4sZXJyb3JNYXBzOnIsaXNzdWVEYXRhOml9PXQsbz1bLi4ubiwuLi5pLnBhdGh8fFtdXSxsPXsuLi5pLHBhdGg6b307bGV0IHM9IiI7Y29uc3QgYT1yLmZpbHRlcih1PT4hIXUpLnNsaWNlKCkucmV2ZXJzZSgpO2Zvcihjb25zdCB1IG9mIGEpcz11KGwse2RhdGE6ZSxkZWZhdWx0RXJyb3I6c30pLm1lc3NhZ2U7cmV0dXJuey4uLmkscGF0aDpvLG1lc3NhZ2U6aS5tZXNzYWdlfHxzfX0scE09W107ZnVuY3Rpb24gcSh0LGUpe2NvbnN0IG49V2Qoe2lzc3VlRGF0YTplLGRhdGE6dC5kYXRhLHBhdGg6dC5wYXRoLGVycm9yTWFwczpbdC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLHQuc2NoZW1hRXJyb3JNYXAsVWQoKSxwdV0uZmlsdGVyKHI9PiEhcil9KTt0LmNvbW1vbi5pc3N1ZXMucHVzaChuKX1jbGFzcyBvbntjb25zdHJ1Y3Rvcigpe3RoaXMudmFsdWU9InZhbGlkIn1kaXJ0eSgpe3RoaXMudmFsdWU9PT0idmFsaWQiJiYodGhpcy52YWx1ZT0iZGlydHkiKX1hYm9ydCgpe3RoaXMudmFsdWUhPT0iYWJvcnRlZCImJih0aGlzLnZhbHVlPSJhYm9ydGVkIil9c3RhdGljIG1lcmdlQXJyYXkoZSxuKXtjb25zdCByPVtdO2Zvcihjb25zdCBpIG9mIG4pe2lmKGkuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiB2ZTtpLnN0YXR1cz09PSJkaXJ0eSImJmUuZGlydHkoKSxyLnB1c2goaS52YWx1ZSl9cmV0dXJue3N0YXR1czplLnZhbHVlLHZhbHVlOnJ9fXN0YXRpYyBhc3luYyBtZXJnZU9iamVjdEFzeW5jKGUsbil7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBuKXIucHVzaCh7a2V5OmF3YWl0IGkua2V5LHZhbHVlOmF3YWl0IGkudmFsdWV9KTtyZXR1cm4gb24ubWVyZ2VPYmplY3RTeW5jKGUscil9c3RhdGljIG1lcmdlT2JqZWN0U3luYyhlLG4pe2NvbnN0IHI9e307Zm9yKGNvbnN0IGkgb2Ygbil7Y29uc3R7a2V5Om8sdmFsdWU6bH09aTtpZihvLnN0YXR1cz09PSJhYm9ydGVkInx8bC5zdGF0dXM9PT0iYWJvcnRlZCIpcmV0dXJuIHZlO28uc3RhdHVzPT09ImRpcnR5IiYmZS5kaXJ0eSgpLGwuc3RhdHVzPT09ImRpcnR5IiYmZS5kaXJ0eSgpLG8udmFsdWUhPT0iX19wcm90b19fIiYmKHR5cGVvZiBsLnZhbHVlPCJ1Inx8aS5hbHdheXNTZXQpJiYocltvLnZhbHVlXT1sLnZhbHVlKX1yZXR1cm57c3RhdHVzOmUudmFsdWUsdmFsdWU6cn19fWNvbnN0IHZlPU9iamVjdC5mcmVlemUoe3N0YXR1czoiYWJvcnRlZCJ9KSxSQz10PT4oe3N0YXR1czoiZGlydHkiLHZhbHVlOnR9KSx5bj10PT4oe3N0YXR1czoidmFsaWQiLHZhbHVlOnR9KSxqbT10PT50LnN0YXR1cz09PSJhYm9ydGVkIix6bT10PT50LnN0YXR1cz09PSJkaXJ0eSIsbXU9dD0+dC5zdGF0dXM9PT0idmFsaWQiLFZkPXQ9PnR5cGVvZiBQcm9taXNlPCJ1IiYmdCBpbnN0YW5jZW9mIFByb21pc2U7dmFyIGNlOyhmdW5jdGlvbih0KXt0LmVyclRvT2JqPWU9PnR5cGVvZiBlPT0ic3RyaW5nIj97bWVzc2FnZTplfTplfHx7fSx0LnRvU3RyaW5nPWU9PnR5cGVvZiBlPT0ic3RyaW5nIj9lOmU9PW51bGw/dm9pZCAwOmUubWVzc2FnZX0pKGNlfHwoY2U9e30pKTtjbGFzcyBLcntjb25zdHJ1Y3RvcihlLG4scixpKXt0aGlzLl9jYWNoZWRQYXRoPVtdLHRoaXMucGFyZW50PWUsdGhpcy5kYXRhPW4sdGhpcy5fcGF0aD1yLHRoaXMuX2tleT1pfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2NhY2hlZFBhdGgubGVuZ3RofHwodGhpcy5fa2V5IGluc3RhbmNlb2YgQXJyYXk/dGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsLi4udGhpcy5fa2V5KTp0aGlzLl9jYWNoZWRQYXRoLnB1c2goLi4udGhpcy5fcGF0aCx0aGlzLl9rZXkpKSx0aGlzLl9jYWNoZWRQYXRofX1jb25zdCBPeD0odCxlKT0+e2lmKG11KGUpKXJldHVybntzdWNjZXNzOiEwLGRhdGE6ZS52YWx1ZX07aWYoIXQuY29tbW9uLmlzc3Vlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGZhaWxlZCBidXQgbm8gaXNzdWVzIGRldGVjdGVkLiIpO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe2lmKHRoaXMuX2Vycm9yKXJldHVybiB0aGlzLl9lcnJvcjtjb25zdCBuPW5ldyBDcih0LmNvbW1vbi5pc3N1ZXMpO3JldHVybiB0aGlzLl9lcnJvcj1uLHRoaXMuX2Vycm9yfX19O2Z1bmN0aW9uIHdlKHQpe2lmKCF0KXJldHVybnt9O2NvbnN0e2Vycm9yTWFwOmUsaW52YWxpZF90eXBlX2Vycm9yOm4scmVxdWlyZWRfZXJyb3I6cixkZXNjcmlwdGlvbjppfT10O2lmKGUmJihufHxyKSl0aHJvdyBuZXcgRXJyb3IoYENhbid0IHVzZSAiaW52YWxpZF90eXBlX2Vycm9yIiBvciAicmVxdWlyZWRfZXJyb3IiIGluIGNvbmp1bmN0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1hcC5gKTtyZXR1cm4gZT97ZXJyb3JNYXA6ZSxkZXNjcmlwdGlvbjppfTp7ZXJyb3JNYXA6KGwscyk9PmwuY29kZSE9PSJpbnZhbGlkX3R5cGUiP3ttZXNzYWdlOnMuZGVmYXVsdEVycm9yfTp0eXBlb2Ygcy5kYXRhPiJ1Ij97bWVzc2FnZTpyPz9zLmRlZmF1bHRFcnJvcn06e21lc3NhZ2U6bj8/cy5kZWZhdWx0RXJyb3J9LGRlc2NyaXB0aW9uOml9fWNsYXNzIENle2NvbnN0cnVjdG9yKGUpe3RoaXMuc3BhPXRoaXMuc2FmZVBhcnNlQXN5bmMsdGhpcy5fZGVmPWUsdGhpcy5wYXJzZT10aGlzLnBhcnNlLmJpbmQodGhpcyksdGhpcy5zYWZlUGFyc2U9dGhpcy5zYWZlUGFyc2UuYmluZCh0aGlzKSx0aGlzLnBhcnNlQXN5bmM9dGhpcy5wYXJzZUFzeW5jLmJpbmQodGhpcyksdGhpcy5zYWZlUGFyc2VBc3luYz10aGlzLnNhZmVQYXJzZUFzeW5jLmJpbmQodGhpcyksdGhpcy5zcGE9dGhpcy5zcGEuYmluZCh0aGlzKSx0aGlzLnJlZmluZT10aGlzLnJlZmluZS5iaW5kKHRoaXMpLHRoaXMucmVmaW5lbWVudD10aGlzLnJlZmluZW1lbnQuYmluZCh0aGlzKSx0aGlzLnN1cGVyUmVmaW5lPXRoaXMuc3VwZXJSZWZpbmUuYmluZCh0aGlzKSx0aGlzLm9wdGlvbmFsPXRoaXMub3B0aW9uYWwuYmluZCh0aGlzKSx0aGlzLm51bGxhYmxlPXRoaXMubnVsbGFibGUuYmluZCh0aGlzKSx0aGlzLm51bGxpc2g9dGhpcy5udWxsaXNoLmJpbmQodGhpcyksdGhpcy5hcnJheT10aGlzLmFycmF5LmJpbmQodGhpcyksdGhpcy5wcm9taXNlPXRoaXMucHJvbWlzZS5iaW5kKHRoaXMpLHRoaXMub3I9dGhpcy5vci5iaW5kKHRoaXMpLHRoaXMuYW5kPXRoaXMuYW5kLmJpbmQodGhpcyksdGhpcy50cmFuc2Zvcm09dGhpcy50cmFuc2Zvcm0uYmluZCh0aGlzKSx0aGlzLmJyYW5kPXRoaXMuYnJhbmQuYmluZCh0aGlzKSx0aGlzLmRlZmF1bHQ9dGhpcy5kZWZhdWx0LmJpbmQodGhpcyksdGhpcy5jYXRjaD10aGlzLmNhdGNoLmJpbmQodGhpcyksdGhpcy5kZXNjcmliZT10aGlzLmRlc2NyaWJlLmJpbmQodGhpcyksdGhpcy5waXBlPXRoaXMucGlwZS5iaW5kKHRoaXMpLHRoaXMucmVhZG9ubHk9dGhpcy5yZWFkb25seS5iaW5kKHRoaXMpLHRoaXMuaXNOdWxsYWJsZT10aGlzLmlzTnVsbGFibGUuYmluZCh0aGlzKSx0aGlzLmlzT3B0aW9uYWw9dGhpcy5pc09wdGlvbmFsLmJpbmQodGhpcyl9Z2V0IGRlc2NyaXB0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZi5kZXNjcmlwdGlvbn1fZ2V0VHlwZShlKXtyZXR1cm4gV2koZS5kYXRhKX1fZ2V0T3JSZXR1cm5DdHgoZSxuKXtyZXR1cm4gbnx8e2NvbW1vbjplLnBhcmVudC5jb21tb24sZGF0YTplLmRhdGEscGFyc2VkVHlwZTpXaShlLmRhdGEpLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXRoOmUucGF0aCxwYXJlbnQ6ZS5wYXJlbnR9fV9wcm9jZXNzSW5wdXRQYXJhbXMoZSl7cmV0dXJue3N0YXR1czpuZXcgb24sY3R4Ontjb21tb246ZS5wYXJlbnQuY29tbW9uLGRhdGE6ZS5kYXRhLHBhcnNlZFR5cGU6V2koZS5kYXRhKSxzY2hlbWFFcnJvck1hcDp0aGlzLl9kZWYuZXJyb3JNYXAscGF0aDplLnBhdGgscGFyZW50OmUucGFyZW50fX19X3BhcnNlU3luYyhlKXtjb25zdCBuPXRoaXMuX3BhcnNlKGUpO2lmKFZkKG4pKXRocm93IG5ldyBFcnJvcigiU3luY2hyb25vdXMgcGFyc2UgZW5jb3VudGVyZWQgcHJvbWlzZS4iKTtyZXR1cm4gbn1fcGFyc2VBc3luYyhlKXtjb25zdCBuPXRoaXMuX3BhcnNlKGUpO3JldHVybiBQcm9taXNlLnJlc29sdmUobil9cGFyc2UoZSxuKXtjb25zdCByPXRoaXMuc2FmZVBhcnNlKGUsbik7aWYoci5zdWNjZXNzKXJldHVybiByLmRhdGE7dGhyb3cgci5lcnJvcn1zYWZlUGFyc2UoZSxuKXt2YXIgcjtjb25zdCBpPXtjb21tb246e2lzc3VlczpbXSxhc3luYzoocj1uPT1udWxsP3ZvaWQgMDpuLmFzeW5jKSE9PW51bGwmJnIhPT12b2lkIDA/cjohMSxjb250ZXh0dWFsRXJyb3JNYXA6bj09bnVsbD92b2lkIDA6bi5lcnJvck1hcH0scGF0aDoobj09bnVsbD92b2lkIDA6bi5wYXRoKXx8W10sc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhcmVudDpudWxsLGRhdGE6ZSxwYXJzZWRUeXBlOldpKGUpfSxvPXRoaXMuX3BhcnNlU3luYyh7ZGF0YTplLHBhdGg6aS5wYXRoLHBhcmVudDppfSk7cmV0dXJuIE94KGksbyl9YXN5bmMgcGFyc2VBc3luYyhlLG4pe2NvbnN0IHI9YXdhaXQgdGhpcy5zYWZlUGFyc2VBc3luYyhlLG4pO2lmKHIuc3VjY2VzcylyZXR1cm4gci5kYXRhO3Rocm93IHIuZXJyb3J9YXN5bmMgc2FmZVBhcnNlQXN5bmMoZSxuKXtjb25zdCByPXtjb21tb246e2lzc3VlczpbXSxjb250ZXh0dWFsRXJyb3JNYXA6bj09bnVsbD92b2lkIDA6bi5lcnJvck1hcCxhc3luYzohMH0scGF0aDoobj09bnVsbD92b2lkIDA6bi5wYXRoKXx8W10sc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhcmVudDpudWxsLGRhdGE6ZSxwYXJzZWRUeXBlOldpKGUpfSxpPXRoaXMuX3BhcnNlKHtkYXRhOmUscGF0aDpyLnBhdGgscGFyZW50OnJ9KSxvPWF3YWl0KFZkKGkpP2k6UHJvbWlzZS5yZXNvbHZlKGkpKTtyZXR1cm4gT3gocixvKX1yZWZpbmUoZSxuKXtjb25zdCByPWk9PnR5cGVvZiBuPT0ic3RyaW5nInx8dHlwZW9mIG4+InUiP3ttZXNzYWdlOm59OnR5cGVvZiBuPT0iZnVuY3Rpb24iP24oaSk6bjtyZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgoaSxvKT0+e2NvbnN0IGw9ZShpKSxzPSgpPT5vLmFkZElzc3VlKHtjb2RlOlcuY3VzdG9tLC4uLnIoaSl9KTtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZsIGluc3RhbmNlb2YgUHJvbWlzZT9sLnRoZW4oYT0+YT8hMDoocygpLCExKSk6bD8hMDoocygpLCExKX0pfXJlZmluZW1lbnQoZSxuKXtyZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgocixpKT0+ZShyKT8hMDooaS5hZGRJc3N1ZSh0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKHIsaSk6biksITEpKX1fcmVmaW5lbWVudChlKXtyZXR1cm4gbmV3IFRyKHtzY2hlbWE6dGhpcyx0eXBlTmFtZTpkZS5ab2RFZmZlY3RzLGVmZmVjdDp7dHlwZToicmVmaW5lbWVudCIscmVmaW5lbWVudDplfX0pfXN1cGVyUmVmaW5lKGUpe3JldHVybiB0aGlzLl9yZWZpbmVtZW50KGUpfW9wdGlvbmFsKCl7cmV0dXJuIGRpLmNyZWF0ZSh0aGlzLHRoaXMuX2RlZil9bnVsbGFibGUoKXtyZXR1cm4gcmwuY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1udWxsaXNoKCl7cmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpfWFycmF5KCl7cmV0dXJuIGtyLmNyZWF0ZSh0aGlzLHRoaXMuX2RlZil9cHJvbWlzZSgpe3JldHVybiB5cy5jcmVhdGUodGhpcyx0aGlzLl9kZWYpfW9yKGUpe3JldHVybiB4dS5jcmVhdGUoW3RoaXMsZV0sdGhpcy5fZGVmKX1hbmQoZSl7cmV0dXJuIF91LmNyZWF0ZSh0aGlzLGUsdGhpcy5fZGVmKX10cmFuc2Zvcm0oZSl7cmV0dXJuIG5ldyBUcih7Li4ud2UodGhpcy5fZGVmKSxzY2hlbWE6dGhpcyx0eXBlTmFtZTpkZS5ab2RFZmZlY3RzLGVmZmVjdDp7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX19KX1kZWZhdWx0KGUpe2NvbnN0IG49dHlwZW9mIGU9PSJmdW5jdGlvbiI/ZTooKT0+ZTtyZXR1cm4gbmV3IGt1KHsuLi53ZSh0aGlzLl9kZWYpLGlubmVyVHlwZTp0aGlzLGRlZmF1bHRWYWx1ZTpuLHR5cGVOYW1lOmRlLlpvZERlZmF1bHR9KX1icmFuZCgpe3JldHVybiBuZXcgUEMoe3R5cGVOYW1lOmRlLlpvZEJyYW5kZWQsdHlwZTp0aGlzLC4uLndlKHRoaXMuX2RlZil9KX1jYXRjaChlKXtjb25zdCBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6KCk9PmU7cmV0dXJuIG5ldyBHZCh7Li4ud2UodGhpcy5fZGVmKSxpbm5lclR5cGU6dGhpcyxjYXRjaFZhbHVlOm4sdHlwZU5hbWU6ZGUuWm9kQ2F0Y2h9KX1kZXNjcmliZShlKXtjb25zdCBuPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBuKHsuLi50aGlzLl9kZWYsZGVzY3JpcHRpb246ZX0pfXBpcGUoZSl7cmV0dXJuIFZ1LmNyZWF0ZSh0aGlzLGUpfXJlYWRvbmx5KCl7cmV0dXJuIFhkLmNyZWF0ZSh0aGlzKX1pc09wdGlvbmFsKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKHZvaWQgMCkuc3VjY2Vzc31pc051bGxhYmxlKCl7cmV0dXJuIHRoaXMuc2FmZVBhcnNlKG51bGwpLnN1Y2Nlc3N9fWNvbnN0IG1NPS9eY1teXHMtXXs4LH0kL2ksZ009L15bYS16XVthLXowLTldKiQvLHZNPS9eWzAtOUEtSEpLTU5QLVRWLVpdezI2fSQvLHlNPS9eWzAtOWEtZkEtRl17OH1cYi1bMC05YS1mQS1GXXs0fVxiLVswLTlhLWZBLUZdezR9XGItWzAtOWEtZkEtRl17NH1cYi1bMC05YS1mQS1GXXsxMn0kL2kseE09L14oPyFcLikoPyEuKlwuXC4pKFtBLVowLTlfKy1cLl0qKVtBLVowLTlfKy1dQChbQS1aMC05XVtBLVowLTlcLV0qXC4pK1tBLVpdezIsfSQvaSxfTT0iXihcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfXxcXHB7RW1vamlfQ29tcG9uZW50fSkrJCI7bGV0IFVoO2NvbnN0IHdNPS9eKCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkkLyxTTT0vXigoW2EtZjAtOV17MSw0fTopezd9fDo6KFthLWYwLTldezEsNH06KXswLDZ9fChbYS1mMC05XXsxLDR9Oil7MX06KFthLWYwLTldezEsNH06KXswLDV9fChbYS1mMC05XXsxLDR9Oil7Mn06KFthLWYwLTldezEsNH06KXswLDR9fChbYS1mMC05XXsxLDR9Oil7M306KFthLWYwLTldezEsNH06KXswLDN9fChbYS1mMC05XXsxLDR9Oil7NH06KFthLWYwLTldezEsNH06KXswLDJ9fChbYS1mMC05XXsxLDR9Oil7NX06KFthLWYwLTldezEsNH06KXswLDF9KShbYS1mMC05XXsxLDR9fCgoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKSQvLEVNPXQ9PnQucHJlY2lzaW9uP3Qub2Zmc2V0P25ldyBSZWdFeHAoYF5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcLlxcZHske3QucHJlY2lzaW9ufX0oKFsrLV1cXGR7Mn0oOj9cXGR7Mn0pPyl8WikkYCk6bmV3IFJlZ0V4cChgXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9XFwuXFxkeyR7dC5wcmVjaXNpb259fVokYCk6dC5wcmVjaXNpb249PT0wP3Qub2Zmc2V0P25ldyBSZWdFeHAoIl5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSgoWystXVxcZHsyfSg6P1xcZHsyfSk/KXxaKSQiKTpuZXcgUmVnRXhwKCJeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn1aJCIpOnQub2Zmc2V0P25ldyBSZWdFeHAoIl5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGQrKT8oKFsrLV1cXGR7Mn0oOj9cXGR7Mn0pPyl8WikkIik6bmV3IFJlZ0V4cCgiXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KFxcLlxcZCspP1okIik7ZnVuY3Rpb24gQ00odCxlKXtyZXR1cm4hISgoZT09PSJ2NCJ8fCFlKSYmd00udGVzdCh0KXx8KGU9PT0idjYifHwhZSkmJlNNLnRlc3QodCkpfWNsYXNzIHdyIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2RlZi5jb2VyY2UmJihlLmRhdGE9U3RyaW5nKGUuZGF0YSkpLHRoaXMuX2dldFR5cGUoZSkhPT1KLnN0cmluZyl7Y29uc3Qgbz10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShvLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkouc3RyaW5nLHJlY2VpdmVkOm8ucGFyc2VkVHlwZX0pLHZlfWNvbnN0IHI9bmV3IG9uO2xldCBpO2Zvcihjb25zdCBvIG9mIHRoaXMuX2RlZi5jaGVja3MpaWYoby5raW5kPT09Im1pbiIpZS5kYXRhLmxlbmd0aDxvLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOm8udmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoby5raW5kPT09Im1heCIpZS5kYXRhLmxlbmd0aD5vLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7Y29kZTpXLnRvb19iaWcsbWF4aW11bTpvLnZhbHVlLHR5cGU6InN0cmluZyIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJsZW5ndGgiKXtjb25zdCBsPWUuZGF0YS5sZW5ndGg+by52YWx1ZSxzPWUuZGF0YS5sZW5ndGg8by52YWx1ZTsobHx8cykmJihpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksbD9xKGkse2NvZGU6Vy50b29fYmlnLG1heGltdW06by52YWx1ZSx0eXBlOiJzdHJpbmciLGluY2x1c2l2ZTohMCxleGFjdDohMCxtZXNzYWdlOm8ubWVzc2FnZX0pOnMmJnEoaSx7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOm8udmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpfWVsc2UgaWYoby5raW5kPT09ImVtYWlsIil4TS50ZXN0KGUuZGF0YSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSkscShpLHt2YWxpZGF0aW9uOiJlbWFpbCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJlbW9qaSIpVWh8fChVaD1uZXcgUmVnRXhwKF9NLCJ1IikpLFVoLnRlc3QoZS5kYXRhKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxxKGkse3ZhbGlkYXRpb246ImVtb2ppIixjb2RlOlcuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoby5raW5kPT09InV1aWQiKXlNLnRlc3QoZS5kYXRhKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxxKGkse3ZhbGlkYXRpb246InV1aWQiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0iY3VpZCIpbU0udGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoiY3VpZCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJjdWlkMiIpZ00udGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoiY3VpZDIiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0idWxpZCIpdk0udGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoidWxpZCIsY29kZTpXLmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJ1cmwiKXRyeXtuZXcgVVJMKGUuZGF0YSl9Y2F0Y2h7aT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoidXJsIixjb2RlOlcuaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCl9ZWxzZSBvLmtpbmQ9PT0icmVnZXgiPyhvLnJlZ2V4Lmxhc3RJbmRleD0wLG8ucmVnZXgudGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoicmVnZXgiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSkpOm8ua2luZD09PSJ0cmltIj9lLmRhdGE9ZS5kYXRhLnRyaW0oKTpvLmtpbmQ9PT0iaW5jbHVkZXMiP2UuZGF0YS5pbmNsdWRlcyhvLnZhbHVlLG8ucG9zaXRpb24pfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7Y29kZTpXLmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246e2luY2x1ZGVzOm8udmFsdWUscG9zaXRpb246by5wb3NpdGlvbn0sbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpOm8ua2luZD09PSJ0b0xvd2VyQ2FzZSI/ZS5kYXRhPWUuZGF0YS50b0xvd2VyQ2FzZSgpOm8ua2luZD09PSJ0b1VwcGVyQ2FzZSI/ZS5kYXRhPWUuZGF0YS50b1VwcGVyQ2FzZSgpOm8ua2luZD09PSJzdGFydHNXaXRoIj9lLmRhdGEuc3RhcnRzV2l0aChvLnZhbHVlKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxxKGkse2NvZGU6Vy5pbnZhbGlkX3N0cmluZyx2YWxpZGF0aW9uOntzdGFydHNXaXRoOm8udmFsdWV9LG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTpvLmtpbmQ9PT0iZW5kc1dpdGgiP2UuZGF0YS5lbmRzV2l0aChvLnZhbHVlKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxxKGkse2NvZGU6Vy5pbnZhbGlkX3N0cmluZyx2YWxpZGF0aW9uOntlbmRzV2l0aDpvLnZhbHVlfSxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk6by5raW5kPT09ImRhdGV0aW1lIj9FTShvKS50ZXN0KGUuZGF0YSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSkscShpLHtjb2RlOlcuaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjoiZGF0ZXRpbWUiLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTpvLmtpbmQ9PT0iaXAiP0NNKGUuZGF0YSxvLnZlcnNpb24pfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7dmFsaWRhdGlvbjoiaXAiLGNvZGU6Vy5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk6RGUuYXNzZXJ0TmV2ZXIobyk7cmV0dXJue3N0YXR1czpyLnZhbHVlLHZhbHVlOmUuZGF0YX19X3JlZ2V4KGUsbixyKXtyZXR1cm4gdGhpcy5yZWZpbmVtZW50KGk9PmUudGVzdChpKSx7dmFsaWRhdGlvbjpuLGNvZGU6Vy5pbnZhbGlkX3N0cmluZywuLi5jZS5lcnJUb09iaihyKX0pfV9hZGRDaGVjayhlKXtyZXR1cm4gbmV3IHdyKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLGVdfSl9ZW1haWwoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJlbWFpbCIsLi4uY2UuZXJyVG9PYmooZSl9KX11cmwoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJ1cmwiLC4uLmNlLmVyclRvT2JqKGUpfSl9ZW1vamkoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJlbW9qaSIsLi4uY2UuZXJyVG9PYmooZSl9KX11dWlkKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoidXVpZCIsLi4uY2UuZXJyVG9PYmooZSl9KX1jdWlkKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiY3VpZCIsLi4uY2UuZXJyVG9PYmooZSl9KX1jdWlkMihlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImN1aWQyIiwuLi5jZS5lcnJUb09iaihlKX0pfXVsaWQoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJ1bGlkIiwuLi5jZS5lcnJUb09iaihlKX0pfWlwKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiaXAiLC4uLmNlLmVyclRvT2JqKGUpfSl9ZGF0ZXRpbWUoZSl7dmFyIG47cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj90aGlzLl9hZGRDaGVjayh7a2luZDoiZGF0ZXRpbWUiLHByZWNpc2lvbjpudWxsLG9mZnNldDohMSxtZXNzYWdlOmV9KTp0aGlzLl9hZGRDaGVjayh7a2luZDoiZGF0ZXRpbWUiLHByZWNpc2lvbjp0eXBlb2YoZT09bnVsbD92b2lkIDA6ZS5wcmVjaXNpb24pPiJ1Ij9udWxsOmU9PW51bGw/dm9pZCAwOmUucHJlY2lzaW9uLG9mZnNldDoobj1lPT1udWxsP3ZvaWQgMDplLm9mZnNldCkhPT1udWxsJiZuIT09dm9pZCAwP246ITEsLi4uY2UuZXJyVG9PYmooZT09bnVsbD92b2lkIDA6ZS5tZXNzYWdlKX0pfXJlZ2V4KGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJyZWdleCIscmVnZXg6ZSwuLi5jZS5lcnJUb09iaihuKX0pfWluY2x1ZGVzKGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJpbmNsdWRlcyIsdmFsdWU6ZSxwb3NpdGlvbjpuPT1udWxsP3ZvaWQgMDpuLnBvc2l0aW9uLC4uLmNlLmVyclRvT2JqKG49PW51bGw/dm9pZCAwOm4ubWVzc2FnZSl9KX1zdGFydHNXaXRoKGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJzdGFydHNXaXRoIix2YWx1ZTplLC4uLmNlLmVyclRvT2JqKG4pfSl9ZW5kc1dpdGgoZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImVuZHNXaXRoIix2YWx1ZTplLC4uLmNlLmVyclRvT2JqKG4pfSl9bWluKGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOmUsLi4uY2UuZXJyVG9PYmoobil9KX1tYXgoZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1heCIsdmFsdWU6ZSwuLi5jZS5lcnJUb09iaihuKX0pfWxlbmd0aChlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibGVuZ3RoIix2YWx1ZTplLC4uLmNlLmVyclRvT2JqKG4pfSl9bm9uZW1wdHkoZSl7cmV0dXJuIHRoaXMubWluKDEsY2UuZXJyVG9PYmooZSkpfXRyaW0oKXtyZXR1cm4gbmV3IHdyKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHtraW5kOiJ0cmltIn1dfSl9dG9Mb3dlckNhc2UoKXtyZXR1cm4gbmV3IHdyKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLHtraW5kOiJ0b0xvd2VyQ2FzZSJ9XX0pfXRvVXBwZXJDYXNlKCl7cmV0dXJuIG5ldyB3cih7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDoidG9VcHBlckNhc2UifV19KX1nZXQgaXNEYXRldGltZSgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJkYXRldGltZSIpfWdldCBpc0VtYWlsKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09ImVtYWlsIil9Z2V0IGlzVVJMKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09InVybCIpfWdldCBpc0Vtb2ppKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09ImVtb2ppIil9Z2V0IGlzVVVJRCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJ1dWlkIil9Z2V0IGlzQ1VJRCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJjdWlkIil9Z2V0IGlzQ1VJRDIoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0iY3VpZDIiKX1nZXQgaXNVTElEKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09InVsaWQiKX1nZXQgaXNJUCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJpcCIpfWdldCBtaW5MZW5ndGgoKXtsZXQgZT1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1pbiImJihlPT09bnVsbHx8bi52YWx1ZT5lKSYmKGU9bi52YWx1ZSk7cmV0dXJuIGV9Z2V0IG1heExlbmd0aCgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWF4IiYmKGU9PT1udWxsfHxuLnZhbHVlPGUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZX19d3IuY3JlYXRlPXQ9Pnt2YXIgZTtyZXR1cm4gbmV3IHdyKHtjaGVja3M6W10sdHlwZU5hbWU6ZGUuWm9kU3RyaW5nLGNvZXJjZTooZT10PT1udWxsP3ZvaWQgMDp0LmNvZXJjZSkhPT1udWxsJiZlIT09dm9pZCAwP2U6ITEsLi4ud2UodCl9KX07ZnVuY3Rpb24ga00odCxlKXtjb25zdCBuPSh0LnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXXx8IiIpLmxlbmd0aCxyPShlLnRvU3RyaW5nKCkuc3BsaXQoIi4iKVsxXXx8IiIpLmxlbmd0aCxpPW4+cj9uOnIsbz1wYXJzZUludCh0LnRvRml4ZWQoaSkucmVwbGFjZSgiLiIsIiIpKSxsPXBhcnNlSW50KGUudG9GaXhlZChpKS5yZXBsYWNlKCIuIiwiIikpO3JldHVybiBvJWwvTWF0aC5wb3coMTAsaSl9Y2xhc3MgaG8gZXh0ZW5kcyBDZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5taW49dGhpcy5ndGUsdGhpcy5tYXg9dGhpcy5sdGUsdGhpcy5zdGVwPXRoaXMubXVsdGlwbGVPZn1fcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT1OdW1iZXIoZS5kYXRhKSksdGhpcy5fZ2V0VHlwZShlKSE9PUoubnVtYmVyKXtjb25zdCBvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBxKG8se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5udW1iZXIscmVjZWl2ZWQ6by5wYXJzZWRUeXBlfSksdmV9bGV0IHI7Y29uc3QgaT1uZXcgb247Zm9yKGNvbnN0IG8gb2YgdGhpcy5fZGVmLmNoZWNrcylvLmtpbmQ9PT0iaW50Ij9EZS5pc0ludGVnZXIoZS5kYXRhKXx8KHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxyKSxxKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6ImludGVnZXIiLHJlY2VpdmVkOiJmbG9hdCIsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtaW4iPyhvLmluY2x1c2l2ZT9lLmRhdGE8by52YWx1ZTplLmRhdGE8PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLHEocix7Y29kZTpXLnRvb19zbWFsbCxtaW5pbXVtOm8udmFsdWUsdHlwZToibnVtYmVyIixpbmNsdXNpdmU6by5pbmNsdXNpdmUsZXhhY3Q6ITEsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtYXgiPyhvLmluY2x1c2l2ZT9lLmRhdGE+by52YWx1ZTplLmRhdGE+PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLHEocix7Y29kZTpXLnRvb19iaWcsbWF4aW11bTpvLnZhbHVlLHR5cGU6Im51bWJlciIsaW5jbHVzaXZlOm8uaW5jbHVzaXZlLGV4YWN0OiExLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpvLmtpbmQ9PT0ibXVsdGlwbGVPZiI/a00oZS5kYXRhLG8udmFsdWUpIT09MCYmKHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxyKSxxKHIse2NvZGU6Vy5ub3RfbXVsdGlwbGVfb2YsbXVsdGlwbGVPZjpvLnZhbHVlLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpvLmtpbmQ9PT0iZmluaXRlIj9OdW1iZXIuaXNGaW5pdGUoZS5kYXRhKXx8KHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxyKSxxKHIse2NvZGU6Vy5ub3RfZmluaXRlLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpEZS5hc3NlcnROZXZlcihvKTtyZXR1cm57c3RhdHVzOmkudmFsdWUsdmFsdWU6ZS5kYXRhfX1ndGUoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIixlLCEwLGNlLnRvU3RyaW5nKG4pKX1ndChlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtaW4iLGUsITEsY2UudG9TdHJpbmcobikpfWx0ZShlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLGUsITAsY2UudG9TdHJpbmcobikpfWx0KGUsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1heCIsZSwhMSxjZS50b1N0cmluZyhuKSl9c2V0TGltaXQoZSxuLHIsaSl7cmV0dXJuIG5ldyBobyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDplLHZhbHVlOm4saW5jbHVzaXZlOnIsbWVzc2FnZTpjZS50b1N0cmluZyhpKX1dfSl9X2FkZENoZWNrKGUpe3JldHVybiBuZXcgaG8oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3MsZV19KX1pbnQoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJpbnQiLG1lc3NhZ2U6Y2UudG9TdHJpbmcoZSl9KX1wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6MCxpbmNsdXNpdmU6ITEsbWVzc2FnZTpjZS50b1N0cmluZyhlKX0pfW5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTowLGluY2x1c2l2ZTohMSxtZXNzYWdlOmNlLnRvU3RyaW5nKGUpfSl9bm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOjAsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6Y2UudG9TdHJpbmcoZSl9KX1ub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6MCxpbmNsdXNpdmU6ITAsbWVzc2FnZTpjZS50b1N0cmluZyhlKX0pfW11bHRpcGxlT2YoZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im11bHRpcGxlT2YiLHZhbHVlOmUsbWVzc2FnZTpjZS50b1N0cmluZyhuKX0pfWZpbml0ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImZpbml0ZSIsbWVzc2FnZTpjZS50b1N0cmluZyhlKX0pfXNhZmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLGluY2x1c2l2ZTohMCx2YWx1ZTpOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixtZXNzYWdlOmNlLnRvU3RyaW5nKGUpfSkuX2FkZENoZWNrKHtraW5kOiJtYXgiLGluY2x1c2l2ZTohMCx2YWx1ZTpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtZXNzYWdlOmNlLnRvU3RyaW5nKGUpfSl9Z2V0IG1pblZhbHVlKCl7bGV0IGU9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtaW4iJiYoZT09PW51bGx8fG4udmFsdWU+ZSkmJihlPW4udmFsdWUpO3JldHVybiBlfWdldCBtYXhWYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWF4IiYmKGU9PT1udWxsfHxuLnZhbHVlPGUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZX1nZXQgaXNJbnQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0iaW50Inx8ZS5raW5kPT09Im11bHRpcGxlT2YiJiZEZS5pc0ludGVnZXIoZS52YWx1ZSkpfWdldCBpc0Zpbml0ZSgpe2xldCBlPW51bGwsbj1udWxsO2Zvcihjb25zdCByIG9mIHRoaXMuX2RlZi5jaGVja3Mpe2lmKHIua2luZD09PSJmaW5pdGUifHxyLmtpbmQ9PT0iaW50Inx8ci5raW5kPT09Im11bHRpcGxlT2YiKXJldHVybiEwO3Iua2luZD09PSJtaW4iPyhuPT09bnVsbHx8ci52YWx1ZT5uKSYmKG49ci52YWx1ZSk6ci5raW5kPT09Im1heCImJihlPT09bnVsbHx8ci52YWx1ZTxlKSYmKGU9ci52YWx1ZSl9cmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSYmTnVtYmVyLmlzRmluaXRlKGUpfX1oby5jcmVhdGU9dD0+bmV3IGhvKHtjaGVja3M6W10sdHlwZU5hbWU6ZGUuWm9kTnVtYmVyLGNvZXJjZToodD09bnVsbD92b2lkIDA6dC5jb2VyY2UpfHwhMSwuLi53ZSh0KX0pO2NsYXNzIHBvIGV4dGVuZHMgQ2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWluPXRoaXMuZ3RlLHRoaXMubWF4PXRoaXMubHRlfV9wYXJzZShlKXtpZih0aGlzLl9kZWYuY29lcmNlJiYoZS5kYXRhPUJpZ0ludChlLmRhdGEpKSx0aGlzLl9nZXRUeXBlKGUpIT09Si5iaWdpbnQpe2NvbnN0IG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIHEobyx7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLmJpZ2ludCxyZWNlaXZlZDpvLnBhcnNlZFR5cGV9KSx2ZX1sZXQgcjtjb25zdCBpPW5ldyBvbjtmb3IoY29uc3QgbyBvZiB0aGlzLl9kZWYuY2hlY2tzKW8ua2luZD09PSJtaW4iPyhvLmluY2x1c2l2ZT9lLmRhdGE8by52YWx1ZTplLmRhdGE8PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLHEocix7Y29kZTpXLnRvb19zbWFsbCx0eXBlOiJiaWdpbnQiLG1pbmltdW06by52YWx1ZSxpbmNsdXNpdmU6by5pbmNsdXNpdmUsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtYXgiPyhvLmluY2x1c2l2ZT9lLmRhdGE+by52YWx1ZTplLmRhdGE+PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLHEocix7Y29kZTpXLnRvb19iaWcsdHlwZToiYmlnaW50IixtYXhpbXVtOm8udmFsdWUsaW5jbHVzaXZlOm8uaW5jbHVzaXZlLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpvLmtpbmQ9PT0ibXVsdGlwbGVPZiI/ZS5kYXRhJW8udmFsdWUhPT1CaWdJbnQoMCkmJihyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUscikscShyLHtjb2RlOlcubm90X211bHRpcGxlX29mLG11bHRpcGxlT2Y6by52YWx1ZSxtZXNzYWdlOm8ubWVzc2FnZX0pLGkuZGlydHkoKSk6RGUuYXNzZXJ0TmV2ZXIobyk7cmV0dXJue3N0YXR1czppLnZhbHVlLHZhbHVlOmUuZGF0YX19Z3RlKGUsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1pbiIsZSwhMCxjZS50b1N0cmluZyhuKSl9Z3QoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIixlLCExLGNlLnRvU3RyaW5nKG4pKX1sdGUoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWF4IixlLCEwLGNlLnRvU3RyaW5nKG4pKX1sdChlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLGUsITEsY2UudG9TdHJpbmcobikpfXNldExpbWl0KGUsbixyLGkpe3JldHVybiBuZXcgcG8oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3Mse2tpbmQ6ZSx2YWx1ZTpuLGluY2x1c2l2ZTpyLG1lc3NhZ2U6Y2UudG9TdHJpbmcoaSl9XX0pfV9hZGRDaGVjayhlKXtyZXR1cm4gbmV3IHBvKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLGVdfSl9cG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITEsbWVzc2FnZTpjZS50b1N0cmluZyhlKX0pfW5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTpCaWdJbnQoMCksaW5jbHVzaXZlOiExLG1lc3NhZ2U6Y2UudG9TdHJpbmcoZSl9KX1ub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1heCIsdmFsdWU6QmlnSW50KDApLGluY2x1c2l2ZTohMCxtZXNzYWdlOmNlLnRvU3RyaW5nKGUpfSl9bm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITAsbWVzc2FnZTpjZS50b1N0cmluZyhlKX0pfW11bHRpcGxlT2YoZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im11bHRpcGxlT2YiLHZhbHVlOmUsbWVzc2FnZTpjZS50b1N0cmluZyhuKX0pfWdldCBtaW5WYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWluIiYmKGU9PT1udWxsfHxuLnZhbHVlPmUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZX1nZXQgbWF4VmFsdWUoKXtsZXQgZT1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1heCImJihlPT09bnVsbHx8bi52YWx1ZTxlKSYmKGU9bi52YWx1ZSk7cmV0dXJuIGV9fXBvLmNyZWF0ZT10PT57dmFyIGU7cmV0dXJuIG5ldyBwbyh7Y2hlY2tzOltdLHR5cGVOYW1lOmRlLlpvZEJpZ0ludCxjb2VyY2U6KGU9dD09bnVsbD92b2lkIDA6dC5jb2VyY2UpIT09bnVsbCYmZSE9PXZvaWQgMD9lOiExLC4uLndlKHQpfSl9O2NsYXNzIGd1IGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2RlZi5jb2VyY2UmJihlLmRhdGE9ISFlLmRhdGEpLHRoaXMuX2dldFR5cGUoZSkhPT1KLmJvb2xlYW4pe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIHEocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLmJvb2xlYW4scmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksdmV9cmV0dXJuIHluKGUuZGF0YSl9fWd1LmNyZWF0ZT10PT5uZXcgZ3Uoe3R5cGVOYW1lOmRlLlpvZEJvb2xlYW4sY29lcmNlOih0PT1udWxsP3ZvaWQgMDp0LmNvZXJjZSl8fCExLC4uLndlKHQpfSk7Y2xhc3MgdGwgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT1uZXcgRGF0ZShlLmRhdGEpKSx0aGlzLl9nZXRUeXBlKGUpIT09Si5kYXRlKXtjb25zdCBvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBxKG8se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5kYXRlLHJlY2VpdmVkOm8ucGFyc2VkVHlwZX0pLHZlfWlmKGlzTmFOKGUuZGF0YS5nZXRUaW1lKCkpKXtjb25zdCBvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBxKG8se2NvZGU6Vy5pbnZhbGlkX2RhdGV9KSx2ZX1jb25zdCByPW5ldyBvbjtsZXQgaTtmb3IoY29uc3QgbyBvZiB0aGlzLl9kZWYuY2hlY2tzKW8ua2luZD09PSJtaW4iP2UuZGF0YS5nZXRUaW1lKCk8by52YWx1ZSYmKGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxxKGkse2NvZGU6Vy50b29fc21hbGwsbWVzc2FnZTpvLm1lc3NhZ2UsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1pbmltdW06by52YWx1ZSx0eXBlOiJkYXRlIn0pLHIuZGlydHkoKSk6by5raW5kPT09Im1heCI/ZS5kYXRhLmdldFRpbWUoKT5vLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLHEoaSx7Y29kZTpXLnRvb19iaWcsbWVzc2FnZTpvLm1lc3NhZ2UsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1heGltdW06by52YWx1ZSx0eXBlOiJkYXRlIn0pLHIuZGlydHkoKSk6RGUuYXNzZXJ0TmV2ZXIobyk7cmV0dXJue3N0YXR1czpyLnZhbHVlLHZhbHVlOm5ldyBEYXRlKGUuZGF0YS5nZXRUaW1lKCkpfX1fYWRkQ2hlY2soZSl7cmV0dXJuIG5ldyB0bCh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyxlXX0pfW1pbihlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWluIix2YWx1ZTplLmdldFRpbWUoKSxtZXNzYWdlOmNlLnRvU3RyaW5nKG4pfSl9bWF4KGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOmUuZ2V0VGltZSgpLG1lc3NhZ2U6Y2UudG9TdHJpbmcobil9KX1nZXQgbWluRGF0ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWluIiYmKGU9PT1udWxsfHxuLnZhbHVlPmUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZSE9bnVsbD9uZXcgRGF0ZShlKTpudWxsfWdldCBtYXhEYXRlKCl7bGV0IGU9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtYXgiJiYoZT09PW51bGx8fG4udmFsdWU8ZSkmJihlPW4udmFsdWUpO3JldHVybiBlIT1udWxsP25ldyBEYXRlKGUpOm51bGx9fXRsLmNyZWF0ZT10PT5uZXcgdGwoe2NoZWNrczpbXSxjb2VyY2U6KHQ9PW51bGw/dm9pZCAwOnQuY29lcmNlKXx8ITEsdHlwZU5hbWU6ZGUuWm9kRGF0ZSwuLi53ZSh0KX0pO2NsYXNzIEhkIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2dldFR5cGUoZSkhPT1KLnN5bWJvbCl7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkouc3ltYm9sLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlfXJldHVybiB5bihlLmRhdGEpfX1IZC5jcmVhdGU9dD0+bmV3IEhkKHt0eXBlTmFtZTpkZS5ab2RTeW1ib2wsLi4ud2UodCl9KTtjbGFzcyB2dSBleHRlbmRzIENle19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09Si51bmRlZmluZWQpe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIHEocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLnVuZGVmaW5lZCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZX1yZXR1cm4geW4oZS5kYXRhKX19dnUuY3JlYXRlPXQ9Pm5ldyB2dSh7dHlwZU5hbWU6ZGUuWm9kVW5kZWZpbmVkLC4uLndlKHQpfSk7Y2xhc3MgeXUgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZ2V0VHlwZShlKSE9PUoubnVsbCl7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkoubnVsbCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZX1yZXR1cm4geW4oZS5kYXRhKX19eXUuY3JlYXRlPXQ9Pm5ldyB5dSh7dHlwZU5hbWU6ZGUuWm9kTnVsbCwuLi53ZSh0KX0pO2NsYXNzIHZzIGV4dGVuZHMgQ2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2FueT0hMH1fcGFyc2UoZSl7cmV0dXJuIHluKGUuZGF0YSl9fXZzLmNyZWF0ZT10PT5uZXcgdnMoe3R5cGVOYW1lOmRlLlpvZEFueSwuLi53ZSh0KX0pO2NsYXNzIFdvIGV4dGVuZHMgQ2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3Vua25vd249ITB9X3BhcnNlKGUpe3JldHVybiB5bihlLmRhdGEpfX1Xby5jcmVhdGU9dD0+bmV3IFdvKHt0eXBlTmFtZTpkZS5ab2RVbmtub3duLC4uLndlKHQpfSk7Y2xhc3MgZ2kgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3Qgbj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShuLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkoubmV2ZXIscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmV9fWdpLmNyZWF0ZT10PT5uZXcgZ2koe3R5cGVOYW1lOmRlLlpvZE5ldmVyLC4uLndlKHQpfSk7Y2xhc3MgS2QgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZ2V0VHlwZShlKSE9PUoudW5kZWZpbmVkKXtjb25zdCByPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBxKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si52b2lkLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlfXJldHVybiB5bihlLmRhdGEpfX1LZC5jcmVhdGU9dD0+bmV3IEtkKHt0eXBlTmFtZTpkZS5ab2RWb2lkLC4uLndlKHQpfSk7Y2xhc3Mga3IgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3R7Y3R4Om4sc3RhdHVzOnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxpPXRoaXMuX2RlZjtpZihuLnBhcnNlZFR5cGUhPT1KLmFycmF5KXJldHVybiBxKG4se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5hcnJheSxyZWNlaXZlZDpuLnBhcnNlZFR5cGV9KSx2ZTtpZihpLmV4YWN0TGVuZ3RoIT09bnVsbCl7Y29uc3QgbD1uLmRhdGEubGVuZ3RoPmkuZXhhY3RMZW5ndGgudmFsdWUscz1uLmRhdGEubGVuZ3RoPGkuZXhhY3RMZW5ndGgudmFsdWU7KGx8fHMpJiYocShuLHtjb2RlOmw/Vy50b29fYmlnOlcudG9vX3NtYWxsLG1pbmltdW06cz9pLmV4YWN0TGVuZ3RoLnZhbHVlOnZvaWQgMCxtYXhpbXVtOmw/aS5leGFjdExlbmd0aC52YWx1ZTp2b2lkIDAsdHlwZToiYXJyYXkiLGluY2x1c2l2ZTohMCxleGFjdDohMCxtZXNzYWdlOmkuZXhhY3RMZW5ndGgubWVzc2FnZX0pLHIuZGlydHkoKSl9aWYoaS5taW5MZW5ndGghPT1udWxsJiZuLmRhdGEubGVuZ3RoPGkubWluTGVuZ3RoLnZhbHVlJiYocShuLHtjb2RlOlcudG9vX3NtYWxsLG1pbmltdW06aS5taW5MZW5ndGgudmFsdWUsdHlwZToiYXJyYXkiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOmkubWluTGVuZ3RoLm1lc3NhZ2V9KSxyLmRpcnR5KCkpLGkubWF4TGVuZ3RoIT09bnVsbCYmbi5kYXRhLmxlbmd0aD5pLm1heExlbmd0aC52YWx1ZSYmKHEobix7Y29kZTpXLnRvb19iaWcsbWF4aW11bTppLm1heExlbmd0aC52YWx1ZSx0eXBlOiJhcnJheSIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6aS5tYXhMZW5ndGgubWVzc2FnZX0pLHIuZGlydHkoKSksbi5jb21tb24uYXN5bmMpcmV0dXJuIFByb21pc2UuYWxsKFsuLi5uLmRhdGFdLm1hcCgobCxzKT0+aS50eXBlLl9wYXJzZUFzeW5jKG5ldyBLcihuLGwsbi5wYXRoLHMpKSkpLnRoZW4obD0+b24ubWVyZ2VBcnJheShyLGwpKTtjb25zdCBvPVsuLi5uLmRhdGFdLm1hcCgobCxzKT0+aS50eXBlLl9wYXJzZVN5bmMobmV3IEtyKG4sbCxuLnBhdGgscykpKTtyZXR1cm4gb24ubWVyZ2VBcnJheShyLG8pfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RlZi50eXBlfW1pbihlLG4pe3JldHVybiBuZXcga3Ioey4uLnRoaXMuX2RlZixtaW5MZW5ndGg6e3ZhbHVlOmUsbWVzc2FnZTpjZS50b1N0cmluZyhuKX19KX1tYXgoZSxuKXtyZXR1cm4gbmV3IGtyKHsuLi50aGlzLl9kZWYsbWF4TGVuZ3RoOnt2YWx1ZTplLG1lc3NhZ2U6Y2UudG9TdHJpbmcobil9fSl9bGVuZ3RoKGUsbil7cmV0dXJuIG5ldyBrcih7Li4udGhpcy5fZGVmLGV4YWN0TGVuZ3RoOnt2YWx1ZTplLG1lc3NhZ2U6Y2UudG9TdHJpbmcobil9fSl9bm9uZW1wdHkoZSl7cmV0dXJuIHRoaXMubWluKDEsZSl9fWtyLmNyZWF0ZT0odCxlKT0+bmV3IGtyKHt0eXBlOnQsbWluTGVuZ3RoOm51bGwsbWF4TGVuZ3RoOm51bGwsZXhhY3RMZW5ndGg6bnVsbCx0eXBlTmFtZTpkZS5ab2RBcnJheSwuLi53ZShlKX0pO2Z1bmN0aW9uIE5sKHQpe2lmKHQgaW5zdGFuY2VvZiBjdCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBpbiB0LnNoYXBlKXtjb25zdCByPXQuc2hhcGVbbl07ZVtuXT1kaS5jcmVhdGUoTmwocikpfXJldHVybiBuZXcgY3Qoey4uLnQuX2RlZixzaGFwZTooKT0+ZX0pfWVsc2UgcmV0dXJuIHQgaW5zdGFuY2VvZiBrcj9uZXcga3Ioey4uLnQuX2RlZix0eXBlOk5sKHQuZWxlbWVudCl9KTp0IGluc3RhbmNlb2YgZGk/ZGkuY3JlYXRlKE5sKHQudW53cmFwKCkpKTp0IGluc3RhbmNlb2Ygcmw/cmwuY3JlYXRlKE5sKHQudW53cmFwKCkpKTp0IGluc3RhbmNlb2YgWnI/WnIuY3JlYXRlKHQuaXRlbXMubWFwKGU9Pk5sKGUpKSk6dH1jbGFzcyBjdCBleHRlbmRzIENle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9jYWNoZWQ9bnVsbCx0aGlzLm5vbnN0cmljdD10aGlzLnBhc3N0aHJvdWdoLHRoaXMuYXVnbWVudD10aGlzLmV4dGVuZH1fZ2V0Q2FjaGVkKCl7aWYodGhpcy5fY2FjaGVkIT09bnVsbClyZXR1cm4gdGhpcy5fY2FjaGVkO2NvbnN0IGU9dGhpcy5fZGVmLnNoYXBlKCksbj1EZS5vYmplY3RLZXlzKGUpO3JldHVybiB0aGlzLl9jYWNoZWQ9e3NoYXBlOmUsa2V5czpufX1fcGFyc2UoZSl7aWYodGhpcy5fZ2V0VHlwZShlKSE9PUoub2JqZWN0KXtjb25zdCB1PXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBxKHUse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5vYmplY3QscmVjZWl2ZWQ6dS5wYXJzZWRUeXBlfSksdmV9Y29uc3R7c3RhdHVzOnIsY3R4Oml9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSx7c2hhcGU6byxrZXlzOmx9PXRoaXMuX2dldENhY2hlZCgpLHM9W107aWYoISh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBnaSYmdGhpcy5fZGVmLnVua25vd25LZXlzPT09InN0cmlwIikpZm9yKGNvbnN0IHUgaW4gaS5kYXRhKWwuaW5jbHVkZXModSl8fHMucHVzaCh1KTtjb25zdCBhPVtdO2Zvcihjb25zdCB1IG9mIGwpe2NvbnN0IGM9b1t1XSxkPWkuZGF0YVt1XTthLnB1c2goe2tleTp7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6dX0sdmFsdWU6Yy5fcGFyc2UobmV3IEtyKGksZCxpLnBhdGgsdSkpLGFsd2F5c1NldDp1IGluIGkuZGF0YX0pfWlmKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIGdpKXtjb25zdCB1PXRoaXMuX2RlZi51bmtub3duS2V5cztpZih1PT09InBhc3N0aHJvdWdoIilmb3IoY29uc3QgYyBvZiBzKWEucHVzaCh7a2V5OntzdGF0dXM6InZhbGlkIix2YWx1ZTpjfSx2YWx1ZTp7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6aS5kYXRhW2NdfX0pO2Vsc2UgaWYodT09PSJzdHJpY3QiKXMubGVuZ3RoPjAmJihxKGkse2NvZGU6Vy51bnJlY29nbml6ZWRfa2V5cyxrZXlzOnN9KSxyLmRpcnR5KCkpO2Vsc2UgaWYodSE9PSJzdHJpcCIpdGhyb3cgbmV3IEVycm9yKCJJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuIil9ZWxzZXtjb25zdCB1PXRoaXMuX2RlZi5jYXRjaGFsbDtmb3IoY29uc3QgYyBvZiBzKXtjb25zdCBkPWkuZGF0YVtjXTthLnB1c2goe2tleTp7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6Y30sdmFsdWU6dS5fcGFyc2UobmV3IEtyKGksZCxpLnBhdGgsYykpLGFsd2F5c1NldDpjIGluIGkuZGF0YX0pfX1yZXR1cm4gaS5jb21tb24uYXN5bmM/UHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT57Y29uc3QgdT1bXTtmb3IoY29uc3QgYyBvZiBhKXtjb25zdCBkPWF3YWl0IGMua2V5O3UucHVzaCh7a2V5OmQsdmFsdWU6YXdhaXQgYy52YWx1ZSxhbHdheXNTZXQ6Yy5hbHdheXNTZXR9KX1yZXR1cm4gdX0pLnRoZW4odT0+b24ubWVyZ2VPYmplY3RTeW5jKHIsdSkpOm9uLm1lcmdlT2JqZWN0U3luYyhyLGEpfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9kZWYuc2hhcGUoKX1zdHJpY3QoZSl7cmV0dXJuIGNlLmVyclRvT2JqLG5ldyBjdCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpY3QiLC4uLmUhPT12b2lkIDA/e2Vycm9yTWFwOihuLHIpPT57dmFyIGksbyxsLHM7Y29uc3QgYT0obD0obz0oaT10aGlzLl9kZWYpLmVycm9yTWFwKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8uY2FsbChpLG4scikubWVzc2FnZSkhPT1udWxsJiZsIT09dm9pZCAwP2w6ci5kZWZhdWx0RXJyb3I7cmV0dXJuIG4uY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyI/e21lc3NhZ2U6KHM9Y2UuZXJyVG9PYmooZSkubWVzc2FnZSkhPT1udWxsJiZzIT09dm9pZCAwP3M6YX06e21lc3NhZ2U6YX19fTp7fX0pfXN0cmlwKCl7cmV0dXJuIG5ldyBjdCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpcCJ9KX1wYXNzdGhyb3VnaCgpe3JldHVybiBuZXcgY3Qoey4uLnRoaXMuX2RlZix1bmtub3duS2V5czoicGFzc3Rocm91Z2gifSl9ZXh0ZW5kKGUpe3JldHVybiBuZXcgY3Qoey4uLnRoaXMuX2RlZixzaGFwZTooKT0+KHsuLi50aGlzLl9kZWYuc2hhcGUoKSwuLi5lfSl9KX1tZXJnZShlKXtyZXR1cm4gbmV3IGN0KHt1bmtub3duS2V5czplLl9kZWYudW5rbm93bktleXMsY2F0Y2hhbGw6ZS5fZGVmLmNhdGNoYWxsLHNoYXBlOigpPT4oey4uLnRoaXMuX2RlZi5zaGFwZSgpLC4uLmUuX2RlZi5zaGFwZSgpfSksdHlwZU5hbWU6ZGUuWm9kT2JqZWN0fSl9c2V0S2V5KGUsbil7cmV0dXJuIHRoaXMuYXVnbWVudCh7W2VdOm59KX1jYXRjaGFsbChlKXtyZXR1cm4gbmV3IGN0KHsuLi50aGlzLl9kZWYsY2F0Y2hhbGw6ZX0pfXBpY2soZSl7Y29uc3Qgbj17fTtyZXR1cm4gRGUub2JqZWN0S2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdJiZ0aGlzLnNoYXBlW3JdJiYobltyXT10aGlzLnNoYXBlW3JdKX0pLG5ldyBjdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9b21pdChlKXtjb25zdCBuPXt9O3JldHVybiBEZS5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2gocj0+e2Vbcl18fChuW3JdPXRoaXMuc2hhcGVbcl0pfSksbmV3IGN0KHsuLi50aGlzLl9kZWYsc2hhcGU6KCk9Pm59KX1kZWVwUGFydGlhbCgpe3JldHVybiBObCh0aGlzKX1wYXJ0aWFsKGUpe2NvbnN0IG49e307cmV0dXJuIERlLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaChyPT57Y29uc3QgaT10aGlzLnNoYXBlW3JdO2UmJiFlW3JdP25bcl09aTpuW3JdPWkub3B0aW9uYWwoKX0pLG5ldyBjdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9cmVxdWlyZWQoZSl7Y29uc3Qgbj17fTtyZXR1cm4gRGUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKHI9PntpZihlJiYhZVtyXSluW3JdPXRoaXMuc2hhcGVbcl07ZWxzZXtsZXQgbz10aGlzLnNoYXBlW3JdO2Zvcig7byBpbnN0YW5jZW9mIGRpOylvPW8uX2RlZi5pbm5lclR5cGU7bltyXT1vfX0pLG5ldyBjdCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9a2V5b2YoKXtyZXR1cm4gT0MoRGUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSl9fWN0LmNyZWF0ZT0odCxlKT0+bmV3IGN0KHtzaGFwZTooKT0+dCx1bmtub3duS2V5czoic3RyaXAiLGNhdGNoYWxsOmdpLmNyZWF0ZSgpLHR5cGVOYW1lOmRlLlpvZE9iamVjdCwuLi53ZShlKX0pO2N0LnN0cmljdENyZWF0ZT0odCxlKT0+bmV3IGN0KHtzaGFwZTooKT0+dCx1bmtub3duS2V5czoic3RyaWN0IixjYXRjaGFsbDpnaS5jcmVhdGUoKSx0eXBlTmFtZTpkZS5ab2RPYmplY3QsLi4ud2UoZSl9KTtjdC5sYXp5Y3JlYXRlPSh0LGUpPT5uZXcgY3Qoe3NoYXBlOnQsdW5rbm93bktleXM6InN0cmlwIixjYXRjaGFsbDpnaS5jcmVhdGUoKSx0eXBlTmFtZTpkZS5ab2RPYmplY3QsLi4ud2UoZSl9KTtjbGFzcyB4dSBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9dGhpcy5fZGVmLm9wdGlvbnM7ZnVuY3Rpb24gaShvKXtmb3IoY29uc3QgcyBvZiBvKWlmKHMucmVzdWx0LnN0YXR1cz09PSJ2YWxpZCIpcmV0dXJuIHMucmVzdWx0O2Zvcihjb25zdCBzIG9mIG8paWYocy5yZXN1bHQuc3RhdHVzPT09ImRpcnR5IilyZXR1cm4gbi5jb21tb24uaXNzdWVzLnB1c2goLi4ucy5jdHguY29tbW9uLmlzc3Vlcykscy5yZXN1bHQ7Y29uc3QgbD1vLm1hcChzPT5uZXcgQ3Iocy5jdHguY29tbW9uLmlzc3VlcykpO3JldHVybiBxKG4se2NvZGU6Vy5pbnZhbGlkX3VuaW9uLHVuaW9uRXJyb3JzOmx9KSx2ZX1pZihuLmNvbW1vbi5hc3luYylyZXR1cm4gUHJvbWlzZS5hbGwoci5tYXAoYXN5bmMgbz0+e2NvbnN0IGw9ey4uLm4sY29tbW9uOnsuLi5uLmNvbW1vbixpc3N1ZXM6W119LHBhcmVudDpudWxsfTtyZXR1cm57cmVzdWx0OmF3YWl0IG8uX3BhcnNlQXN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpsfSksY3R4Omx9fSkpLnRoZW4oaSk7e2xldCBvO2NvbnN0IGw9W107Zm9yKGNvbnN0IGEgb2Ygcil7Y29uc3QgdT17Li4ubixjb21tb246ey4uLm4uY29tbW9uLGlzc3VlczpbXX0scGFyZW50Om51bGx9LGM9YS5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6dX0pO2lmKGMuc3RhdHVzPT09InZhbGlkIilyZXR1cm4gYztjLnN0YXR1cz09PSJkaXJ0eSImJiFvJiYobz17cmVzdWx0OmMsY3R4OnV9KSx1LmNvbW1vbi5pc3N1ZXMubGVuZ3RoJiZsLnB1c2godS5jb21tb24uaXNzdWVzKX1pZihvKXJldHVybiBuLmNvbW1vbi5pc3N1ZXMucHVzaCguLi5vLmN0eC5jb21tb24uaXNzdWVzKSxvLnJlc3VsdDtjb25zdCBzPWwubWFwKGE9Pm5ldyBDcihhKSk7cmV0dXJuIHEobix7Y29kZTpXLmludmFsaWRfdW5pb24sdW5pb25FcnJvcnM6c30pLHZlfX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9kZWYub3B0aW9uc319eHUuY3JlYXRlPSh0LGUpPT5uZXcgeHUoe29wdGlvbnM6dCx0eXBlTmFtZTpkZS5ab2RVbmlvbiwuLi53ZShlKX0pO2NvbnN0IFpjPXQ9PnQgaW5zdGFuY2VvZiBTdT9aYyh0LnNjaGVtYSk6dCBpbnN0YW5jZW9mIFRyP1pjKHQuaW5uZXJUeXBlKCkpOnQgaW5zdGFuY2VvZiBFdT9bdC52YWx1ZV06dCBpbnN0YW5jZW9mIG1vP3Qub3B0aW9uczp0IGluc3RhbmNlb2YgQ3U/T2JqZWN0LmtleXModC5lbnVtKTp0IGluc3RhbmNlb2Yga3U/WmModC5fZGVmLmlubmVyVHlwZSk6dCBpbnN0YW5jZW9mIHZ1P1t2b2lkIDBdOnQgaW5zdGFuY2VvZiB5dT9bbnVsbF06bnVsbDtjbGFzcyB6ZiBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKG4ucGFyc2VkVHlwZSE9PUoub2JqZWN0KXJldHVybiBxKG4se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5vYmplY3QscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmU7Y29uc3Qgcj10aGlzLmRpc2NyaW1pbmF0b3IsaT1uLmRhdGFbcl0sbz10aGlzLm9wdGlvbnNNYXAuZ2V0KGkpO3JldHVybiBvP24uY29tbW9uLmFzeW5jP28uX3BhcnNlQXN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSk6by5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pOihxKG4se2NvZGU6Vy5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKHRoaXMub3B0aW9uc01hcC5rZXlzKCkpLHBhdGg6W3JdfSksdmUpfWdldCBkaXNjcmltaW5hdG9yKCl7cmV0dXJuIHRoaXMuX2RlZi5kaXNjcmltaW5hdG9yfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zfWdldCBvcHRpb25zTWFwKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zTWFwfXN0YXRpYyBjcmVhdGUoZSxuLHIpe2NvbnN0IGk9bmV3IE1hcDtmb3IoY29uc3QgbyBvZiBuKXtjb25zdCBsPVpjKG8uc2hhcGVbZV0pO2lmKCFsKXRocm93IG5ldyBFcnJvcihgQSBkaXNjcmltaW5hdG9yIHZhbHVlIGZvciBrZXkgXGAke2V9XGAgY291bGQgbm90IGJlIGV4dHJhY3RlZCBmcm9tIGFsbCBzY2hlbWEgb3B0aW9uc2ApO2Zvcihjb25zdCBzIG9mIGwpe2lmKGkuaGFzKHMpKXRocm93IG5ldyBFcnJvcihgRGlzY3JpbWluYXRvciBwcm9wZXJ0eSAke1N0cmluZyhlKX0gaGFzIGR1cGxpY2F0ZSB2YWx1ZSAke1N0cmluZyhzKX1gKTtpLnNldChzLG8pfX1yZXR1cm4gbmV3IHpmKHt0eXBlTmFtZTpkZS5ab2REaXNjcmltaW5hdGVkVW5pb24sZGlzY3JpbWluYXRvcjplLG9wdGlvbnM6bixvcHRpb25zTWFwOmksLi4ud2Uocil9KX19ZnVuY3Rpb24gRm0odCxlKXtjb25zdCBuPVdpKHQpLHI9V2koZSk7aWYodD09PWUpcmV0dXJue3ZhbGlkOiEwLGRhdGE6dH07aWYobj09PUoub2JqZWN0JiZyPT09Si5vYmplY3Qpe2NvbnN0IGk9RGUub2JqZWN0S2V5cyhlKSxvPURlLm9iamVjdEtleXModCkuZmlsdGVyKHM9PmkuaW5kZXhPZihzKSE9PS0xKSxsPXsuLi50LC4uLmV9O2Zvcihjb25zdCBzIG9mIG8pe2NvbnN0IGE9Rm0odFtzXSxlW3NdKTtpZighYS52YWxpZClyZXR1cm57dmFsaWQ6ITF9O2xbc109YS5kYXRhfXJldHVybnt2YWxpZDohMCxkYXRhOmx9fWVsc2UgaWYobj09PUouYXJyYXkmJnI9PT1KLmFycmF5KXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybnt2YWxpZDohMX07Y29uc3QgaT1bXTtmb3IobGV0IG89MDtvPHQubGVuZ3RoO28rKyl7Y29uc3QgbD10W29dLHM9ZVtvXSxhPUZtKGwscyk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExfTtpLnB1c2goYS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTppfX1lbHNlIHJldHVybiBuPT09Si5kYXRlJiZyPT09Si5kYXRlJiYrdD09K2U/e3ZhbGlkOiEwLGRhdGE6dH06e3ZhbGlkOiExfX1jbGFzcyBfdSBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLGk9KG8sbCk9PntpZihqbShvKXx8am0obCkpcmV0dXJuIHZlO2NvbnN0IHM9Rm0oby52YWx1ZSxsLnZhbHVlKTtyZXR1cm4gcy52YWxpZD8oKHptKG8pfHx6bShsKSkmJm4uZGlydHkoKSx7c3RhdHVzOm4udmFsdWUsdmFsdWU6cy5kYXRhfSk6KHEocix7Y29kZTpXLmludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzfSksdmUpfTtyZXR1cm4gci5jb21tb24uYXN5bmM/UHJvbWlzZS5hbGwoW3RoaXMuX2RlZi5sZWZ0Ll9wYXJzZUFzeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pLHRoaXMuX2RlZi5yaWdodC5fcGFyc2VBc3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KV0pLnRoZW4oKFtvLGxdKT0+aShvLGwpKTppKHRoaXMuX2RlZi5sZWZ0Ll9wYXJzZVN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSksdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZVN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkpfX1fdS5jcmVhdGU9KHQsZSxuKT0+bmV3IF91KHtsZWZ0OnQscmlnaHQ6ZSx0eXBlTmFtZTpkZS5ab2RJbnRlcnNlY3Rpb24sLi4ud2Uobil9KTtjbGFzcyBaciBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKHIucGFyc2VkVHlwZSE9PUouYXJyYXkpcmV0dXJuIHEocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLmFycmF5LHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlO2lmKHIuZGF0YS5sZW5ndGg8dGhpcy5fZGVmLml0ZW1zLmxlbmd0aClyZXR1cm4gcShyLHtjb2RlOlcudG9vX3NtYWxsLG1pbmltdW06dGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsdHlwZToiYXJyYXkifSksdmU7IXRoaXMuX2RlZi5yZXN0JiZyLmRhdGEubGVuZ3RoPnRoaXMuX2RlZi5pdGVtcy5sZW5ndGgmJihxKHIse2NvZGU6Vy50b29fYmlnLG1heGltdW06dGhpcy5fZGVmLml0ZW1zLmxlbmd0aCxpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsdHlwZToiYXJyYXkifSksbi5kaXJ0eSgpKTtjb25zdCBvPVsuLi5yLmRhdGFdLm1hcCgobCxzKT0+e2NvbnN0IGE9dGhpcy5fZGVmLml0ZW1zW3NdfHx0aGlzLl9kZWYucmVzdDtyZXR1cm4gYT9hLl9wYXJzZShuZXcgS3IocixsLHIucGF0aCxzKSk6bnVsbH0pLmZpbHRlcihsPT4hIWwpO3JldHVybiByLmNvbW1vbi5hc3luYz9Qcm9taXNlLmFsbChvKS50aGVuKGw9Pm9uLm1lcmdlQXJyYXkobixsKSk6b24ubWVyZ2VBcnJheShuLG8pfWdldCBpdGVtcygpe3JldHVybiB0aGlzLl9kZWYuaXRlbXN9cmVzdChlKXtyZXR1cm4gbmV3IFpyKHsuLi50aGlzLl9kZWYscmVzdDplfSl9fVpyLmNyZWF0ZT0odCxlKT0+e2lmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IG5ldyBFcnJvcigiWW91IG11c3QgcGFzcyBhbiBhcnJheSBvZiBzY2hlbWFzIHRvIHoudHVwbGUoWyAuLi4gXSkiKTtyZXR1cm4gbmV3IFpyKHtpdGVtczp0LHR5cGVOYW1lOmRlLlpvZFR1cGxlLHJlc3Q6bnVsbCwuLi53ZShlKX0pfTtjbGFzcyB3dSBleHRlbmRzIENle2dldCBrZXlTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLmtleVR5cGV9Z2V0IHZhbHVlU2NoZW1hKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9X3BhcnNlKGUpe2NvbnN0e3N0YXR1czpuLGN0eDpyfT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYoci5wYXJzZWRUeXBlIT09Si5vYmplY3QpcmV0dXJuIHEocix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLm9iamVjdCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZTtjb25zdCBpPVtdLG89dGhpcy5fZGVmLmtleVR5cGUsbD10aGlzLl9kZWYudmFsdWVUeXBlO2Zvcihjb25zdCBzIGluIHIuZGF0YSlpLnB1c2goe2tleTpvLl9wYXJzZShuZXcgS3IocixzLHIucGF0aCxzKSksdmFsdWU6bC5fcGFyc2UobmV3IEtyKHIsci5kYXRhW3NdLHIucGF0aCxzKSl9KTtyZXR1cm4gci5jb21tb24uYXN5bmM/b24ubWVyZ2VPYmplY3RBc3luYyhuLGkpOm9uLm1lcmdlT2JqZWN0U3luYyhuLGkpfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9c3RhdGljIGNyZWF0ZShlLG4scil7cmV0dXJuIG4gaW5zdGFuY2VvZiBDZT9uZXcgd3Uoe2tleVR5cGU6ZSx2YWx1ZVR5cGU6bix0eXBlTmFtZTpkZS5ab2RSZWNvcmQsLi4ud2Uocil9KTpuZXcgd3Uoe2tleVR5cGU6d3IuY3JlYXRlKCksdmFsdWVUeXBlOmUsdHlwZU5hbWU6ZGUuWm9kUmVjb3JkLC4uLndlKG4pfSl9fWNsYXNzIFpkIGV4dGVuZHMgQ2V7Z2V0IGtleVNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYua2V5VHlwZX1nZXQgdmFsdWVTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZX1fcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihyLnBhcnNlZFR5cGUhPT1KLm1hcClyZXR1cm4gcShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkoubWFwLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlO2NvbnN0IGk9dGhpcy5fZGVmLmtleVR5cGUsbz10aGlzLl9kZWYudmFsdWVUeXBlLGw9Wy4uLnIuZGF0YS5lbnRyaWVzKCldLm1hcCgoW3MsYV0sdSk9Pih7a2V5OmkuX3BhcnNlKG5ldyBLcihyLHMsci5wYXRoLFt1LCJrZXkiXSkpLHZhbHVlOm8uX3BhcnNlKG5ldyBLcihyLGEsci5wYXRoLFt1LCJ2YWx1ZSJdKSl9KSk7aWYoci5jb21tb24uYXN5bmMpe2NvbnN0IHM9bmV3IE1hcDtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT57Zm9yKGNvbnN0IGEgb2YgbCl7Y29uc3QgdT1hd2FpdCBhLmtleSxjPWF3YWl0IGEudmFsdWU7aWYodS5zdGF0dXM9PT0iYWJvcnRlZCJ8fGMuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiB2ZTsodS5zdGF0dXM9PT0iZGlydHkifHxjLnN0YXR1cz09PSJkaXJ0eSIpJiZuLmRpcnR5KCkscy5zZXQodS52YWx1ZSxjLnZhbHVlKX1yZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6c319KX1lbHNle2NvbnN0IHM9bmV3IE1hcDtmb3IoY29uc3QgYSBvZiBsKXtjb25zdCB1PWEua2V5LGM9YS52YWx1ZTtpZih1LnN0YXR1cz09PSJhYm9ydGVkInx8Yy5zdGF0dXM9PT0iYWJvcnRlZCIpcmV0dXJuIHZlOyh1LnN0YXR1cz09PSJkaXJ0eSJ8fGMuc3RhdHVzPT09ImRpcnR5IikmJm4uZGlydHkoKSxzLnNldCh1LnZhbHVlLGMudmFsdWUpfXJldHVybntzdGF0dXM6bi52YWx1ZSx2YWx1ZTpzfX19fVpkLmNyZWF0ZT0odCxlLG4pPT5uZXcgWmQoe3ZhbHVlVHlwZTplLGtleVR5cGU6dCx0eXBlTmFtZTpkZS5ab2RNYXAsLi4ud2Uobil9KTtjbGFzcyBubCBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKHIucGFyc2VkVHlwZSE9PUouc2V0KXJldHVybiBxKHIse2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5zZXQscmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksdmU7Y29uc3QgaT10aGlzLl9kZWY7aS5taW5TaXplIT09bnVsbCYmci5kYXRhLnNpemU8aS5taW5TaXplLnZhbHVlJiYocShyLHtjb2RlOlcudG9vX3NtYWxsLG1pbmltdW06aS5taW5TaXplLnZhbHVlLHR5cGU6InNldCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6aS5taW5TaXplLm1lc3NhZ2V9KSxuLmRpcnR5KCkpLGkubWF4U2l6ZSE9PW51bGwmJnIuZGF0YS5zaXplPmkubWF4U2l6ZS52YWx1ZSYmKHEocix7Y29kZTpXLnRvb19iaWcsbWF4aW11bTppLm1heFNpemUudmFsdWUsdHlwZToic2V0IixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTppLm1heFNpemUubWVzc2FnZX0pLG4uZGlydHkoKSk7Y29uc3Qgbz10aGlzLl9kZWYudmFsdWVUeXBlO2Z1bmN0aW9uIGwoYSl7Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBjIG9mIGEpe2lmKGMuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiB2ZTtjLnN0YXR1cz09PSJkaXJ0eSImJm4uZGlydHkoKSx1LmFkZChjLnZhbHVlKX1yZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6dX19Y29uc3Qgcz1bLi4uci5kYXRhLnZhbHVlcygpXS5tYXAoKGEsdSk9Pm8uX3BhcnNlKG5ldyBLcihyLGEsci5wYXRoLHUpKSk7cmV0dXJuIHIuY29tbW9uLmFzeW5jP1Byb21pc2UuYWxsKHMpLnRoZW4oYT0+bChhKSk6bChzKX1taW4oZSxuKXtyZXR1cm4gbmV3IG5sKHsuLi50aGlzLl9kZWYsbWluU2l6ZTp7dmFsdWU6ZSxtZXNzYWdlOmNlLnRvU3RyaW5nKG4pfX0pfW1heChlLG4pe3JldHVybiBuZXcgbmwoey4uLnRoaXMuX2RlZixtYXhTaXplOnt2YWx1ZTplLG1lc3NhZ2U6Y2UudG9TdHJpbmcobil9fSl9c2l6ZShlLG4pe3JldHVybiB0aGlzLm1pbihlLG4pLm1heChlLG4pfW5vbmVtcHR5KGUpe3JldHVybiB0aGlzLm1pbigxLGUpfX1ubC5jcmVhdGU9KHQsZSk9Pm5ldyBubCh7dmFsdWVUeXBlOnQsbWluU2l6ZTpudWxsLG1heFNpemU6bnVsbCx0eXBlTmFtZTpkZS5ab2RTZXQsLi4ud2UoZSl9KTtjbGFzcyBucyBleHRlbmRzIENle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnZhbGlkYXRlPXRoaXMuaW1wbGVtZW50fV9wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKG4ucGFyc2VkVHlwZSE9PUouZnVuY3Rpb24pcmV0dXJuIHEobix7Y29kZTpXLmludmFsaWRfdHlwZSxleHBlY3RlZDpKLmZ1bmN0aW9uLHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLHZlO2Z1bmN0aW9uIHIocyxhKXtyZXR1cm4gV2Qoe2RhdGE6cyxwYXRoOm4ucGF0aCxlcnJvck1hcHM6W24uY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxuLnNjaGVtYUVycm9yTWFwLFVkKCkscHVdLmZpbHRlcih1PT4hIXUpLGlzc3VlRGF0YTp7Y29kZTpXLmludmFsaWRfYXJndW1lbnRzLGFyZ3VtZW50c0Vycm9yOmF9fSl9ZnVuY3Rpb24gaShzLGEpe3JldHVybiBXZCh7ZGF0YTpzLHBhdGg6bi5wYXRoLGVycm9yTWFwczpbbi5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLG4uc2NoZW1hRXJyb3JNYXAsVWQoKSxwdV0uZmlsdGVyKHU9PiEhdSksaXNzdWVEYXRhOntjb2RlOlcuaW52YWxpZF9yZXR1cm5fdHlwZSxyZXR1cm5UeXBlRXJyb3I6YX19KX1jb25zdCBvPXtlcnJvck1hcDpuLmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXB9LGw9bi5kYXRhO2lmKHRoaXMuX2RlZi5yZXR1cm5zIGluc3RhbmNlb2YgeXMpe2NvbnN0IHM9dGhpcztyZXR1cm4geW4oYXN5bmMgZnVuY3Rpb24oLi4uYSl7Y29uc3QgdT1uZXcgQ3IoW10pLGM9YXdhaXQgcy5fZGVmLmFyZ3MucGFyc2VBc3luYyhhLG8pLmNhdGNoKGg9Pnt0aHJvdyB1LmFkZElzc3VlKHIoYSxoKSksdX0pLGQ9YXdhaXQgUmVmbGVjdC5hcHBseShsLHRoaXMsYyk7cmV0dXJuIGF3YWl0IHMuX2RlZi5yZXR1cm5zLl9kZWYudHlwZS5wYXJzZUFzeW5jKGQsbykuY2F0Y2goaD0+e3Rocm93IHUuYWRkSXNzdWUoaShkLGgpKSx1fSl9KX1lbHNle2NvbnN0IHM9dGhpcztyZXR1cm4geW4oZnVuY3Rpb24oLi4uYSl7Y29uc3QgdT1zLl9kZWYuYXJncy5zYWZlUGFyc2UoYSxvKTtpZighdS5zdWNjZXNzKXRocm93IG5ldyBDcihbcihhLHUuZXJyb3IpXSk7Y29uc3QgYz1SZWZsZWN0LmFwcGx5KGwsdGhpcyx1LmRhdGEpLGQ9cy5fZGVmLnJldHVybnMuc2FmZVBhcnNlKGMsbyk7aWYoIWQuc3VjY2Vzcyl0aHJvdyBuZXcgQ3IoW2koYyxkLmVycm9yKV0pO3JldHVybiBkLmRhdGF9KX19cGFyYW1ldGVycygpe3JldHVybiB0aGlzLl9kZWYuYXJnc31yZXR1cm5UeXBlKCl7cmV0dXJuIHRoaXMuX2RlZi5yZXR1cm5zfWFyZ3MoLi4uZSl7cmV0dXJuIG5ldyBucyh7Li4udGhpcy5fZGVmLGFyZ3M6WnIuY3JlYXRlKGUpLnJlc3QoV28uY3JlYXRlKCkpfSl9cmV0dXJucyhlKXtyZXR1cm4gbmV3IG5zKHsuLi50aGlzLl9kZWYscmV0dXJuczplfSl9aW1wbGVtZW50KGUpe3JldHVybiB0aGlzLnBhcnNlKGUpfXN0cmljdEltcGxlbWVudChlKXtyZXR1cm4gdGhpcy5wYXJzZShlKX1zdGF0aWMgY3JlYXRlKGUsbixyKXtyZXR1cm4gbmV3IG5zKHthcmdzOmV8fFpyLmNyZWF0ZShbXSkucmVzdChXby5jcmVhdGUoKSkscmV0dXJuczpufHxXby5jcmVhdGUoKSx0eXBlTmFtZTpkZS5ab2RGdW5jdGlvbiwuLi53ZShyKX0pfX1jbGFzcyBTdSBleHRlbmRzIENle2dldCBzY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLmdldHRlcigpfV9wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO3JldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCkuX3BhcnNlKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pfX1TdS5jcmVhdGU9KHQsZSk9Pm5ldyBTdSh7Z2V0dGVyOnQsdHlwZU5hbWU6ZGUuWm9kTGF6eSwuLi53ZShlKX0pO2NsYXNzIEV1IGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKGUuZGF0YSE9PXRoaXMuX2RlZi52YWx1ZSl7Y29uc3Qgbj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShuLHtyZWNlaXZlZDpuLmRhdGEsY29kZTpXLmludmFsaWRfbGl0ZXJhbCxleHBlY3RlZDp0aGlzLl9kZWYudmFsdWV9KSx2ZX1yZXR1cm57c3RhdHVzOiJ2YWxpZCIsdmFsdWU6ZS5kYXRhfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlfX1FdS5jcmVhdGU9KHQsZSk9Pm5ldyBFdSh7dmFsdWU6dCx0eXBlTmFtZTpkZS5ab2RMaXRlcmFsLC4uLndlKGUpfSk7ZnVuY3Rpb24gT0ModCxlKXtyZXR1cm4gbmV3IG1vKHt2YWx1ZXM6dCx0eXBlTmFtZTpkZS5ab2RFbnVtLC4uLndlKGUpfSl9Y2xhc3MgbW8gZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodHlwZW9mIGUuZGF0YSE9InN0cmluZyIpe2NvbnN0IG49dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSkscj10aGlzLl9kZWYudmFsdWVzO3JldHVybiBxKG4se2V4cGVjdGVkOkRlLmpvaW5WYWx1ZXMocikscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlLGNvZGU6Vy5pbnZhbGlkX3R5cGV9KSx2ZX1pZih0aGlzLl9kZWYudmFsdWVzLmluZGV4T2YoZS5kYXRhKT09PS0xKXtjb25zdCBuPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpLHI9dGhpcy5fZGVmLnZhbHVlcztyZXR1cm4gcShuLHtyZWNlaXZlZDpuLmRhdGEsY29kZTpXLmludmFsaWRfZW51bV92YWx1ZSxvcHRpb25zOnJ9KSx2ZX1yZXR1cm4geW4oZS5kYXRhKX1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9kZWYudmFsdWVzfWdldCBlbnVtKCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYudmFsdWVzKWVbbl09bjtyZXR1cm4gZX1nZXQgVmFsdWVzKCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYudmFsdWVzKWVbbl09bjtyZXR1cm4gZX1nZXQgRW51bSgpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLnZhbHVlcyllW25dPW47cmV0dXJuIGV9ZXh0cmFjdChlKXtyZXR1cm4gbW8uY3JlYXRlKGUpfWV4Y2x1ZGUoZSl7cmV0dXJuIG1vLmNyZWF0ZSh0aGlzLm9wdGlvbnMuZmlsdGVyKG49PiFlLmluY2x1ZGVzKG4pKSl9fW1vLmNyZWF0ZT1PQztjbGFzcyBDdSBleHRlbmRzIENle19wYXJzZShlKXtjb25zdCBuPURlLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKSxyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO2lmKHIucGFyc2VkVHlwZSE9PUouc3RyaW5nJiZyLnBhcnNlZFR5cGUhPT1KLm51bWJlcil7Y29uc3QgaT1EZS5vYmplY3RWYWx1ZXMobik7cmV0dXJuIHEocix7ZXhwZWN0ZWQ6RGUuam9pblZhbHVlcyhpKSxyZWNlaXZlZDpyLnBhcnNlZFR5cGUsY29kZTpXLmludmFsaWRfdHlwZX0pLHZlfWlmKG4uaW5kZXhPZihlLmRhdGEpPT09LTEpe2NvbnN0IGk9RGUub2JqZWN0VmFsdWVzKG4pO3JldHVybiBxKHIse3JlY2VpdmVkOnIuZGF0YSxjb2RlOlcuaW52YWxpZF9lbnVtX3ZhbHVlLG9wdGlvbnM6aX0pLHZlfXJldHVybiB5bihlLmRhdGEpfWdldCBlbnVtKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZXN9fUN1LmNyZWF0ZT0odCxlKT0+bmV3IEN1KHt2YWx1ZXM6dCx0eXBlTmFtZTpkZS5ab2ROYXRpdmVFbnVtLC4uLndlKGUpfSk7Y2xhc3MgeXMgZXh0ZW5kcyBDZXt1bndyYXAoKXtyZXR1cm4gdGhpcy5fZGVmLnR5cGV9X3BhcnNlKGUpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYobi5wYXJzZWRUeXBlIT09Si5wcm9taXNlJiZuLmNvbW1vbi5hc3luYz09PSExKXJldHVybiBxKG4se2NvZGU6Vy5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6Si5wcm9taXNlLHJlY2VpdmVkOm4ucGFyc2VkVHlwZX0pLHZlO2NvbnN0IHI9bi5wYXJzZWRUeXBlPT09Si5wcm9taXNlP24uZGF0YTpQcm9taXNlLnJlc29sdmUobi5kYXRhKTtyZXR1cm4geW4oci50aGVuKGk9PnRoaXMuX2RlZi50eXBlLnBhcnNlQXN5bmMoaSx7cGF0aDpuLnBhdGgsZXJyb3JNYXA6bi5jb21tb24uY29udGV4dHVhbEVycm9yTWFwfSkpKX19eXMuY3JlYXRlPSh0LGUpPT5uZXcgeXMoe3R5cGU6dCx0eXBlTmFtZTpkZS5ab2RQcm9taXNlLC4uLndlKGUpfSk7Y2xhc3MgVHIgZXh0ZW5kcyBDZXtpbm5lclR5cGUoKXtyZXR1cm4gdGhpcy5fZGVmLnNjaGVtYX1zb3VyY2VUeXBlKCl7cmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX2RlZi50eXBlTmFtZT09PWRlLlpvZEVmZmVjdHM/dGhpcy5fZGVmLnNjaGVtYS5zb3VyY2VUeXBlKCk6dGhpcy5fZGVmLnNjaGVtYX1fcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxpPXRoaXMuX2RlZi5lZmZlY3R8fG51bGwsbz17YWRkSXNzdWU6bD0+e3EocixsKSxsLmZhdGFsP24uYWJvcnQoKTpuLmRpcnR5KCl9LGdldCBwYXRoKCl7cmV0dXJuIHIucGF0aH19O2lmKG8uYWRkSXNzdWU9by5hZGRJc3N1ZS5iaW5kKG8pLGkudHlwZT09PSJwcmVwcm9jZXNzIil7Y29uc3QgbD1pLnRyYW5zZm9ybShyLmRhdGEsbyk7cmV0dXJuIHIuY29tbW9uLmlzc3Vlcy5sZW5ndGg/e3N0YXR1czoiZGlydHkiLHZhbHVlOnIuZGF0YX06ci5jb21tb24uYXN5bmM/UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4ocz0+dGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7ZGF0YTpzLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkpOnRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpsLHBhdGg6ci5wYXRoLHBhcmVudDpyfSl9aWYoaS50eXBlPT09InJlZmluZW1lbnQiKXtjb25zdCBsPXM9Pntjb25zdCBhPWkucmVmaW5lbWVudChzLG8pO2lmKHIuY29tbW9uLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoYSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyByZWZpbmVtZW50IGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLiIpO3JldHVybiBzfTtpZihyLmNvbW1vbi5hc3luYz09PSExKXtjb25zdCBzPXRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KTtyZXR1cm4gcy5zdGF0dXM9PT0iYWJvcnRlZCI/dmU6KHMuc3RhdHVzPT09ImRpcnR5IiYmbi5kaXJ0eSgpLGwocy52YWx1ZSkse3N0YXR1czpuLnZhbHVlLHZhbHVlOnMudmFsdWV9KX1lbHNlIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pLnRoZW4ocz0+cy5zdGF0dXM9PT0iYWJvcnRlZCI/dmU6KHMuc3RhdHVzPT09ImRpcnR5IiYmbi5kaXJ0eSgpLGwocy52YWx1ZSkudGhlbigoKT0+KHtzdGF0dXM6bi52YWx1ZSx2YWx1ZTpzLnZhbHVlfSkpKSl9aWYoaS50eXBlPT09InRyYW5zZm9ybSIpaWYoci5jb21tb24uYXN5bmM9PT0hMSl7Y29uc3QgbD10aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSk7aWYoIW11KGwpKXJldHVybiBsO2NvbnN0IHM9aS50cmFuc2Zvcm0obC52YWx1ZSxvKTtpZihzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jaHJvbm91cyB0cmFuc2Zvcm0gZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuIik7cmV0dXJue3N0YXR1czpuLnZhbHVlLHZhbHVlOnN9fWVsc2UgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkudGhlbihsPT5tdShsKT9Qcm9taXNlLnJlc29sdmUoaS50cmFuc2Zvcm0obC52YWx1ZSxvKSkudGhlbihzPT4oe3N0YXR1czpuLnZhbHVlLHZhbHVlOnN9KSk6bCk7RGUuYXNzZXJ0TmV2ZXIoaSl9fVRyLmNyZWF0ZT0odCxlLG4pPT5uZXcgVHIoe3NjaGVtYTp0LHR5cGVOYW1lOmRlLlpvZEVmZmVjdHMsZWZmZWN0OmUsLi4ud2Uobil9KTtUci5jcmVhdGVXaXRoUHJlcHJvY2Vzcz0odCxlLG4pPT5uZXcgVHIoe3NjaGVtYTplLGVmZmVjdDp7dHlwZToicHJlcHJvY2VzcyIsdHJhbnNmb3JtOnR9LHR5cGVOYW1lOmRlLlpvZEVmZmVjdHMsLi4ud2Uobil9KTtjbGFzcyBkaSBleHRlbmRzIENle19wYXJzZShlKXtyZXR1cm4gdGhpcy5fZ2V0VHlwZShlKT09PUoudW5kZWZpbmVkP3luKHZvaWQgMCk6dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoZSl9dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGV9fWRpLmNyZWF0ZT0odCxlKT0+bmV3IGRpKHtpbm5lclR5cGU6dCx0eXBlTmFtZTpkZS5ab2RPcHRpb25hbCwuLi53ZShlKX0pO2NsYXNzIHJsIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe3JldHVybiB0aGlzLl9nZXRUeXBlKGUpPT09Si5udWxsP3luKG51bGwpOnRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGUpfXVud3JhcCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX1ybC5jcmVhdGU9KHQsZSk9Pm5ldyBybCh7aW5uZXJUeXBlOnQsdHlwZU5hbWU6ZGUuWm9kTnVsbGFibGUsLi4ud2UoZSl9KTtjbGFzcyBrdSBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2xldCByPW4uZGF0YTtyZXR1cm4gbi5wYXJzZWRUeXBlPT09Si51bmRlZmluZWQmJihyPXRoaXMuX2RlZi5kZWZhdWx0VmFsdWUoKSksdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe2RhdGE6cixwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pfXJlbW92ZURlZmF1bHQoKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19a3UuY3JlYXRlPSh0LGUpPT5uZXcga3Uoe2lubmVyVHlwZTp0LHR5cGVOYW1lOmRlLlpvZERlZmF1bHQsZGVmYXVsdFZhbHVlOnR5cGVvZiBlLmRlZmF1bHQ9PSJmdW5jdGlvbiI/ZS5kZWZhdWx0OigpPT5lLmRlZmF1bHQsLi4ud2UoZSl9KTtjbGFzcyBHZCBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9ey4uLm4sY29tbW9uOnsuLi5uLmNvbW1vbixpc3N1ZXM6W119fSxpPXRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6ey4uLnJ9fSk7cmV0dXJuIFZkKGkpP2kudGhlbihvPT4oe3N0YXR1czoidmFsaWQiLHZhbHVlOm8uc3RhdHVzPT09InZhbGlkIj9vLnZhbHVlOnRoaXMuX2RlZi5jYXRjaFZhbHVlKHtnZXQgZXJyb3IoKXtyZXR1cm4gbmV3IENyKHIuY29tbW9uLmlzc3Vlcyl9LGlucHV0OnIuZGF0YX0pfSkpOntzdGF0dXM6InZhbGlkIix2YWx1ZTppLnN0YXR1cz09PSJ2YWxpZCI/aS52YWx1ZTp0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7Z2V0IGVycm9yKCl7cmV0dXJuIG5ldyBDcihyLmNvbW1vbi5pc3N1ZXMpfSxpbnB1dDpyLmRhdGF9KX19cmVtb3ZlQ2F0Y2goKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19R2QuY3JlYXRlPSh0LGUpPT5uZXcgR2Qoe2lubmVyVHlwZTp0LHR5cGVOYW1lOmRlLlpvZENhdGNoLGNhdGNoVmFsdWU6dHlwZW9mIGUuY2F0Y2g9PSJmdW5jdGlvbiI/ZS5jYXRjaDooKT0+ZS5jYXRjaCwuLi53ZShlKX0pO2NsYXNzIFlkIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2dldFR5cGUoZSkhPT1KLm5hbil7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gcShyLHtjb2RlOlcuaW52YWxpZF90eXBlLGV4cGVjdGVkOkoubmFuLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlfXJldHVybntzdGF0dXM6InZhbGlkIix2YWx1ZTplLmRhdGF9fX1ZZC5jcmVhdGU9dD0+bmV3IFlkKHt0eXBlTmFtZTpkZS5ab2ROYU4sLi4ud2UodCl9KTtjb25zdCBiTT1TeW1ib2woInpvZF9icmFuZCIpO2NsYXNzIFBDIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSkscj1uLmRhdGE7cmV0dXJuIHRoaXMuX2RlZi50eXBlLl9wYXJzZSh7ZGF0YTpyLHBhdGg6bi5wYXRoLHBhcmVudDpufSl9dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi50eXBlfX1jbGFzcyBWdSBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKHIuY29tbW9uLmFzeW5jKXJldHVybihhc3luYygpPT57Y29uc3Qgbz1hd2FpdCB0aGlzLl9kZWYuaW4uX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSk7cmV0dXJuIG8uc3RhdHVzPT09ImFib3J0ZWQiP3ZlOm8uc3RhdHVzPT09ImRpcnR5Ij8obi5kaXJ0eSgpLFJDKG8udmFsdWUpKTp0aGlzLl9kZWYub3V0Ll9wYXJzZUFzeW5jKHtkYXRhOm8udmFsdWUscGF0aDpyLnBhdGgscGFyZW50OnJ9KX0pKCk7e2NvbnN0IGk9dGhpcy5fZGVmLmluLl9wYXJzZVN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSk7cmV0dXJuIGkuc3RhdHVzPT09ImFib3J0ZWQiP3ZlOmkuc3RhdHVzPT09ImRpcnR5Ij8obi5kaXJ0eSgpLHtzdGF0dXM6ImRpcnR5Iix2YWx1ZTppLnZhbHVlfSk6dGhpcy5fZGVmLm91dC5fcGFyc2VTeW5jKHtkYXRhOmkudmFsdWUscGF0aDpyLnBhdGgscGFyZW50OnJ9KX19c3RhdGljIGNyZWF0ZShlLG4pe3JldHVybiBuZXcgVnUoe2luOmUsb3V0Om4sdHlwZU5hbWU6ZGUuWm9kUGlwZWxpbmV9KX19Y2xhc3MgWGQgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3Qgbj10aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShlKTtyZXR1cm4gbXUobikmJihuLnZhbHVlPU9iamVjdC5mcmVlemUobi52YWx1ZSkpLG59fVhkLmNyZWF0ZT0odCxlKT0+bmV3IFhkKHtpbm5lclR5cGU6dCx0eXBlTmFtZTpkZS5ab2RSZWFkb25seSwuLi53ZShlKX0pO2NvbnN0IEFDPSh0LGU9e30sbik9PnQ/dnMuY3JlYXRlKCkuc3VwZXJSZWZpbmUoKHIsaSk9Pnt2YXIgbyxsO2lmKCF0KHIpKXtjb25zdCBzPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2Uocik6dHlwZW9mIGU9PSJzdHJpbmciP3ttZXNzYWdlOmV9OmUsYT0obD0obz1zLmZhdGFsKSE9PW51bGwmJm8hPT12b2lkIDA/bzpuKSE9PW51bGwmJmwhPT12b2lkIDA/bDohMCx1PXR5cGVvZiBzPT0ic3RyaW5nIj97bWVzc2FnZTpzfTpzO2kuYWRkSXNzdWUoe2NvZGU6ImN1c3RvbSIsLi4udSxmYXRhbDphfSl9fSk6dnMuY3JlYXRlKCksJE09e29iamVjdDpjdC5sYXp5Y3JlYXRlfTt2YXIgZGU7KGZ1bmN0aW9uKHQpe3QuWm9kU3RyaW5nPSJab2RTdHJpbmciLHQuWm9kTnVtYmVyPSJab2ROdW1iZXIiLHQuWm9kTmFOPSJab2ROYU4iLHQuWm9kQmlnSW50PSJab2RCaWdJbnQiLHQuWm9kQm9vbGVhbj0iWm9kQm9vbGVhbiIsdC5ab2REYXRlPSJab2REYXRlIix0LlpvZFN5bWJvbD0iWm9kU3ltYm9sIix0LlpvZFVuZGVmaW5lZD0iWm9kVW5kZWZpbmVkIix0LlpvZE51bGw9IlpvZE51bGwiLHQuWm9kQW55PSJab2RBbnkiLHQuWm9kVW5rbm93bj0iWm9kVW5rbm93biIsdC5ab2ROZXZlcj0iWm9kTmV2ZXIiLHQuWm9kVm9pZD0iWm9kVm9pZCIsdC5ab2RBcnJheT0iWm9kQXJyYXkiLHQuWm9kT2JqZWN0PSJab2RPYmplY3QiLHQuWm9kVW5pb249IlpvZFVuaW9uIix0LlpvZERpc2NyaW1pbmF0ZWRVbmlvbj0iWm9kRGlzY3JpbWluYXRlZFVuaW9uIix0LlpvZEludGVyc2VjdGlvbj0iWm9kSW50ZXJzZWN0aW9uIix0LlpvZFR1cGxlPSJab2RUdXBsZSIsdC5ab2RSZWNvcmQ9IlpvZFJlY29yZCIsdC5ab2RNYXA9IlpvZE1hcCIsdC5ab2RTZXQ9IlpvZFNldCIsdC5ab2RGdW5jdGlvbj0iWm9kRnVuY3Rpb24iLHQuWm9kTGF6eT0iWm9kTGF6eSIsdC5ab2RMaXRlcmFsPSJab2RMaXRlcmFsIix0LlpvZEVudW09IlpvZEVudW0iLHQuWm9kRWZmZWN0cz0iWm9kRWZmZWN0cyIsdC5ab2ROYXRpdmVFbnVtPSJab2ROYXRpdmVFbnVtIix0LlpvZE9wdGlvbmFsPSJab2RPcHRpb25hbCIsdC5ab2ROdWxsYWJsZT0iWm9kTnVsbGFibGUiLHQuWm9kRGVmYXVsdD0iWm9kRGVmYXVsdCIsdC5ab2RDYXRjaD0iWm9kQ2F0Y2giLHQuWm9kUHJvbWlzZT0iWm9kUHJvbWlzZSIsdC5ab2RCcmFuZGVkPSJab2RCcmFuZGVkIix0LlpvZFBpcGVsaW5lPSJab2RQaXBlbGluZSIsdC5ab2RSZWFkb25seT0iWm9kUmVhZG9ubHkifSkoZGV8fChkZT17fSkpO2NvbnN0IFRNPSh0LGU9e21lc3NhZ2U6YElucHV0IG5vdCBpbnN0YW5jZSBvZiAke3QubmFtZX1gfSk9PkFDKG49Pm4gaW5zdGFuY2VvZiB0LGUpLE1DPXdyLmNyZWF0ZSxMQz1oby5jcmVhdGUsTk09WWQuY3JlYXRlLFJNPXBvLmNyZWF0ZSxEQz1ndS5jcmVhdGUsT009dGwuY3JlYXRlLFBNPUhkLmNyZWF0ZSxBTT12dS5jcmVhdGUsTU09eXUuY3JlYXRlLExNPXZzLmNyZWF0ZSxETT1Xby5jcmVhdGUsSU09Z2kuY3JlYXRlLGpNPUtkLmNyZWF0ZSx6TT1rci5jcmVhdGUsRk09Y3QuY3JlYXRlLEJNPWN0LnN0cmljdENyZWF0ZSxVTT14dS5jcmVhdGUsV009emYuY3JlYXRlLFZNPV91LmNyZWF0ZSxITT1aci5jcmVhdGUsS009d3UuY3JlYXRlLFpNPVpkLmNyZWF0ZSxHTT1ubC5jcmVhdGUsWU09bnMuY3JlYXRlLFhNPVN1LmNyZWF0ZSxKTT1FdS5jcmVhdGUsUU09bW8uY3JlYXRlLHFNPUN1LmNyZWF0ZSxlNT15cy5jcmVhdGUsUHg9VHIuY3JlYXRlLHQ1PWRpLmNyZWF0ZSxuNT1ybC5jcmVhdGUscjU9VHIuY3JlYXRlV2l0aFByZXByb2Nlc3MsaTU9VnUuY3JlYXRlLG81PSgpPT5NQygpLm9wdGlvbmFsKCksbDU9KCk9PkxDKCkub3B0aW9uYWwoKSxzNT0oKT0+REMoKS5vcHRpb25hbCgpLGE1PXtzdHJpbmc6dD0+d3IuY3JlYXRlKHsuLi50LGNvZXJjZTohMH0pLG51bWJlcjp0PT5oby5jcmVhdGUoey4uLnQsY29lcmNlOiEwfSksYm9vbGVhbjp0PT5ndS5jcmVhdGUoey4uLnQsY29lcmNlOiEwfSksYmlnaW50OnQ9PnBvLmNyZWF0ZSh7Li4udCxjb2VyY2U6ITB9KSxkYXRlOnQ9PnRsLmNyZWF0ZSh7Li4udCxjb2VyY2U6ITB9KX0sdTU9dmU7dmFyIENuPU9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGRlZmF1bHRFcnJvck1hcDpwdSxzZXRFcnJvck1hcDpoTSxnZXRFcnJvck1hcDpVZCxtYWtlSXNzdWU6V2QsRU1QVFlfUEFUSDpwTSxhZGRJc3N1ZVRvQ29udGV4dDpxLFBhcnNlU3RhdHVzOm9uLElOVkFMSUQ6dmUsRElSVFk6UkMsT0s6eW4saXNBYm9ydGVkOmptLGlzRGlydHk6em0saXNWYWxpZDptdSxpc0FzeW5jOlZkLGdldCB1dGlsKCl7cmV0dXJuIERlfSxnZXQgb2JqZWN0VXRpbCgpe3JldHVybiBJbX0sWm9kUGFyc2VkVHlwZTpKLGdldFBhcnNlZFR5cGU6V2ksWm9kVHlwZTpDZSxab2RTdHJpbmc6d3IsWm9kTnVtYmVyOmhvLFpvZEJpZ0ludDpwbyxab2RCb29sZWFuOmd1LFpvZERhdGU6dGwsWm9kU3ltYm9sOkhkLFpvZFVuZGVmaW5lZDp2dSxab2ROdWxsOnl1LFpvZEFueTp2cyxab2RVbmtub3duOldvLFpvZE5ldmVyOmdpLFpvZFZvaWQ6S2QsWm9kQXJyYXk6a3IsWm9kT2JqZWN0OmN0LFpvZFVuaW9uOnh1LFpvZERpc2NyaW1pbmF0ZWRVbmlvbjp6Zixab2RJbnRlcnNlY3Rpb246X3UsWm9kVHVwbGU6WnIsWm9kUmVjb3JkOnd1LFpvZE1hcDpaZCxab2RTZXQ6bmwsWm9kRnVuY3Rpb246bnMsWm9kTGF6eTpTdSxab2RMaXRlcmFsOkV1LFpvZEVudW06bW8sWm9kTmF0aXZlRW51bTpDdSxab2RQcm9taXNlOnlzLFpvZEVmZmVjdHM6VHIsWm9kVHJhbnNmb3JtZXI6VHIsWm9kT3B0aW9uYWw6ZGksWm9kTnVsbGFibGU6cmwsWm9kRGVmYXVsdDprdSxab2RDYXRjaDpHZCxab2ROYU46WWQsQlJBTkQ6Yk0sWm9kQnJhbmRlZDpQQyxab2RQaXBlbGluZTpWdSxab2RSZWFkb25seTpYZCxjdXN0b206QUMsU2NoZW1hOkNlLFpvZFNjaGVtYTpDZSxsYXRlOiRNLGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQoKXtyZXR1cm4gZGV9LGNvZXJjZTphNSxhbnk6TE0sYXJyYXk6ek0sYmlnaW50OlJNLGJvb2xlYW46REMsZGF0ZTpPTSxkaXNjcmltaW5hdGVkVW5pb246V00sZWZmZWN0OlB4LGVudW06UU0sZnVuY3Rpb246WU0saW5zdGFuY2VvZjpUTSxpbnRlcnNlY3Rpb246Vk0sbGF6eTpYTSxsaXRlcmFsOkpNLG1hcDpaTSxuYW46Tk0sbmF0aXZlRW51bTpxTSxuZXZlcjpJTSxudWxsOk1NLG51bGxhYmxlOm41LG51bWJlcjpMQyxvYmplY3Q6Rk0sb2Jvb2xlYW46czUsb251bWJlcjpsNSxvcHRpb25hbDp0NSxvc3RyaW5nOm81LHBpcGVsaW5lOmk1LHByZXByb2Nlc3M6cjUscHJvbWlzZTplNSxyZWNvcmQ6S00sc2V0OkdNLHN0cmljdE9iamVjdDpCTSxzdHJpbmc6TUMsc3ltYm9sOlBNLHRyYW5zZm9ybWVyOlB4LHR1cGxlOkhNLHVuZGVmaW5lZDpBTSx1bmlvbjpVTSx1bmtub3duOkRNLHZvaWQ6ak0sTkVWRVI6dTUsWm9kSXNzdWVDb2RlOlcscXVvdGVsZXNzSnNvbjpmTSxab2RFcnJvcjpDcn0pO2NvbnN0IGM1PUNuLnVuaW9uKFtDbi5vYmplY3Qoe2lkOkNuLnN0cmluZygpLG1vZGU6Q24ubGl0ZXJhbCgicHJveHkiKSxmdWxsX25hbWU6Q24uc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLHVzZXJuYW1lOkNuLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxhdmF0YXJfdXJsOkNuLnN0cmluZygpLnVybCgpLm9wdGlvbmFsKCkubnVsbGFibGUoKSxlbmFibGVkOkNuLmJvb2xlYW4oKX0pLENuLm9iamVjdCh7bW9kZTpDbi5saXRlcmFsKCJsb2NhbCIpLGVuYWJsZWQ6Q24uYm9vbGVhbigpLm9wdGlvbmFsKCl9KSxDbi5vYmplY3Qoe21vZGU6Q24ubGl0ZXJhbCgidW5hdXRob3JpemVkIiksZW5hYmxlZDpDbi5ib29sZWFuKCkub3B0aW9uYWwoKX0pXSk7ZnVuY3Rpb24gZDUodCl7Y29uc3RbZSxuXT1wLnVzZVN0YXRlKHtzdGF0dXM6Im5vdC1hc2tlZCJ9KSxbcixpXT1wLnVzZVN0YXRlKDApO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e24oe3N0YXR1czoibG9hZGluZyJ9KSx0LmdldFNlc3Npb24oKS50aGVuKGFzeW5jIG89Pnt0cnl7aWYoem8uaXNPayhvKSl7Y29uc3QgbD1vLnZhbHVlO24oe3N0YXR1czoic3VjY2VzcyIsZGF0YTpjNS5wYXJzZShsKX0pfWVsc2Ugby5lcnJvci5zdGF0dXNDb2RlPT09NDAxP24oe3N0YXR1czoic3VjY2VzcyIsZGF0YTp7bW9kZToidW5hdXRob3JpemVkIn19KTpyPDM/c2V0VGltZW91dCgoKT0+e2kocisxKX0sMjAwKnIpOm4oe3N0YXR1czoiZXJyb3IiLGVycm9yOiJDb3VsZCBub3QgZmV0Y2ggc2Vzc2lvbiJ9KX1jYXRjaChsKXtjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgYXV0aG9yaXplOiIsbCksbih7c3RhdHVzOiJlcnJvciIsZXJyb3I6IkdvdCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHNlc3Npb24ifSl9fSl9LFtyXSksZX1jb25zdCBBeD10PT50eXBlb2YgdD09ImJvb2xlYW4iPyIiLmNvbmNhdCh0KTp0PT09MD8iMCI6dCxNeD1wUyxmNT0odCxlKT0+bj0+e3ZhciByO2lmKChlPT1udWxsP3ZvaWQgMDplLnZhcmlhbnRzKT09bnVsbClyZXR1cm4gTXgodCxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzLG49PW51bGw/dm9pZCAwOm4uY2xhc3NOYW1lKTtjb25zdHt2YXJpYW50czppLGRlZmF1bHRWYXJpYW50czpvfT1lLGw9T2JqZWN0LmtleXMoaSkubWFwKHU9Pntjb25zdCBjPW49PW51bGw/dm9pZCAwOm5bdV0sZD1vPT1udWxsP3ZvaWQgMDpvW3VdO2lmKGM9PT1udWxsKXJldHVybiBudWxsO2NvbnN0IGY9QXgoYyl8fEF4KGQpO3JldHVybiBpW3VdW2ZdfSkscz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKHUsYyk9PntsZXRbZCxmXT1jO3JldHVybiBmPT09dm9pZCAwfHwodVtkXT1mKSx1fSx7fSksYT1lPT1udWxsfHwocj1lLmNvbXBvdW5kVmFyaWFudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5yZWR1Y2UoKHUsYyk9PntsZXR7Y2xhc3M6ZCxjbGFzc05hbWU6ZiwuLi5ofT1jO3JldHVybiBPYmplY3QuZW50cmllcyhoKS5ldmVyeShnPT57bGV0W20sd109ZztyZXR1cm4gQXJyYXkuaXNBcnJheSh3KT93LmluY2x1ZGVzKHsuLi5vLC4uLnN9W21dKTp7Li4ubywuLi5zfVttXT09PXd9KT9bLi4udSxkLGZdOnV9LFtdKTtyZXR1cm4gTXgodCxsLGEsbj09bnVsbD92b2lkIDA6bi5jbGFzcyxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzTmFtZSl9LGg1PWY1KCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCIse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OiJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAiLGRlc3RydWN0aXZlOiJiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAiLG91dGxpbmU6ImJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCIsc2Vjb25kYXJ5OiJiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAiLGdob3N0OiJob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCIsbGluazoidGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUifSxzaXplOntkZWZhdWx0OiJoLTEwIHB4LTQgcHktMiIsc206ImgtOSByb3VuZGVkLW1kIHB4LTMiLGxnOiJoLTExIHJvdW5kZWQtbWQgcHgtOCIsaWNvbjoiaC0xMCB3LTEwIn19LGRlZmF1bHRWYXJpYW50czp7dmFyaWFudDoiZGVmYXVsdCIsc2l6ZToiZGVmYXVsdCJ9fSksSUM9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsdmFyaWFudDplLHNpemU6bixhc0NoaWxkOnI9ITEsLi4uaX0sbyk9Pntjb25zdCBsPXI/aHM6ImJ1dHRvbiI7cmV0dXJuIHguanN4KGwse2NsYXNzTmFtZTp4dChoNSh7dmFyaWFudDplLHNpemU6bixjbGFzc05hbWU6dH0pKSxyZWY6bywuLi5pfSl9KTtJQy5kaXNwbGF5TmFtZT0iQnV0dG9uIjtjb25zdCBqdj1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCx0eXBlOmUsLi4ubn0scik9PnguanN4KCJpbnB1dCIse3R5cGU6ZSxjbGFzc05hbWU6eHQoImZsZXggaC0xMCB3LWZ1bGwgcm91bmRlZC1tZCBib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcHgtMyBweS0yIHRleHQtc20gcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmaWxlOmJvcmRlci0wIGZpbGU6YmctdHJhbnNwYXJlbnQgZmlsZTp0ZXh0LXNtIGZpbGU6Zm9udC1tZWRpdW0gcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCIsdCkscmVmOnIsLi4ubn0pKTtqdi5kaXNwbGF5TmFtZT0iSW5wdXQiO2Z1bmN0aW9uIGpDKHQpe2NvbnN0IGU9dCsiQ29sbGVjdGlvblByb3ZpZGVyIixbbixyXT1hbChlKSxbaSxvXT1uKGUse2NvbGxlY3Rpb25SZWY6e2N1cnJlbnQ6bnVsbH0saXRlbU1hcDpuZXcgTWFwfSksbD1oPT57Y29uc3R7c2NvcGU6ZyxjaGlsZHJlbjptfT1oLHc9cmUudXNlUmVmKG51bGwpLHY9cmUudXNlUmVmKG5ldyBNYXApLmN1cnJlbnQ7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQoaSx7c2NvcGU6ZyxpdGVtTWFwOnYsY29sbGVjdGlvblJlZjp3fSxtKX0scz10KyJDb2xsZWN0aW9uU2xvdCIsYT1yZS5mb3J3YXJkUmVmKChoLGcpPT57Y29uc3R7c2NvcGU6bSxjaGlsZHJlbjp3fT1oLHY9byhzLG0pLHk9c3QoZyx2LmNvbGxlY3Rpb25SZWYpO3JldHVybiByZS5jcmVhdGVFbGVtZW50KGhzLHtyZWY6eX0sdyl9KSx1PXQrIkNvbGxlY3Rpb25JdGVtU2xvdCIsYz0iZGF0YS1yYWRpeC1jb2xsZWN0aW9uLWl0ZW0iLGQ9cmUuZm9yd2FyZFJlZigoaCxnKT0+e2NvbnN0e3Njb3BlOm0sY2hpbGRyZW46dywuLi52fT1oLHk9cmUudXNlUmVmKG51bGwpLF89c3QoZyx5KSxTPW8odSxtKTtyZXR1cm4gcmUudXNlRWZmZWN0KCgpPT4oUy5pdGVtTWFwLnNldCh5LHtyZWY6eSwuLi52fSksKCk9PnZvaWQgUy5pdGVtTWFwLmRlbGV0ZSh5KSkpLHJlLmNyZWF0ZUVsZW1lbnQoaHMse1tjXToiIixyZWY6X30sdyl9KTtmdW5jdGlvbiBmKGgpe2NvbnN0IGc9byh0KyJDb2xsZWN0aW9uQ29uc3VtZXIiLGgpO3JldHVybiByZS51c2VDYWxsYmFjaygoKT0+e2NvbnN0IHc9Zy5jb2xsZWN0aW9uUmVmLmN1cnJlbnQ7aWYoIXcpcmV0dXJuW107Y29uc3Qgdj1BcnJheS5mcm9tKHcucXVlcnlTZWxlY3RvckFsbChgWyR7Y31dYCkpO3JldHVybiBBcnJheS5mcm9tKGcuaXRlbU1hcC52YWx1ZXMoKSkuc29ydCgoUyxFKT0+di5pbmRleE9mKFMucmVmLmN1cnJlbnQpLXYuaW5kZXhPZihFLnJlZi5jdXJyZW50KSl9LFtnLmNvbGxlY3Rpb25SZWYsZy5pdGVtTWFwXSl9cmV0dXJuW3tQcm92aWRlcjpsLFNsb3Q6YSxJdGVtU2xvdDpkfSxmLHJdfWZ1bmN0aW9uIHA1KHQsZT1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPWVuKHQpO3AudXNlRWZmZWN0KCgpPT57Y29uc3Qgcj1pPT57aS5rZXk9PT0iRXNjYXBlIiYmbihpKX07cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsciksKCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIscil9LFtuLGVdKX1jb25zdCBCbT0iZGlzbWlzc2FibGVMYXllci51cGRhdGUiLG01PSJkaXNtaXNzYWJsZUxheWVyLnBvaW50ZXJEb3duT3V0c2lkZSIsZzU9ImRpc21pc3NhYmxlTGF5ZXIuZm9jdXNPdXRzaWRlIjtsZXQgTHg7Y29uc3QgdjU9cC5jcmVhdGVDb250ZXh0KHtsYXllcnM6bmV3IFNldCxsYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZDpuZXcgU2V0LGJyYW5jaGVzOm5ldyBTZXR9KSx5NT1wLmZvcndhcmRSZWYoKHQsZSk9Pnt2YXIgbjtjb25zdHtkaXNhYmxlT3V0c2lkZVBvaW50ZXJFdmVudHM6cj0hMSxvbkVzY2FwZUtleURvd246aSxvblBvaW50ZXJEb3duT3V0c2lkZTpvLG9uRm9jdXNPdXRzaWRlOmwsb25JbnRlcmFjdE91dHNpZGU6cyxvbkRpc21pc3M6YSwuLi51fT10LGM9cC51c2VDb250ZXh0KHY1KSxbZCxmXT1wLnVzZVN0YXRlKG51bGwpLGg9KG49ZD09bnVsbD92b2lkIDA6ZC5vd25lckRvY3VtZW50KSE9PW51bGwmJm4hPT12b2lkIDA/bjpnbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50LFssZ109cC51c2VTdGF0ZSh7fSksbT1zdChlLE49PmYoTikpLHc9QXJyYXkuZnJvbShjLmxheWVycyksW3ZdPVsuLi5jLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkXS5zbGljZSgtMSkseT13LmluZGV4T2YodiksXz1kP3cuaW5kZXhPZihkKTotMSxTPWMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuc2l6ZT4wLEU9Xz49eSwkPXg1KE49Pntjb25zdCBBPU4udGFyZ2V0LGs9Wy4uLmMuYnJhbmNoZXNdLnNvbWUoTT0+TS5jb250YWlucyhBKSk7IUV8fGt8fChvPT1udWxsfHxvKE4pLHM9PW51bGx8fHMoTiksTi5kZWZhdWx0UHJldmVudGVkfHxhPT1udWxsfHxhKCkpfSxoKSxDPV81KE49Pntjb25zdCBBPU4udGFyZ2V0O1suLi5jLmJyYW5jaGVzXS5zb21lKE09Pk0uY29udGFpbnMoQSkpfHwobD09bnVsbHx8bChOKSxzPT1udWxsfHxzKE4pLE4uZGVmYXVsdFByZXZlbnRlZHx8YT09bnVsbHx8YSgpKX0saCk7cmV0dXJuIHA1KE49PntfPT09Yy5sYXllcnMuc2l6ZS0xJiYoaT09bnVsbHx8aShOKSwhTi5kZWZhdWx0UHJldmVudGVkJiZhJiYoTi5wcmV2ZW50RGVmYXVsdCgpLGEoKSkpfSxoKSxwLnVzZUVmZmVjdCgoKT0+e2lmKGQpcmV0dXJuIHImJihjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0wJiYoTHg9aC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHMsaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiKSxjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmFkZChkKSksYy5sYXllcnMuYWRkKGQpLER4KCksKCk9PntyJiZjLmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU9PT0xJiYoaC5ib2R5LnN0eWxlLnBvaW50ZXJFdmVudHM9THgpfX0sW2QsaCxyLGNdKSxwLnVzZUVmZmVjdCgoKT0+KCk9PntkJiYoYy5sYXllcnMuZGVsZXRlKGQpLGMubGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQuZGVsZXRlKGQpLER4KCkpfSxbZCxjXSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCBOPSgpPT5nKHt9KTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihCbSxOKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihCbSxOKX0sW10pLHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe30sdSx7cmVmOm0sc3R5bGU6e3BvaW50ZXJFdmVudHM6Uz9FPyJhdXRvIjoibm9uZSI6dm9pZCAwLC4uLnQuc3R5bGV9LG9uRm9jdXNDYXB0dXJlOm50KHQub25Gb2N1c0NhcHR1cmUsQy5vbkZvY3VzQ2FwdHVyZSksb25CbHVyQ2FwdHVyZTpudCh0Lm9uQmx1ckNhcHR1cmUsQy5vbkJsdXJDYXB0dXJlKSxvblBvaW50ZXJEb3duQ2FwdHVyZTpudCh0Lm9uUG9pbnRlckRvd25DYXB0dXJlLCQub25Qb2ludGVyRG93bkNhcHR1cmUpfSkpfSk7ZnVuY3Rpb24geDUodCxlPWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49ZW4odCkscj1wLnVzZVJlZighMSksaT1wLnVzZVJlZigoKT0+e30pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2NvbnN0IG89cz0+e2lmKHMudGFyZ2V0JiYhci5jdXJyZW50KXtsZXQgYz1mdW5jdGlvbigpe3pDKG01LG4sdSx7ZGlzY3JldGU6ITB9KX07dmFyIGE9Yztjb25zdCB1PXtvcmlnaW5hbEV2ZW50OnN9O3MucG9pbnRlclR5cGU9PT0idG91Y2giPyhlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpLmN1cnJlbnQpLGkuY3VycmVudD1jLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGkuY3VycmVudCx7b25jZTohMH0pKTpjKCl9ZWxzZSBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixpLmN1cnJlbnQpO3IuY3VycmVudD0hMX0sbD13aW5kb3cuc2V0VGltZW91dCgoKT0+e2UuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG8pfSwwKTtyZXR1cm4oKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQobCksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZG93biIsbyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaS5jdXJyZW50KX19LFtlLG5dKSx7b25Qb2ludGVyRG93bkNhcHR1cmU6KCk9PnIuY3VycmVudD0hMH19ZnVuY3Rpb24gXzUodCxlPWdsb2JhbFRoaXM9PW51bGw/dm9pZCAwOmdsb2JhbFRoaXMuZG9jdW1lbnQpe2NvbnN0IG49ZW4odCkscj1wLnVzZVJlZighMSk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57Y29uc3QgaT1vPT57by50YXJnZXQmJiFyLmN1cnJlbnQmJnpDKGc1LG4se29yaWdpbmFsRXZlbnQ6b30se2Rpc2NyZXRlOiExfSl9O3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLGkpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLGkpfSxbZSxuXSkse29uRm9jdXNDYXB0dXJlOigpPT5yLmN1cnJlbnQ9ITAsb25CbHVyQ2FwdHVyZTooKT0+ci5jdXJyZW50PSExfX1mdW5jdGlvbiBEeCgpe2NvbnN0IHQ9bmV3IEN1c3RvbUV2ZW50KEJtKTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KHQpfWZ1bmN0aW9uIHpDKHQsZSxuLHtkaXNjcmV0ZTpyfSl7Y29uc3QgaT1uLm9yaWdpbmFsRXZlbnQudGFyZ2V0LG89bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMCxkZXRhaWw6bn0pO2UmJmkuYWRkRXZlbnRMaXN0ZW5lcih0LGUse29uY2U6ITB9KSxyP24yKGksbyk6aS5kaXNwYXRjaEV2ZW50KG8pfWxldCBXaD0wO2Z1bmN0aW9uIHc1KCl7cC51c2VFZmZlY3QoKCk9Pnt2YXIgdCxlO2NvbnN0IG49ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdIik7cmV0dXJuIGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCJhZnRlcmJlZ2luIiwodD1uWzBdKSE9PW51bGwmJnQhPT12b2lkIDA/dDpJeCgpKSxkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYmVmb3JlZW5kIiwoZT1uWzFdKSE9PW51bGwmJmUhPT12b2lkIDA/ZTpJeCgpKSxXaCsrLCgpPT57V2g9PT0xJiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJbZGF0YS1yYWRpeC1mb2N1cy1ndWFyZF0iKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpLFdoLS19fSxbXSl9ZnVuY3Rpb24gSXgoKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoImRhdGEtcmFkaXgtZm9jdXMtZ3VhcmQiLCIiKSx0LnRhYkluZGV4PTAsdC5zdHlsZS5jc3NUZXh0PSJvdXRsaW5lOiBub25lOyBvcGFjaXR5OiAwOyBwb3NpdGlvbjogZml4ZWQ7IHBvaW50ZXItZXZlbnRzOiBub25lIix0fWNvbnN0IFZoPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uTW91bnQiLEhoPSJmb2N1c1Njb3BlLmF1dG9Gb2N1c09uVW5tb3VudCIsang9e2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMH0sUzU9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7bG9vcDpuPSExLHRyYXBwZWQ6cj0hMSxvbk1vdW50QXV0b0ZvY3VzOmksb25Vbm1vdW50QXV0b0ZvY3VzOm8sLi4ubH09dCxbcyxhXT1wLnVzZVN0YXRlKG51bGwpLHU9ZW4oaSksYz1lbihvKSxkPXAudXNlUmVmKG51bGwpLGY9c3QoZSxtPT5hKG0pKSxoPXAudXNlUmVmKHtwYXVzZWQ6ITEscGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9fSkuY3VycmVudDtwLnVzZUVmZmVjdCgoKT0+e2lmKHIpe2xldCB5PWZ1bmN0aW9uKCQpe2lmKGgucGF1c2VkfHwhcylyZXR1cm47Y29uc3QgQz0kLnRhcmdldDtzLmNvbnRhaW5zKEMpP2QuY3VycmVudD1DOkxpKGQuY3VycmVudCx7c2VsZWN0OiEwfSl9LF89ZnVuY3Rpb24oJCl7aWYoaC5wYXVzZWR8fCFzKXJldHVybjtjb25zdCBDPSQucmVsYXRlZFRhcmdldDtDIT09bnVsbCYmKHMuY29udGFpbnMoQyl8fExpKGQuY3VycmVudCx7c2VsZWN0OiEwfSkpfSxTPWZ1bmN0aW9uKCQpe2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1kb2N1bWVudC5ib2R5KWZvcihjb25zdCBOIG9mICQpTi5yZW1vdmVkTm9kZXMubGVuZ3RoPjAmJkxpKHMpfTt2YXIgbT15LHc9Xyx2PVM7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLF8pO2NvbnN0IEU9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoUyk7cmV0dXJuIHMmJkUub2JzZXJ2ZShzLHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNpbiIseSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXNvdXQiLF8pLEUuZGlzY29ubmVjdCgpfX19LFtyLHMsaC5wYXVzZWRdKSxwLnVzZUVmZmVjdCgoKT0+e2lmKHMpe0Z4LmFkZChoKTtjb25zdCBtPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoIXMuY29udGFpbnMobSkpe2NvbnN0IHY9bmV3IEN1c3RvbUV2ZW50KFZoLGp4KTtzLmFkZEV2ZW50TGlzdGVuZXIoVmgsdSkscy5kaXNwYXRjaEV2ZW50KHYpLHYuZGVmYXVsdFByZXZlbnRlZHx8KEU1KFQ1KEZDKHMpKSx7c2VsZWN0OiEwfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PW0mJkxpKHMpKX1yZXR1cm4oKT0+e3MucmVtb3ZlRXZlbnRMaXN0ZW5lcihWaCx1KSxzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1uZXcgQ3VzdG9tRXZlbnQoSGgsangpO3MuYWRkRXZlbnRMaXN0ZW5lcihIaCxjKSxzLmRpc3BhdGNoRXZlbnQodiksdi5kZWZhdWx0UHJldmVudGVkfHxMaShtPz9kb2N1bWVudC5ib2R5LHtzZWxlY3Q6ITB9KSxzLnJlbW92ZUV2ZW50TGlzdGVuZXIoSGgsYyksRngucmVtb3ZlKGgpfSwwKX19fSxbcyx1LGMsaF0pO2NvbnN0IGc9cC51c2VDYWxsYmFjayhtPT57aWYoIW4mJiFyfHxoLnBhdXNlZClyZXR1cm47Y29uc3Qgdz1tLmtleT09PSJUYWIiJiYhbS5hbHRLZXkmJiFtLmN0cmxLZXkmJiFtLm1ldGFLZXksdj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKHcmJnYpe2NvbnN0IHk9bS5jdXJyZW50VGFyZ2V0LFtfLFNdPUM1KHkpO18mJlM/IW0uc2hpZnRLZXkmJnY9PT1TPyhtLnByZXZlbnREZWZhdWx0KCksbiYmTGkoXyx7c2VsZWN0OiEwfSkpOm0uc2hpZnRLZXkmJnY9PT1fJiYobS5wcmV2ZW50RGVmYXVsdCgpLG4mJkxpKFMse3NlbGVjdDohMH0pKTp2PT09eSYmbS5wcmV2ZW50RGVmYXVsdCgpfX0sW24scixoLnBhdXNlZF0pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt0YWJJbmRleDotMX0sbCx7cmVmOmYsb25LZXlEb3duOmd9KSl9KTtmdW5jdGlvbiBFNSh0LHtzZWxlY3Q6ZT0hMX09e30pe2NvbnN0IG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgciBvZiB0KWlmKExpKHIse3NlbGVjdDplfSksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PW4pcmV0dXJufWZ1bmN0aW9uIEM1KHQpe2NvbnN0IGU9RkModCksbj16eChlLHQpLHI9engoZS5yZXZlcnNlKCksdCk7cmV0dXJuW24scl19ZnVuY3Rpb24gRkModCl7Y29uc3QgZT1bXSxuPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIodCxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCx7YWNjZXB0Tm9kZTpyPT57Y29uc3QgaT1yLnRhZ05hbWU9PT0iSU5QVVQiJiZyLnR5cGU9PT0iaGlkZGVuIjtyZXR1cm4gci5kaXNhYmxlZHx8ci5oaWRkZW58fGk/Tm9kZUZpbHRlci5GSUxURVJfU0tJUDpyLnRhYkluZGV4Pj0wP05vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDpOb2RlRmlsdGVyLkZJTFRFUl9TS0lQfX0pO2Zvcig7bi5uZXh0Tm9kZSgpOyllLnB1c2gobi5jdXJyZW50Tm9kZSk7cmV0dXJuIGV9ZnVuY3Rpb24gengodCxlKXtmb3IoY29uc3QgbiBvZiB0KWlmKCFrNShuLHt1cFRvOmV9KSlyZXR1cm4gbn1mdW5jdGlvbiBrNSh0LHt1cFRvOmV9KXtpZihnZXRDb21wdXRlZFN0eWxlKHQpLnZpc2liaWxpdHk9PT0iaGlkZGVuIilyZXR1cm4hMDtmb3IoO3Q7KXtpZihlIT09dm9pZCAwJiZ0PT09ZSlyZXR1cm4hMTtpZihnZXRDb21wdXRlZFN0eWxlKHQpLmRpc3BsYXk9PT0ibm9uZSIpcmV0dXJuITA7dD10LnBhcmVudEVsZW1lbnR9cmV0dXJuITF9ZnVuY3Rpb24gYjUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50JiYic2VsZWN0ImluIHR9ZnVuY3Rpb24gTGkodCx7c2VsZWN0OmU9ITF9PXt9KXtpZih0JiZ0LmZvY3VzKXtjb25zdCBuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLHQhPT1uJiZiNSh0KSYmZSYmdC5zZWxlY3QoKX19Y29uc3QgRng9JDUoKTtmdW5jdGlvbiAkNSgpe2xldCB0PVtdO3JldHVybnthZGQoZSl7Y29uc3Qgbj10WzBdO2UhPT1uJiYobj09bnVsbHx8bi5wYXVzZSgpKSx0PUJ4KHQsZSksdC51bnNoaWZ0KGUpfSxyZW1vdmUoZSl7dmFyIG47dD1CeCh0LGUpLChuPXRbMF0pPT09bnVsbHx8bj09PXZvaWQgMHx8bi5yZXN1bWUoKX19fWZ1bmN0aW9uIEJ4KHQsZSl7Y29uc3Qgbj1bLi4udF0scj1uLmluZGV4T2YoZSk7cmV0dXJuIHIhPT0tMSYmbi5zcGxpY2UociwxKSxufWZ1bmN0aW9uIFQ1KHQpe3JldHVybiB0LmZpbHRlcihlPT5lLnRhZ05hbWUhPT0iQSIpfWNvbnN0IE41PUlfLnVzZUlkfHwoKCk9Pnt9KTtsZXQgUjU9MDtmdW5jdGlvbiBGZih0KXtjb25zdFtlLG5dPXAudXNlU3RhdGUoTjUoKSk7cmV0dXJuIFZuKCgpPT57dHx8bihyPT5yPz9TdHJpbmcoUjUrKykpfSxbdF0pLHR8fChlP2ByYWRpeC0ke2V9YDoiIil9Y29uc3QgTzU9WyJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiXSxnbz1NYXRoLm1pbixqbj1NYXRoLm1heCxKZD1NYXRoLnJvdW5kLENjPU1hdGguZmxvb3Isdm89dD0+KHt4OnQseTp0fSksUDU9e2xlZnQ6InJpZ2h0IixyaWdodDoibGVmdCIsYm90dG9tOiJ0b3AiLHRvcDoiYm90dG9tIn0sQTU9e3N0YXJ0OiJlbmQiLGVuZDoic3RhcnQifTtmdW5jdGlvbiBVbSh0LGUsbil7cmV0dXJuIGpuKHQsZ28oZSxuKSl9ZnVuY3Rpb24gdmkodCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0fWZ1bmN0aW9uIHlpKHQpe3JldHVybiB0LnNwbGl0KCItIilbMF19ZnVuY3Rpb24genModCl7cmV0dXJuIHQuc3BsaXQoIi0iKVsxXX1mdW5jdGlvbiB6dih0KXtyZXR1cm4gdD09PSJ4Ij8ieSI6IngifWZ1bmN0aW9uIEZ2KHQpe3JldHVybiB0PT09InkiPyJoZWlnaHQiOiJ3aWR0aCJ9ZnVuY3Rpb24gRnModCl7cmV0dXJuWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh5aSh0KSk/InkiOiJ4In1mdW5jdGlvbiBCdih0KXtyZXR1cm4genYoRnModCkpfWZ1bmN0aW9uIE01KHQsZSxuKXtuPT09dm9pZCAwJiYobj0hMSk7Y29uc3Qgcj16cyh0KSxpPUJ2KHQpLG89RnYoaSk7bGV0IGw9aT09PSJ4Ij9yPT09KG4/ImVuZCI6InN0YXJ0Iik/InJpZ2h0IjoibGVmdCI6cj09PSJzdGFydCI/ImJvdHRvbSI6InRvcCI7cmV0dXJuIGUucmVmZXJlbmNlW29dPmUuZmxvYXRpbmdbb10mJihsPVFkKGwpKSxbbCxRZChsKV19ZnVuY3Rpb24gTDUodCl7Y29uc3QgZT1RZCh0KTtyZXR1cm5bV20odCksZSxXbShlKV19ZnVuY3Rpb24gV20odCl7cmV0dXJuIHQucmVwbGFjZSgvc3RhcnR8ZW5kL2csZT0+QTVbZV0pfWZ1bmN0aW9uIEQ1KHQsZSxuKXtjb25zdCByPVsibGVmdCIsInJpZ2h0Il0saT1bInJpZ2h0IiwibGVmdCJdLG89WyJ0b3AiLCJib3R0b20iXSxsPVsiYm90dG9tIiwidG9wIl07c3dpdGNoKHQpe2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cmV0dXJuIG4/ZT9pOnI6ZT9yOmk7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpyZXR1cm4gZT9vOmw7ZGVmYXVsdDpyZXR1cm5bXX19ZnVuY3Rpb24gSTUodCxlLG4scil7Y29uc3QgaT16cyh0KTtsZXQgbz1ENSh5aSh0KSxuPT09InN0YXJ0IixyKTtyZXR1cm4gaSYmKG89by5tYXAobD0+bCsiLSIraSksZSYmKG89by5jb25jYXQoby5tYXAoV20pKSkpLG99ZnVuY3Rpb24gUWQodCl7cmV0dXJuIHQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csZT0+UDVbZV0pfWZ1bmN0aW9uIGo1KHQpe3JldHVybnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi50fX1mdW5jdGlvbiBCQyh0KXtyZXR1cm4gdHlwZW9mIHQhPSJudW1iZXIiP2o1KHQpOnt0b3A6dCxyaWdodDp0LGJvdHRvbTp0LGxlZnQ6dH19ZnVuY3Rpb24gcWQodCl7cmV0dXJuey4uLnQsdG9wOnQueSxsZWZ0OnQueCxyaWdodDp0LngrdC53aWR0aCxib3R0b206dC55K3QuaGVpZ2h0fX1mdW5jdGlvbiBVeCh0LGUsbil7bGV0e3JlZmVyZW5jZTpyLGZsb2F0aW5nOml9PXQ7Y29uc3Qgbz1GcyhlKSxsPUJ2KGUpLHM9RnYobCksYT15aShlKSx1PW89PT0ieSIsYz1yLngrci53aWR0aC8yLWkud2lkdGgvMixkPXIueStyLmhlaWdodC8yLWkuaGVpZ2h0LzIsZj1yW3NdLzItaVtzXS8yO2xldCBoO3N3aXRjaChhKXtjYXNlInRvcCI6aD17eDpjLHk6ci55LWkuaGVpZ2h0fTticmVhaztjYXNlImJvdHRvbSI6aD17eDpjLHk6ci55K3IuaGVpZ2h0fTticmVhaztjYXNlInJpZ2h0IjpoPXt4OnIueCtyLndpZHRoLHk6ZH07YnJlYWs7Y2FzZSJsZWZ0IjpoPXt4OnIueC1pLndpZHRoLHk6ZH07YnJlYWs7ZGVmYXVsdDpoPXt4OnIueCx5OnIueX19c3dpdGNoKHpzKGUpKXtjYXNlInN0YXJ0IjpoW2xdLT1mKihuJiZ1Py0xOjEpO2JyZWFrO2Nhc2UiZW5kIjpoW2xdKz1mKihuJiZ1Py0xOjEpO2JyZWFrfXJldHVybiBofWNvbnN0IHo1PWFzeW5jKHQsZSxuKT0+e2NvbnN0e3BsYWNlbWVudDpyPSJib3R0b20iLHN0cmF0ZWd5Omk9ImFic29sdXRlIixtaWRkbGV3YXJlOm89W10scGxhdGZvcm06bH09bixzPW8uZmlsdGVyKEJvb2xlYW4pLGE9YXdhaXQobC5pc1JUTD09bnVsbD92b2lkIDA6bC5pc1JUTChlKSk7bGV0IHU9YXdhaXQgbC5nZXRFbGVtZW50UmVjdHMoe3JlZmVyZW5jZTp0LGZsb2F0aW5nOmUsc3RyYXRlZ3k6aX0pLHt4OmMseTpkfT1VeCh1LHIsYSksZj1yLGg9e30sZz0wO2ZvcihsZXQgbT0wO208cy5sZW5ndGg7bSsrKXtjb25zdHtuYW1lOncsZm46dn09c1ttXSx7eDp5LHk6XyxkYXRhOlMscmVzZXQ6RX09YXdhaXQgdih7eDpjLHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTpoLHJlY3RzOnUscGxhdGZvcm06bCxlbGVtZW50czp7cmVmZXJlbmNlOnQsZmxvYXRpbmc6ZX19KTtpZihjPXk/P2MsZD1fPz9kLGg9ey4uLmgsW3ddOnsuLi5oW3ddLC4uLlN9fSxFJiZnPD01MCl7ZysrLHR5cGVvZiBFPT0ib2JqZWN0IiYmKEUucGxhY2VtZW50JiYoZj1FLnBsYWNlbWVudCksRS5yZWN0cyYmKHU9RS5yZWN0cz09PSEwP2F3YWl0IGwuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6dCxmbG9hdGluZzplLHN0cmF0ZWd5Oml9KTpFLnJlY3RzKSx7eDpjLHk6ZH09VXgodSxmLGEpKSxtPS0xO2NvbnRpbnVlfX1yZXR1cm57eDpjLHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOmh9fTthc3luYyBmdW5jdGlvbiBidSh0LGUpe3ZhciBuO2U9PT12b2lkIDAmJihlPXt9KTtjb25zdHt4OnIseTppLHBsYXRmb3JtOm8scmVjdHM6bCxlbGVtZW50czpzLHN0cmF0ZWd5OmF9PXQse2JvdW5kYXJ5OnU9ImNsaXBwaW5nQW5jZXN0b3JzIixyb290Qm91bmRhcnk6Yz0idmlld3BvcnQiLGVsZW1lbnRDb250ZXh0OmQ9ImZsb2F0aW5nIixhbHRCb3VuZGFyeTpmPSExLHBhZGRpbmc6aD0wfT12aShlLHQpLGc9QkMoaCksdz1zW2Y/ZD09PSJmbG9hdGluZyI/InJlZmVyZW5jZSI6ImZsb2F0aW5nIjpkXSx2PXFkKGF3YWl0IG8uZ2V0Q2xpcHBpbmdSZWN0KHtlbGVtZW50OihuPWF3YWl0KG8uaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpvLmlzRWxlbWVudCh3KSkpPT1udWxsfHxuP3c6dy5jb250ZXh0RWxlbWVudHx8YXdhaXQoby5nZXREb2N1bWVudEVsZW1lbnQ9PW51bGw/dm9pZCAwOm8uZ2V0RG9jdW1lbnRFbGVtZW50KHMuZmxvYXRpbmcpKSxib3VuZGFyeTp1LHJvb3RCb3VuZGFyeTpjLHN0cmF0ZWd5OmF9KSkseT1kPT09ImZsb2F0aW5nIj97Li4ubC5mbG9hdGluZyx4OnIseTppfTpsLnJlZmVyZW5jZSxfPWF3YWl0KG8uZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpvLmdldE9mZnNldFBhcmVudChzLmZsb2F0aW5nKSksUz1hd2FpdChvLmlzRWxlbWVudD09bnVsbD92b2lkIDA6by5pc0VsZW1lbnQoXykpP2F3YWl0KG8uZ2V0U2NhbGU9PW51bGw/dm9pZCAwOm8uZ2V0U2NhbGUoXykpfHx7eDoxLHk6MX06e3g6MSx5OjF9LEU9cWQoby5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBvLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtyZWN0Onksb2Zmc2V0UGFyZW50Ol8sc3RyYXRlZ3k6YX0pOnkpO3JldHVybnt0b3A6KHYudG9wLUUudG9wK2cudG9wKS9TLnksYm90dG9tOihFLmJvdHRvbS12LmJvdHRvbStnLmJvdHRvbSkvUy55LGxlZnQ6KHYubGVmdC1FLmxlZnQrZy5sZWZ0KS9TLngscmlnaHQ6KEUucmlnaHQtdi5yaWdodCtnLnJpZ2h0KS9TLnh9fWNvbnN0IFd4PXQ9Pih7bmFtZToiYXJyb3ciLG9wdGlvbnM6dCxhc3luYyBmbihlKXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOm8scGxhdGZvcm06bCxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmF9PWUse2VsZW1lbnQ6dSxwYWRkaW5nOmM9MH09dmkodCxlKXx8e307aWYodT09bnVsbClyZXR1cm57fTtjb25zdCBkPUJDKGMpLGY9e3g6bix5OnJ9LGg9QnYoaSksZz1GdihoKSxtPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyh1KSx3PWg9PT0ieSIsdj13PyJ0b3AiOiJsZWZ0Iix5PXc/ImJvdHRvbSI6InJpZ2h0IixfPXc/ImNsaWVudEhlaWdodCI6ImNsaWVudFdpZHRoIixTPW8ucmVmZXJlbmNlW2ddK28ucmVmZXJlbmNlW2hdLWZbaF0tby5mbG9hdGluZ1tnXSxFPWZbaF0tby5yZWZlcmVuY2VbaF0sJD1hd2FpdChsLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6bC5nZXRPZmZzZXRQYXJlbnQodSkpO2xldCBDPSQ/JFtfXTowOyghQ3x8IWF3YWl0KGwuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpsLmlzRWxlbWVudCgkKSkpJiYoQz1zLmZsb2F0aW5nW19dfHxvLmZsb2F0aW5nW2ddKTtjb25zdCBOPVMvMi1FLzIsQT1DLzItbVtnXS8yLTEsaz1nbyhkW3ZdLEEpLE09Z28oZFt5XSxBKSxEPWssaWU9Qy1tW2ddLU0sVj1DLzItbVtnXS8yK04sSz1VbShELFYsaWUpLFI9IWEuYXJyb3cmJnpzKGkpIT1udWxsJiZWIT1LJiZvLnJlZmVyZW5jZVtnXS8yLShWPEQ/azpNKS1tW2ddLzI8MCxQPVI/VjxEP1YtRDpWLWllOjA7cmV0dXJue1toXTpmW2hdK1AsZGF0YTp7W2hdOkssY2VudGVyT2Zmc2V0OlYtSy1QLC4uLlImJnthbGlnbm1lbnRPZmZzZXQ6UH19LHJlc2V0OlJ9fX0pLEY1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6dCxhc3luYyBmbihlKXt2YXIgbixyO2NvbnN0e3BsYWNlbWVudDppLG1pZGRsZXdhcmVEYXRhOm8scmVjdHM6bCxpbml0aWFsUGxhY2VtZW50OnMscGxhdGZvcm06YSxlbGVtZW50czp1fT1lLHttYWluQXhpczpjPSEwLGNyb3NzQXhpczpkPSEwLGZhbGxiYWNrUGxhY2VtZW50czpmLGZhbGxiYWNrU3RyYXRlZ3k6aD0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpnPSJub25lIixmbGlwQWxpZ25tZW50Om09ITAsLi4ud309dmkodCxlKTtpZigobj1vLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3Qgdj15aShpKSx5PXlpKHMpPT09cyxfPWF3YWl0KGEuaXNSVEw9PW51bGw/dm9pZCAwOmEuaXNSVEwodS5mbG9hdGluZykpLFM9Znx8KHl8fCFtP1tRZChzKV06TDUocykpOyFmJiZnIT09Im5vbmUiJiZTLnB1c2goLi4uSTUocyxtLGcsXykpO2NvbnN0IEU9W3MsLi4uU10sJD1hd2FpdCBidShlLHcpLEM9W107bGV0IE49KChyPW8uZmxpcCk9PW51bGw/dm9pZCAwOnIub3ZlcmZsb3dzKXx8W107aWYoYyYmQy5wdXNoKCRbdl0pLGQpe2NvbnN0IEQ9TTUoaSxsLF8pO0MucHVzaCgkW0RbMF1dLCRbRFsxXV0pfWlmKE49Wy4uLk4se3BsYWNlbWVudDppLG92ZXJmbG93czpDfV0sIUMuZXZlcnkoRD0+RDw9MCkpe3ZhciBBLGs7Y29uc3QgRD0oKChBPW8uZmxpcCk9PW51bGw/dm9pZCAwOkEuaW5kZXgpfHwwKSsxLGllPUVbRF07aWYoaWUpcmV0dXJue2RhdGE6e2luZGV4OkQsb3ZlcmZsb3dzOk59LHJlc2V0OntwbGFjZW1lbnQ6aWV9fTtsZXQgVj0oaz1OLmZpbHRlcihLPT5LLm92ZXJmbG93c1swXTw9MCkuc29ydCgoSyxSKT0+Sy5vdmVyZmxvd3NbMV0tUi5vdmVyZmxvd3NbMV0pWzBdKT09bnVsbD92b2lkIDA6ay5wbGFjZW1lbnQ7aWYoIVYpc3dpdGNoKGgpe2Nhc2UiYmVzdEZpdCI6e3ZhciBNO2NvbnN0IEs9KE09Ti5tYXAoUj0+W1IucGxhY2VtZW50LFIub3ZlcmZsb3dzLmZpbHRlcihQPT5QPjApLnJlZHVjZSgoUCxiKT0+UCtiLDApXSkuc29ydCgoUixQKT0+UlsxXS1QWzFdKVswXSk9PW51bGw/dm9pZCAwOk1bMF07SyYmKFY9Syk7YnJlYWt9Y2FzZSJpbml0aWFsUGxhY2VtZW50IjpWPXM7YnJlYWt9aWYoaSE9PVYpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6Vn19fXJldHVybnt9fX19O2Z1bmN0aW9uIFZ4KHQsZSl7cmV0dXJue3RvcDp0LnRvcC1lLmhlaWdodCxyaWdodDp0LnJpZ2h0LWUud2lkdGgsYm90dG9tOnQuYm90dG9tLWUuaGVpZ2h0LGxlZnQ6dC5sZWZ0LWUud2lkdGh9fWZ1bmN0aW9uIEh4KHQpe3JldHVybiBPNS5zb21lKGU9PnRbZV0+PTApfWNvbnN0IEI1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6ImhpZGUiLG9wdGlvbnM6dCxhc3luYyBmbihlKXtjb25zdHtyZWN0czpufT1lLHtzdHJhdGVneTpyPSJyZWZlcmVuY2VIaWRkZW4iLC4uLml9PXZpKHQsZSk7c3dpdGNoKHIpe2Nhc2UicmVmZXJlbmNlSGlkZGVuIjp7Y29uc3Qgbz1hd2FpdCBidShlLHsuLi5pLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSksbD1WeChvLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpsLHJlZmVyZW5jZUhpZGRlbjpIeChsKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IG89YXdhaXQgYnUoZSx7Li4uaSxhbHRCb3VuZGFyeTohMH0pLGw9VngobyxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6bCxlc2NhcGVkOkh4KGwpfX19ZGVmYXVsdDpyZXR1cm57fX19fX07YXN5bmMgZnVuY3Rpb24gVTUodCxlKXtjb25zdHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PXQsbz1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKSxsPXlpKG4pLHM9enMobiksYT1GcyhuKT09PSJ5Iix1PVsibGVmdCIsInRvcCJdLmluY2x1ZGVzKGwpPy0xOjEsYz1vJiZhPy0xOjEsZD12aShlLHQpO2xldHttYWluQXhpczpmLGNyb3NzQXhpczpoLGFsaWdubWVudEF4aXM6Z309dHlwZW9mIGQ9PSJudW1iZXIiP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsYWxpZ25tZW50QXhpczpudWxsLC4uLmR9O3JldHVybiBzJiZ0eXBlb2YgZz09Im51bWJlciImJihoPXM9PT0iZW5kIj9nKi0xOmcpLGE/e3g6aCpjLHk6Zip1fTp7eDpmKnUseTpoKmN9fWNvbnN0IFc1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD0wKSx7bmFtZToib2Zmc2V0IixvcHRpb25zOnQsYXN5bmMgZm4oZSl7Y29uc3R7eDpuLHk6cn09ZSxpPWF3YWl0IFU1KGUsdCk7cmV0dXJue3g6bitpLngseTpyK2kueSxkYXRhOml9fX19LFY1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOnQsYXN5bmMgZm4oZSl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6aX09ZSx7bWFpbkF4aXM6bz0hMCxjcm9zc0F4aXM6bD0hMSxsaW1pdGVyOnM9e2ZuOnc9PntsZXR7eDp2LHl9PXc7cmV0dXJue3g6dix5fX19LC4uLmF9PXZpKHQsZSksdT17eDpuLHk6cn0sYz1hd2FpdCBidShlLGEpLGQ9RnMoeWkoaSkpLGY9enYoZCk7bGV0IGg9dVtmXSxnPXVbZF07aWYobyl7Y29uc3Qgdz1mPT09InkiPyJ0b3AiOiJsZWZ0Iix2PWY9PT0ieSI/ImJvdHRvbSI6InJpZ2h0Iix5PWgrY1t3XSxfPWgtY1t2XTtoPVVtKHksaCxfKX1pZihsKXtjb25zdCB3PWQ9PT0ieSI/InRvcCI6ImxlZnQiLHY9ZD09PSJ5Ij8iYm90dG9tIjoicmlnaHQiLHk9ZytjW3ddLF89Zy1jW3ZdO2c9VW0oeSxnLF8pfWNvbnN0IG09cy5mbih7Li4uZSxbZl06aCxbZF06Z30pO3JldHVybnsuLi5tLGRhdGE6e3g6bS54LW4seTptLnktcn19fX19LEg1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse29wdGlvbnM6dCxmbihlKXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOm8sbWlkZGxld2FyZURhdGE6bH09ZSx7b2Zmc2V0OnM9MCxtYWluQXhpczphPSEwLGNyb3NzQXhpczp1PSEwfT12aSh0LGUpLGM9e3g6bix5OnJ9LGQ9RnMoaSksZj16dihkKTtsZXQgaD1jW2ZdLGc9Y1tkXTtjb25zdCBtPXZpKHMsZSksdz10eXBlb2YgbT09Im51bWJlciI/e21haW5BeGlzOm0sY3Jvc3NBeGlzOjB9OnttYWluQXhpczowLGNyb3NzQXhpczowLC4uLm19O2lmKGEpe2NvbnN0IF89Zj09PSJ5Ij8iaGVpZ2h0Ijoid2lkdGgiLFM9by5yZWZlcmVuY2VbZl0tby5mbG9hdGluZ1tfXSt3Lm1haW5BeGlzLEU9by5yZWZlcmVuY2VbZl0rby5yZWZlcmVuY2VbX10tdy5tYWluQXhpcztoPFM/aD1TOmg+RSYmKGg9RSl9aWYodSl7dmFyIHYseTtjb25zdCBfPWY9PT0ieSI/IndpZHRoIjoiaGVpZ2h0IixTPVsidG9wIiwibGVmdCJdLmluY2x1ZGVzKHlpKGkpKSxFPW8ucmVmZXJlbmNlW2RdLW8uZmxvYXRpbmdbX10rKFMmJigodj1sLm9mZnNldCk9PW51bGw/dm9pZCAwOnZbZF0pfHwwKSsoUz8wOncuY3Jvc3NBeGlzKSwkPW8ucmVmZXJlbmNlW2RdK28ucmVmZXJlbmNlW19dKyhTPzA6KCh5PWwub2Zmc2V0KT09bnVsbD92b2lkIDA6eVtkXSl8fDApLShTP3cuY3Jvc3NBeGlzOjApO2c8RT9nPUU6Zz4kJiYoZz0kKX1yZXR1cm57W2ZdOmgsW2RdOmd9fX19LEs1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6InNpemUiLG9wdGlvbnM6dCxhc3luYyBmbihlKXtjb25zdHtwbGFjZW1lbnQ6bixyZWN0czpyLHBsYXRmb3JtOmksZWxlbWVudHM6b309ZSx7YXBwbHk6bD0oKT0+e30sLi4uc309dmkodCxlKSxhPWF3YWl0IGJ1KGUscyksdT15aShuKSxjPXpzKG4pLGQ9RnMobik9PT0ieSIse3dpZHRoOmYsaGVpZ2h0Omh9PXIuZmxvYXRpbmc7bGV0IGcsbTt1PT09InRvcCJ8fHU9PT0iYm90dG9tIj8oZz11LG09Yz09PShhd2FpdChpLmlzUlRMPT1udWxsP3ZvaWQgMDppLmlzUlRMKG8uZmxvYXRpbmcpKT8ic3RhcnQiOiJlbmQiKT8ibGVmdCI6InJpZ2h0Iik6KG09dSxnPWM9PT0iZW5kIj8idG9wIjoiYm90dG9tIik7Y29uc3Qgdz1oLWFbZ10sdj1mLWFbbV0seT0hZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtsZXQgXz13LFM9djtpZihkKXtjb25zdCAkPWYtYS5sZWZ0LWEucmlnaHQ7Uz1jfHx5P2dvKHYsJCk6JH1lbHNle2NvbnN0ICQ9aC1hLnRvcC1hLmJvdHRvbTtfPWN8fHk/Z28odywkKTokfWlmKHkmJiFjKXtjb25zdCAkPWpuKGEubGVmdCwwKSxDPWpuKGEucmlnaHQsMCksTj1qbihhLnRvcCwwKSxBPWpuKGEuYm90dG9tLDApO2Q/Uz1mLTIqKCQhPT0wfHxDIT09MD8kK0M6am4oYS5sZWZ0LGEucmlnaHQpKTpfPWgtMiooTiE9PTB8fEEhPT0wP04rQTpqbihhLnRvcCxhLmJvdHRvbSkpfWF3YWl0IGwoey4uLmUsYXZhaWxhYmxlV2lkdGg6UyxhdmFpbGFibGVIZWlnaHQ6X30pO2NvbnN0IEU9YXdhaXQgaS5nZXREaW1lbnNpb25zKG8uZmxvYXRpbmcpO3JldHVybiBmIT09RS53aWR0aHx8aCE9PUUuaGVpZ2h0P3tyZXNldDp7cmVjdHM6ITB9fTp7fX19fTtmdW5jdGlvbiB5byh0KXtyZXR1cm4gVUModCk/KHQubm9kZU5hbWV8fCIiKS50b0xvd2VyQ2FzZSgpOiIjZG9jdW1lbnQifWZ1bmN0aW9uIFVuKHQpe3ZhciBlO3JldHVybih0PT1udWxsfHwoZT10Lm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDplLmRlZmF1bHRWaWV3KXx8d2luZG93fWZ1bmN0aW9uIFRpKHQpe3ZhciBlO3JldHVybihlPShVQyh0KT90Lm93bmVyRG9jdW1lbnQ6dC5kb2N1bWVudCl8fHdpbmRvdy5kb2N1bWVudCk9PW51bGw/dm9pZCAwOmUuZG9jdW1lbnRFbGVtZW50fWZ1bmN0aW9uIFVDKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTm9kZXx8dCBpbnN0YW5jZW9mIFVuKHQpLk5vZGV9ZnVuY3Rpb24geGkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFbGVtZW50fHx0IGluc3RhbmNlb2YgVW4odCkuRWxlbWVudH1mdW5jdGlvbiBHcih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fHx0IGluc3RhbmNlb2YgVW4odCkuSFRNTEVsZW1lbnR9ZnVuY3Rpb24gS3godCl7cmV0dXJuIHR5cGVvZiBTaGFkb3dSb290PiJ1Ij8hMTp0IGluc3RhbmNlb2YgU2hhZG93Um9vdHx8dCBpbnN0YW5jZW9mIFVuKHQpLlNoYWRvd1Jvb3R9ZnVuY3Rpb24gSHUodCl7Y29uc3R7b3ZlcmZsb3c6ZSxvdmVyZmxvd1g6bixvdmVyZmxvd1k6cixkaXNwbGF5Oml9PWFyKHQpO3JldHVybi9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbnxjbGlwLy50ZXN0KGUrcituKSYmIVsiaW5saW5lIiwiY29udGVudHMiXS5pbmNsdWRlcyhpKX1mdW5jdGlvbiBaNSh0KXtyZXR1cm5bInRhYmxlIiwidGQiLCJ0aCJdLmluY2x1ZGVzKHlvKHQpKX1mdW5jdGlvbiBVdih0KXtjb25zdCBlPVd2KCksbj1hcih0KTtyZXR1cm4gbi50cmFuc2Zvcm0hPT0ibm9uZSJ8fG4ucGVyc3BlY3RpdmUhPT0ibm9uZSJ8fChuLmNvbnRhaW5lclR5cGU/bi5jb250YWluZXJUeXBlIT09Im5vcm1hbCI6ITEpfHwhZSYmKG4uYmFja2Ryb3BGaWx0ZXI/bi5iYWNrZHJvcEZpbHRlciE9PSJub25lIjohMSl8fCFlJiYobi5maWx0ZXI/bi5maWx0ZXIhPT0ibm9uZSI6ITEpfHxbInRyYW5zZm9ybSIsInBlcnNwZWN0aXZlIiwiZmlsdGVyIl0uc29tZShyPT4obi53aWxsQ2hhbmdlfHwiIikuaW5jbHVkZXMocikpfHxbInBhaW50IiwibGF5b3V0Iiwic3RyaWN0IiwiY29udGVudCJdLnNvbWUocj0+KG4uY29udGFpbnx8IiIpLmluY2x1ZGVzKHIpKX1mdW5jdGlvbiBHNSh0KXtsZXQgZT14cyh0KTtmb3IoO0dyKGUpJiYhQmYoZSk7KXtpZihVdihlKSlyZXR1cm4gZTtlPXhzKGUpfXJldHVybiBudWxsfWZ1bmN0aW9uIFd2KCl7cmV0dXJuIHR5cGVvZiBDU1M+InUifHwhQ1NTLnN1cHBvcnRzPyExOkNTUy5zdXBwb3J0cygiLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXIiLCJub25lIil9ZnVuY3Rpb24gQmYodCl7cmV0dXJuWyJodG1sIiwiYm9keSIsIiNkb2N1bWVudCJdLmluY2x1ZGVzKHlvKHQpKX1mdW5jdGlvbiBhcih0KXtyZXR1cm4gVW4odCkuZ2V0Q29tcHV0ZWRTdHlsZSh0KX1mdW5jdGlvbiBVZih0KXtyZXR1cm4geGkodCk/e3Njcm9sbExlZnQ6dC5zY3JvbGxMZWZ0LHNjcm9sbFRvcDp0LnNjcm9sbFRvcH06e3Njcm9sbExlZnQ6dC5wYWdlWE9mZnNldCxzY3JvbGxUb3A6dC5wYWdlWU9mZnNldH19ZnVuY3Rpb24geHModCl7aWYoeW8odCk9PT0iaHRtbCIpcmV0dXJuIHQ7Y29uc3QgZT10LmFzc2lnbmVkU2xvdHx8dC5wYXJlbnROb2RlfHxLeCh0KSYmdC5ob3N0fHxUaSh0KTtyZXR1cm4gS3goZSk/ZS5ob3N0OmV9ZnVuY3Rpb24gV0ModCl7Y29uc3QgZT14cyh0KTtyZXR1cm4gQmYoZSk/dC5vd25lckRvY3VtZW50P3Qub3duZXJEb2N1bWVudC5ib2R5OnQuYm9keTpHcihlKSYmSHUoZSk/ZTpXQyhlKX1mdW5jdGlvbiAkdSh0LGUsbil7dmFyIHI7ZT09PXZvaWQgMCYmKGU9W10pLG49PT12b2lkIDAmJihuPSEwKTtjb25zdCBpPVdDKHQpLG89aT09PSgocj10Lm93bmVyRG9jdW1lbnQpPT1udWxsP3ZvaWQgMDpyLmJvZHkpLGw9VW4oaSk7cmV0dXJuIG8/ZS5jb25jYXQobCxsLnZpc3VhbFZpZXdwb3J0fHxbXSxIdShpKT9pOltdLGwuZnJhbWVFbGVtZW50JiZuPyR1KGwuZnJhbWVFbGVtZW50KTpbXSk6ZS5jb25jYXQoaSwkdShpLFtdLG4pKX1mdW5jdGlvbiBWQyh0KXtjb25zdCBlPWFyKHQpO2xldCBuPXBhcnNlRmxvYXQoZS53aWR0aCl8fDAscj1wYXJzZUZsb2F0KGUuaGVpZ2h0KXx8MDtjb25zdCBpPUdyKHQpLG89aT90Lm9mZnNldFdpZHRoOm4sbD1pP3Qub2Zmc2V0SGVpZ2h0OnIscz1KZChuKSE9PW98fEpkKHIpIT09bDtyZXR1cm4gcyYmKG49byxyPWwpLHt3aWR0aDpuLGhlaWdodDpyLCQ6c319ZnVuY3Rpb24gVnYodCl7cmV0dXJuIHhpKHQpP3Q6dC5jb250ZXh0RWxlbWVudH1mdW5jdGlvbiBycyh0KXtjb25zdCBlPVZ2KHQpO2lmKCFHcihlKSlyZXR1cm4gdm8oMSk7Y29uc3Qgbj1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpyLGhlaWdodDppLCQ6b309VkMoZSk7bGV0IGw9KG8/SmQobi53aWR0aCk6bi53aWR0aCkvcixzPShvP0pkKG4uaGVpZ2h0KTpuLmhlaWdodCkvaTtyZXR1cm4oIWx8fCFOdW1iZXIuaXNGaW5pdGUobCkpJiYobD0xKSwoIXN8fCFOdW1iZXIuaXNGaW5pdGUocykpJiYocz0xKSx7eDpsLHk6c319Y29uc3QgWTU9dm8oMCk7ZnVuY3Rpb24gSEModCl7Y29uc3QgZT1Vbih0KTtyZXR1cm4hV3YoKXx8IWUudmlzdWFsVmlld3BvcnQ/WTU6e3g6ZS52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LHk6ZS52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3B9fWZ1bmN0aW9uIFg1KHQsZSxuKXtyZXR1cm4gZT09PXZvaWQgMCYmKGU9ITEpLCFufHxlJiZuIT09VW4odCk/ITE6ZX1mdW5jdGlvbiBpbCh0LGUsbixyKXtlPT09dm9pZCAwJiYoZT0hMSksbj09PXZvaWQgMCYmKG49ITEpO2NvbnN0IGk9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPVZ2KHQpO2xldCBsPXZvKDEpO2UmJihyP3hpKHIpJiYobD1ycyhyKSk6bD1ycyh0KSk7Y29uc3Qgcz1YNShvLG4scik/SEMobyk6dm8oMCk7bGV0IGE9KGkubGVmdCtzLngpL2wueCx1PShpLnRvcCtzLnkpL2wueSxjPWkud2lkdGgvbC54LGQ9aS5oZWlnaHQvbC55O2lmKG8pe2NvbnN0IGY9VW4obyksaD1yJiZ4aShyKT9VbihyKTpyO2xldCBnPWYuZnJhbWVFbGVtZW50O2Zvcig7ZyYmciYmaCE9PWY7KXtjb25zdCBtPXJzKGcpLHc9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWFyKGcpLHk9dy5sZWZ0KyhnLmNsaWVudExlZnQrcGFyc2VGbG9hdCh2LnBhZGRpbmdMZWZ0KSkqbS54LF89dy50b3ArKGcuY2xpZW50VG9wK3BhcnNlRmxvYXQodi5wYWRkaW5nVG9wKSkqbS55O2EqPW0ueCx1Kj1tLnksYyo9bS54LGQqPW0ueSxhKz15LHUrPV8sZz1VbihnKS5mcmFtZUVsZW1lbnR9fXJldHVybiBxZCh7d2lkdGg6YyxoZWlnaHQ6ZCx4OmEseTp1fSl9ZnVuY3Rpb24gSjUodCl7bGV0e3JlY3Q6ZSxvZmZzZXRQYXJlbnQ6bixzdHJhdGVneTpyfT10O2NvbnN0IGk9R3Iobiksbz1UaShuKTtpZihuPT09bylyZXR1cm4gZTtsZXQgbD17c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfSxzPXZvKDEpO2NvbnN0IGE9dm8oMCk7aWYoKGl8fCFpJiZyIT09ImZpeGVkIikmJigoeW8obikhPT0iYm9keSJ8fEh1KG8pKSYmKGw9VWYobikpLEdyKG4pKSl7Y29uc3QgdT1pbChuKTtzPXJzKG4pLGEueD11Lngrbi5jbGllbnRMZWZ0LGEueT11Lnkrbi5jbGllbnRUb3B9cmV0dXJue3dpZHRoOmUud2lkdGgqcy54LGhlaWdodDplLmhlaWdodCpzLnkseDplLngqcy54LWwuc2Nyb2xsTGVmdCpzLngrYS54LHk6ZS55KnMueS1sLnNjcm9sbFRvcCpzLnkrYS55fX1mdW5jdGlvbiBRNSh0KXtyZXR1cm4gQXJyYXkuZnJvbSh0LmdldENsaWVudFJlY3RzKCkpfWZ1bmN0aW9uIEtDKHQpe3JldHVybiBpbChUaSh0KSkubGVmdCtVZih0KS5zY3JvbGxMZWZ0fWZ1bmN0aW9uIHE1KHQpe2NvbnN0IGU9VGkodCksbj1VZih0KSxyPXQub3duZXJEb2N1bWVudC5ib2R5LGk9am4oZS5zY3JvbGxXaWR0aCxlLmNsaWVudFdpZHRoLHIuc2Nyb2xsV2lkdGgsci5jbGllbnRXaWR0aCksbz1qbihlLnNjcm9sbEhlaWdodCxlLmNsaWVudEhlaWdodCxyLnNjcm9sbEhlaWdodCxyLmNsaWVudEhlaWdodCk7bGV0IGw9LW4uc2Nyb2xsTGVmdCtLQyh0KTtjb25zdCBzPS1uLnNjcm9sbFRvcDtyZXR1cm4gYXIocikuZGlyZWN0aW9uPT09InJ0bCImJihsKz1qbihlLmNsaWVudFdpZHRoLHIuY2xpZW50V2lkdGgpLWkpLHt3aWR0aDppLGhlaWdodDpvLHg6bCx5OnN9fWZ1bmN0aW9uIGU0KHQsZSl7Y29uc3Qgbj1Vbih0KSxyPVRpKHQpLGk9bi52aXN1YWxWaWV3cG9ydDtsZXQgbz1yLmNsaWVudFdpZHRoLGw9ci5jbGllbnRIZWlnaHQscz0wLGE9MDtpZihpKXtvPWkud2lkdGgsbD1pLmhlaWdodDtjb25zdCB1PVd2KCk7KCF1fHx1JiZlPT09ImZpeGVkIikmJihzPWkub2Zmc2V0TGVmdCxhPWkub2Zmc2V0VG9wKX1yZXR1cm57d2lkdGg6byxoZWlnaHQ6bCx4OnMseTphfX1mdW5jdGlvbiB0NCh0LGUpe2NvbnN0IG49aWwodCwhMCxlPT09ImZpeGVkIikscj1uLnRvcCt0LmNsaWVudFRvcCxpPW4ubGVmdCt0LmNsaWVudExlZnQsbz1Hcih0KT9ycyh0KTp2bygxKSxsPXQuY2xpZW50V2lkdGgqby54LHM9dC5jbGllbnRIZWlnaHQqby55LGE9aSpvLngsdT1yKm8ueTtyZXR1cm57d2lkdGg6bCxoZWlnaHQ6cyx4OmEseTp1fX1mdW5jdGlvbiBaeCh0LGUsbil7bGV0IHI7aWYoZT09PSJ2aWV3cG9ydCIpcj1lNCh0LG4pO2Vsc2UgaWYoZT09PSJkb2N1bWVudCIpcj1xNShUaSh0KSk7ZWxzZSBpZih4aShlKSlyPXQ0KGUsbik7ZWxzZXtjb25zdCBpPUhDKHQpO3I9ey4uLmUseDplLngtaS54LHk6ZS55LWkueX19cmV0dXJuIHFkKHIpfWZ1bmN0aW9uIFpDKHQsZSl7Y29uc3Qgbj14cyh0KTtyZXR1cm4gbj09PWV8fCF4aShuKXx8QmYobik/ITE6YXIobikucG9zaXRpb249PT0iZml4ZWQifHxaQyhuLGUpfWZ1bmN0aW9uIG40KHQsZSl7Y29uc3Qgbj1lLmdldCh0KTtpZihuKXJldHVybiBuO2xldCByPSR1KHQsW10sITEpLmZpbHRlcihzPT54aShzKSYmeW8ocykhPT0iYm9keSIpLGk9bnVsbDtjb25zdCBvPWFyKHQpLnBvc2l0aW9uPT09ImZpeGVkIjtsZXQgbD1vP3hzKHQpOnQ7Zm9yKDt4aShsKSYmIUJmKGwpOyl7Y29uc3Qgcz1hcihsKSxhPVV2KGwpOyFhJiZzLnBvc2l0aW9uPT09ImZpeGVkIiYmKGk9bnVsbCksKG8/IWEmJiFpOiFhJiZzLnBvc2l0aW9uPT09InN0YXRpYyImJiEhaSYmWyJhYnNvbHV0ZSIsImZpeGVkIl0uaW5jbHVkZXMoaS5wb3NpdGlvbil8fEh1KGwpJiYhYSYmWkModCxsKSk/cj1yLmZpbHRlcihjPT5jIT09bCk6aT1zLGw9eHMobCl9cmV0dXJuIGUuc2V0KHQscikscn1mdW5jdGlvbiByNCh0KXtsZXR7ZWxlbWVudDplLGJvdW5kYXJ5Om4scm9vdEJvdW5kYXJ5OnIsc3RyYXRlZ3k6aX09dDtjb25zdCBsPVsuLi5uPT09ImNsaXBwaW5nQW5jZXN0b3JzIj9uNChlLHRoaXMuX2MpOltdLmNvbmNhdChuKSxyXSxzPWxbMF0sYT1sLnJlZHVjZSgodSxjKT0+e2NvbnN0IGQ9WngoZSxjLGkpO3JldHVybiB1LnRvcD1qbihkLnRvcCx1LnRvcCksdS5yaWdodD1nbyhkLnJpZ2h0LHUucmlnaHQpLHUuYm90dG9tPWdvKGQuYm90dG9tLHUuYm90dG9tKSx1LmxlZnQ9am4oZC5sZWZ0LHUubGVmdCksdX0sWngoZSxzLGkpKTtyZXR1cm57d2lkdGg6YS5yaWdodC1hLmxlZnQsaGVpZ2h0OmEuYm90dG9tLWEudG9wLHg6YS5sZWZ0LHk6YS50b3B9fWZ1bmN0aW9uIGk0KHQpe3JldHVybiBWQyh0KX1mdW5jdGlvbiBvNCh0LGUsbil7Y29uc3Qgcj1HcihlKSxpPVRpKGUpLG89bj09PSJmaXhlZCIsbD1pbCh0LCEwLG8sZSk7bGV0IHM9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH07Y29uc3QgYT12bygwKTtpZihyfHwhciYmIW8paWYoKHlvKGUpIT09ImJvZHkifHxIdShpKSkmJihzPVVmKGUpKSxyKXtjb25zdCB1PWlsKGUsITAsbyxlKTthLng9dS54K2UuY2xpZW50TGVmdCxhLnk9dS55K2UuY2xpZW50VG9wfWVsc2UgaSYmKGEueD1LQyhpKSk7cmV0dXJue3g6bC5sZWZ0K3Muc2Nyb2xsTGVmdC1hLngseTpsLnRvcCtzLnNjcm9sbFRvcC1hLnksd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9fWZ1bmN0aW9uIEd4KHQsZSl7cmV0dXJuIUdyKHQpfHxhcih0KS5wb3NpdGlvbj09PSJmaXhlZCI/bnVsbDplP2UodCk6dC5vZmZzZXRQYXJlbnR9ZnVuY3Rpb24gR0ModCxlKXtjb25zdCBuPVVuKHQpO2lmKCFHcih0KSlyZXR1cm4gbjtsZXQgcj1HeCh0LGUpO2Zvcig7ciYmWjUocikmJmFyKHIpLnBvc2l0aW9uPT09InN0YXRpYyI7KXI9R3gocixlKTtyZXR1cm4gciYmKHlvKHIpPT09Imh0bWwifHx5byhyKT09PSJib2R5IiYmYXIocikucG9zaXRpb249PT0ic3RhdGljIiYmIVV2KHIpKT9uOnJ8fEc1KHQpfHxufWNvbnN0IGw0PWFzeW5jIGZ1bmN0aW9uKHQpe2xldHtyZWZlcmVuY2U6ZSxmbG9hdGluZzpuLHN0cmF0ZWd5OnJ9PXQ7Y29uc3QgaT10aGlzLmdldE9mZnNldFBhcmVudHx8R0Msbz10aGlzLmdldERpbWVuc2lvbnM7cmV0dXJue3JlZmVyZW5jZTpvNChlLGF3YWl0IGkobiksciksZmxvYXRpbmc6e3g6MCx5OjAsLi4uYXdhaXQgbyhuKX19fTtmdW5jdGlvbiBzNCh0KXtyZXR1cm4gYXIodCkuZGlyZWN0aW9uPT09InJ0bCJ9Y29uc3QgYTQ9e2NvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0Oko1LGdldERvY3VtZW50RWxlbWVudDpUaSxnZXRDbGlwcGluZ1JlY3Q6cjQsZ2V0T2Zmc2V0UGFyZW50OkdDLGdldEVsZW1lbnRSZWN0czpsNCxnZXRDbGllbnRSZWN0czpRNSxnZXREaW1lbnNpb25zOmk0LGdldFNjYWxlOnJzLGlzRWxlbWVudDp4aSxpc1JUTDpzNH07ZnVuY3Rpb24gdTQodCxlKXtsZXQgbj1udWxsLHI7Y29uc3QgaT1UaSh0KTtmdW5jdGlvbiBvKCl7Y2xlYXJUaW1lb3V0KHIpLG4mJm4uZGlzY29ubmVjdCgpLG49bnVsbH1mdW5jdGlvbiBsKHMsYSl7cz09PXZvaWQgMCYmKHM9ITEpLGE9PT12b2lkIDAmJihhPTEpLG8oKTtjb25zdHtsZWZ0OnUsdG9wOmMsd2lkdGg6ZCxoZWlnaHQ6Zn09dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihzfHxlKCksIWR8fCFmKXJldHVybjtjb25zdCBoPUNjKGMpLGc9Q2MoaS5jbGllbnRXaWR0aC0odStkKSksbT1DYyhpLmNsaWVudEhlaWdodC0oYytmKSksdz1DYyh1KSx5PXtyb290TWFyZ2luOi1oKyJweCAiKy1nKyJweCAiKy1tKyJweCAiKy13KyJweCIsdGhyZXNob2xkOmpuKDAsZ28oMSxhKSl8fDF9O2xldCBfPSEwO2Z1bmN0aW9uIFMoRSl7Y29uc3QgJD1FWzBdLmludGVyc2VjdGlvblJhdGlvO2lmKCQhPT1hKXtpZighXylyZXR1cm4gbCgpOyQ/bCghMSwkKTpyPXNldFRpbWVvdXQoKCk9PntsKCExLDFlLTcpfSwxMDApfV89ITF9dHJ5e249bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFMsey4uLnkscm9vdDppLm93bmVyRG9jdW1lbnR9KX1jYXRjaHtuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihTLHkpfW4ub2JzZXJ2ZSh0KX1yZXR1cm4gbCghMCksb31mdW5jdGlvbiBjNCh0LGUsbixyKXtyPT09dm9pZCAwJiYocj17fSk7Y29uc3R7YW5jZXN0b3JTY3JvbGw6aT0hMCxhbmNlc3RvclJlc2l6ZTpvPSEwLGVsZW1lbnRSZXNpemU6bD10eXBlb2YgUmVzaXplT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsbGF5b3V0U2hpZnQ6cz10eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9PSJmdW5jdGlvbiIsYW5pbWF0aW9uRnJhbWU6YT0hMX09cix1PVZ2KHQpLGM9aXx8bz9bLi4udT8kdSh1KTpbXSwuLi4kdShlKV06W107Yy5mb3JFYWNoKHY9PntpJiZ2LmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbix7cGFzc2l2ZTohMH0pLG8mJnYuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pO2NvbnN0IGQ9dSYmcz91NCh1LG4pOm51bGw7bGV0IGY9LTEsaD1udWxsO2wmJihoPW5ldyBSZXNpemVPYnNlcnZlcih2PT57bGV0W3ldPXY7eSYmeS50YXJnZXQ9PT11JiZoJiYoaC51bm9ic2VydmUoZSksY2FuY2VsQW5pbWF0aW9uRnJhbWUoZiksZj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntoJiZoLm9ic2VydmUoZSl9KSksbigpfSksdSYmIWEmJmgub2JzZXJ2ZSh1KSxoLm9ic2VydmUoZSkpO2xldCBnLG09YT9pbCh0KTpudWxsO2EmJncoKTtmdW5jdGlvbiB3KCl7Y29uc3Qgdj1pbCh0KTttJiYodi54IT09bS54fHx2LnkhPT1tLnl8fHYud2lkdGghPT1tLndpZHRofHx2LmhlaWdodCE9PW0uaGVpZ2h0KSYmbigpLG09dixnPXJlcXVlc3RBbmltYXRpb25GcmFtZSh3KX1yZXR1cm4gbigpLCgpPT57Yy5mb3JFYWNoKHY9PntpJiZ2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsbiksbyYmdi5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG4pfSksZCYmZCgpLGgmJmguZGlzY29ubmVjdCgpLGg9bnVsbCxhJiZjYW5jZWxBbmltYXRpb25GcmFtZShnKX19Y29uc3QgZDQ9KHQsZSxuKT0+e2NvbnN0IHI9bmV3IE1hcCxpPXtwbGF0Zm9ybTphNCwuLi5ufSxvPXsuLi5pLnBsYXRmb3JtLF9jOnJ9O3JldHVybiB6NSh0LGUsey4uLmkscGxhdGZvcm06b30pfSxmND10PT57ZnVuY3Rpb24gZShuKXtyZXR1cm57fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sImN1cnJlbnQiKX1yZXR1cm57bmFtZToiYXJyb3ciLG9wdGlvbnM6dCxmbihuKXtjb25zdHtlbGVtZW50OnIscGFkZGluZzppfT10eXBlb2YgdD09ImZ1bmN0aW9uIj90KG4pOnQ7cmV0dXJuIHImJmUocik/ci5jdXJyZW50IT1udWxsP1d4KHtlbGVtZW50OnIuY3VycmVudCxwYWRkaW5nOml9KS5mbihuKTp7fTpyP1d4KHtlbGVtZW50OnIscGFkZGluZzppfSkuZm4obik6e319fX07dmFyIEdjPXR5cGVvZiBkb2N1bWVudDwidSI/cC51c2VMYXlvdXRFZmZlY3Q6cC51c2VFZmZlY3Q7ZnVuY3Rpb24gZWYodCxlKXtpZih0PT09ZSlyZXR1cm4hMDtpZih0eXBlb2YgdCE9dHlwZW9mIGUpcmV0dXJuITE7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiImJnQudG9TdHJpbmcoKT09PWUudG9TdHJpbmcoKSlyZXR1cm4hMDtsZXQgbixyLGk7aWYodCYmZSYmdHlwZW9mIHQ9PSJvYmplY3QiKXtpZihBcnJheS5pc0FycmF5KHQpKXtpZihuPXQubGVuZ3RoLG4hPWUubGVuZ3RoKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspaWYoIWVmKHRbcl0sZVtyXSkpcmV0dXJuITE7cmV0dXJuITB9aWYoaT1PYmplY3Qua2V5cyh0KSxuPWkubGVuZ3RoLG4hPT1PYmplY3Qua2V5cyhlKS5sZW5ndGgpcmV0dXJuITE7Zm9yKHI9bjtyLS0hPT0wOylpZighe30uaGFzT3duUHJvcGVydHkuY2FsbChlLGlbcl0pKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspe2NvbnN0IG89aVtyXTtpZighKG89PT0iX293bmVyIiYmdC4kJHR5cGVvZikmJiFlZih0W29dLGVbb10pKXJldHVybiExfXJldHVybiEwfXJldHVybiB0IT09dCYmZSE9PWV9ZnVuY3Rpb24gWUModCl7cmV0dXJuIHR5cGVvZiB3aW5kb3c+InUiPzE6KHQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5kZXZpY2VQaXhlbFJhdGlvfHwxfWZ1bmN0aW9uIFl4KHQsZSl7Y29uc3Qgbj1ZQyh0KTtyZXR1cm4gTWF0aC5yb3VuZChlKm4pL259ZnVuY3Rpb24gWHgodCl7Y29uc3QgZT1wLnVzZVJlZih0KTtyZXR1cm4gR2MoKCk9PntlLmN1cnJlbnQ9dH0pLGV9ZnVuY3Rpb24gaDQodCl7dD09PXZvaWQgMCYmKHQ9e30pO2NvbnN0e3BsYWNlbWVudDplPSJib3R0b20iLHN0cmF0ZWd5Om49ImFic29sdXRlIixtaWRkbGV3YXJlOnI9W10scGxhdGZvcm06aSxlbGVtZW50czp7cmVmZXJlbmNlOm8sZmxvYXRpbmc6bH09e30sdHJhbnNmb3JtOnM9ITAsd2hpbGVFbGVtZW50c01vdW50ZWQ6YSxvcGVuOnV9PXQsW2MsZF09cC51c2VTdGF0ZSh7eDowLHk6MCxzdHJhdGVneTpuLHBsYWNlbWVudDplLG1pZGRsZXdhcmVEYXRhOnt9LGlzUG9zaXRpb25lZDohMX0pLFtmLGhdPXAudXNlU3RhdGUocik7ZWYoZixyKXx8aChyKTtjb25zdFtnLG1dPXAudXNlU3RhdGUobnVsbCksW3csdl09cC51c2VTdGF0ZShudWxsKSx5PXAudXNlQ2FsbGJhY2soUj0+e1IhPSQuY3VycmVudCYmKCQuY3VycmVudD1SLG0oUikpfSxbbV0pLF89cC51c2VDYWxsYmFjayhSPT57UiE9PUMuY3VycmVudCYmKEMuY3VycmVudD1SLHYoUikpfSxbdl0pLFM9b3x8ZyxFPWx8fHcsJD1wLnVzZVJlZihudWxsKSxDPXAudXNlUmVmKG51bGwpLE49cC51c2VSZWYoYyksQT1YeChhKSxrPVh4KGkpLE09cC51c2VDYWxsYmFjaygoKT0+e2lmKCEkLmN1cnJlbnR8fCFDLmN1cnJlbnQpcmV0dXJuO2NvbnN0IFI9e3BsYWNlbWVudDplLHN0cmF0ZWd5Om4sbWlkZGxld2FyZTpmfTtrLmN1cnJlbnQmJihSLnBsYXRmb3JtPWsuY3VycmVudCksZDQoJC5jdXJyZW50LEMuY3VycmVudCxSKS50aGVuKFA9Pntjb25zdCBiPXsuLi5QLGlzUG9zaXRpb25lZDohMH07RC5jdXJyZW50JiYhZWYoTi5jdXJyZW50LGIpJiYoTi5jdXJyZW50PWIsWXIuZmx1c2hTeW5jKCgpPT57ZChiKX0pKX0pfSxbZixlLG4sa10pO0djKCgpPT57dT09PSExJiZOLmN1cnJlbnQuaXNQb3NpdGlvbmVkJiYoTi5jdXJyZW50LmlzUG9zaXRpb25lZD0hMSxkKFI9Pih7Li4uUixpc1Bvc2l0aW9uZWQ6ITF9KSkpfSxbdV0pO2NvbnN0IEQ9cC51c2VSZWYoITEpO0djKCgpPT4oRC5jdXJyZW50PSEwLCgpPT57RC5jdXJyZW50PSExfSksW10pLEdjKCgpPT57aWYoUyYmKCQuY3VycmVudD1TKSxFJiYoQy5jdXJyZW50PUUpLFMmJkUpe2lmKEEuY3VycmVudClyZXR1cm4gQS5jdXJyZW50KFMsRSxNKTtNKCl9fSxbUyxFLE0sQV0pO2NvbnN0IGllPXAudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6JCxmbG9hdGluZzpDLHNldFJlZmVyZW5jZTp5LHNldEZsb2F0aW5nOl99KSxbeSxfXSksVj1wLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOlMsZmxvYXRpbmc6RX0pLFtTLEVdKSxLPXAudXNlTWVtbygoKT0+e2NvbnN0IFI9e3Bvc2l0aW9uOm4sbGVmdDowLHRvcDowfTtpZighVi5mbG9hdGluZylyZXR1cm4gUjtjb25zdCBQPVl4KFYuZmxvYXRpbmcsYy54KSxiPVl4KFYuZmxvYXRpbmcsYy55KTtyZXR1cm4gcz97Li4uUix0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1ArInB4LCAiK2IrInB4KSIsLi4uWUMoVi5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6InRyYW5zZm9ybSJ9fTp7cG9zaXRpb246bixsZWZ0OlAsdG9wOmJ9fSxbbixzLFYuZmxvYXRpbmcsYy54LGMueV0pO3JldHVybiBwLnVzZU1lbW8oKCk9Pih7Li4uYyx1cGRhdGU6TSxyZWZzOmllLGVsZW1lbnRzOlYsZmxvYXRpbmdTdHlsZXM6S30pLFtjLE0saWUsVixLXSl9ZnVuY3Rpb24gWEModCl7Y29uc3RbZSxuXT1wLnVzZVN0YXRlKHZvaWQgMCk7cmV0dXJuIFZuKCgpPT57aWYodCl7bih7d2lkdGg6dC5vZmZzZXRXaWR0aCxoZWlnaHQ6dC5vZmZzZXRIZWlnaHR9KTtjb25zdCByPW5ldyBSZXNpemVPYnNlcnZlcihpPT57aWYoIUFycmF5LmlzQXJyYXkoaSl8fCFpLmxlbmd0aClyZXR1cm47Y29uc3Qgbz1pWzBdO2xldCBsLHM7aWYoImJvcmRlckJveFNpemUiaW4gbyl7Y29uc3QgYT1vLmJvcmRlckJveFNpemUsdT1BcnJheS5pc0FycmF5KGEpP2FbMF06YTtsPXUuaW5saW5lU2l6ZSxzPXUuYmxvY2tTaXplfWVsc2UgbD10Lm9mZnNldFdpZHRoLHM9dC5vZmZzZXRIZWlnaHQ7bih7d2lkdGg6bCxoZWlnaHQ6c30pfSk7cmV0dXJuIHIub2JzZXJ2ZSh0LHtib3g6ImJvcmRlci1ib3gifSksKCk9PnIudW5vYnNlcnZlKHQpfWVsc2Ugbih2b2lkIDApfSxbdF0pLGV9Y29uc3QgSkM9IlBvcHBlciIsW1FDLHFDXT1hbChKQyksW3A0LGVrXT1RQyhKQyksbTQ9dD0+e2NvbnN0e19fc2NvcGVQb3BwZXI6ZSxjaGlsZHJlbjpufT10LFtyLGldPXAudXNlU3RhdGUobnVsbCk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwNCx7c2NvcGU6ZSxhbmNob3I6cixvbkFuY2hvckNoYW5nZTppfSxuKX0sZzQ9IlBvcHBlckFuY2hvciIsdjQ9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVBvcHBlcjpuLHZpcnR1YWxSZWY6ciwuLi5pfT10LG89ZWsoZzQsbiksbD1wLnVzZVJlZihudWxsKSxzPXN0KGUsbCk7cmV0dXJuIHAudXNlRWZmZWN0KCgpPT57by5vbkFuY2hvckNoYW5nZSgocj09bnVsbD92b2lkIDA6ci5jdXJyZW50KXx8bC5jdXJyZW50KX0pLHI/bnVsbDpwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt9LGkse3JlZjpzfSkpfSksdGs9IlBvcHBlckNvbnRlbnQiLFt5NCxOSV09UUModGspLHg0PXAuZm9yd2FyZFJlZigodCxlKT0+e3ZhciBuLHIsaSxvLGwscyxhLHU7Y29uc3R7X19zY29wZVBvcHBlcjpjLHNpZGU6ZD0iYm90dG9tIixzaWRlT2Zmc2V0OmY9MCxhbGlnbjpoPSJjZW50ZXIiLGFsaWduT2Zmc2V0Omc9MCxhcnJvd1BhZGRpbmc6bT0wLGF2b2lkQ29sbGlzaW9uczp3PSEwLGNvbGxpc2lvbkJvdW5kYXJ5OnY9W10sY29sbGlzaW9uUGFkZGluZzp5PTAsc3RpY2t5Ol89InBhcnRpYWwiLGhpZGVXaGVuRGV0YWNoZWQ6Uz0hMSx1cGRhdGVQb3NpdGlvblN0cmF0ZWd5OkU9Im9wdGltaXplZCIsb25QbGFjZWQ6JCwuLi5DfT10LE49ZWsodGssYyksW0Esa109cC51c2VTdGF0ZShudWxsKSxNPXN0KGUsU249PmsoU24pKSxbRCxpZV09cC51c2VTdGF0ZShudWxsKSxWPVhDKEQpLEs9KG49Vj09bnVsbD92b2lkIDA6Vi53aWR0aCkhPT1udWxsJiZuIT09dm9pZCAwP246MCxSPShyPVY9PW51bGw/dm9pZCAwOlYuaGVpZ2h0KSE9PW51bGwmJnIhPT12b2lkIDA/cjowLFA9ZCsoaCE9PSJjZW50ZXIiPyItIitoOiIiKSxiPXR5cGVvZiB5PT0ibnVtYmVyIj95Ont0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi55fSx6PUFycmF5LmlzQXJyYXkodik/djpbdl0saj16Lmxlbmd0aD4wLFo9e3BhZGRpbmc6Yixib3VuZGFyeTp6LmZpbHRlcihfNCksYWx0Qm91bmRhcnk6an0se3JlZnM6bmUsZmxvYXRpbmdTdHlsZXM6a2UscGxhY2VtZW50OnllLGlzUG9zaXRpb25lZDpXZSxtaWRkbGV3YXJlRGF0YTpGZX09aDQoe3N0cmF0ZWd5OiJmaXhlZCIscGxhY2VtZW50OlAsd2hpbGVFbGVtZW50c01vdW50ZWQ6KC4uLlNuKT0+YzQoLi4uU24se2FuaW1hdGlvbkZyYW1lOkU9PT0iYWx3YXlzIn0pLGVsZW1lbnRzOntyZWZlcmVuY2U6Ti5hbmNob3J9LG1pZGRsZXdhcmU6W1c1KHttYWluQXhpczpmK1IsYWxpZ25tZW50QXhpczpnfSksdyYmVjUoe21haW5BeGlzOiEwLGNyb3NzQXhpczohMSxsaW1pdGVyOl89PT0icGFydGlhbCI/SDUoKTp2b2lkIDAsLi4uWn0pLHcmJkY1KHsuLi5afSksSzUoey4uLlosYXBwbHk6KHtlbGVtZW50czpTbixyZWN0czpjcixhdmFpbGFibGVXaWR0aDpqZSxhdmFpbGFibGVIZWlnaHQ6VHR9KT0+e2NvbnN0e3dpZHRoOmF0LGhlaWdodDpsbn09Y3IucmVmZXJlbmNlLEVuPVNuLmZsb2F0aW5nLnN0eWxlO0VuLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgiLGAke2plfXB4YCksRW4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQiLGAke1R0fXB4YCksRW4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCIsYCR7YXR9cHhgKSxFbi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCIsYCR7bG59cHhgKX19KSxEJiZmNCh7ZWxlbWVudDpELHBhZGRpbmc6bX0pLHc0KHthcnJvd1dpZHRoOkssYXJyb3dIZWlnaHQ6Un0pLFMmJkI1KHtzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5afSldfSksW3RlLEllXT1uayh5ZSksJGU9ZW4oJCk7Vm4oKCk9PntXZSYmKCRlPT1udWxsfHwkZSgpKX0sW1dlLCRlXSk7Y29uc3QgUmU9KGk9RmUuYXJyb3cpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS54LFNlPShvPUZlLmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueSxMZT0oKGw9RmUuYXJyb3cpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jZW50ZXJPZmZzZXQpIT09MCxbSmUsV3RdPXAudXNlU3RhdGUoKTtyZXR1cm4gVm4oKCk9PntBJiZXdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShBKS56SW5kZXgpfSxbQV0pLHAuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOm5lLnNldEZsb2F0aW5nLCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXIiOiIiLHN0eWxlOnsuLi5rZSx0cmFuc2Zvcm06V2U/a2UudHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTIwMCUpIixtaW5XaWR0aDoibWF4LWNvbnRlbnQiLHpJbmRleDpKZSwiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6WyhzPUZlLnRyYW5zZm9ybU9yaWdpbik9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLngsKGE9RmUudHJhbnNmb3JtT3JpZ2luKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEueV0uam9pbigiICIpfSxkaXI6dC5kaXJ9LHAuY3JlYXRlRWxlbWVudCh5NCx7c2NvcGU6YyxwbGFjZWRTaWRlOnRlLG9uQXJyb3dDaGFuZ2U6aWUsYXJyb3dYOlJlLGFycm93WTpTZSxzaG91bGRIaWRlQXJyb3c6TGV9LHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2UoeyJkYXRhLXNpZGUiOnRlLCJkYXRhLWFsaWduIjpJZX0sQyx7cmVmOk0sc3R5bGU6ey4uLkMuc3R5bGUsYW5pbWF0aW9uOldlP3ZvaWQgMDoibm9uZSIsb3BhY2l0eToodT1GZS5oaWRlKSE9PW51bGwmJnUhPT12b2lkIDAmJnUucmVmZXJlbmNlSGlkZGVuPzA6dm9pZCAwfX0pKSkpfSk7ZnVuY3Rpb24gXzQodCl7cmV0dXJuIHQhPT1udWxsfWNvbnN0IHc0PXQ9Pih7bmFtZToidHJhbnNmb3JtT3JpZ2luIixvcHRpb25zOnQsZm4oZSl7dmFyIG4scixpLG8sbDtjb25zdHtwbGFjZW1lbnQ6cyxyZWN0czphLG1pZGRsZXdhcmVEYXRhOnV9PWUsZD0oKG49dS5hcnJvdyk9PT1udWxsfHxuPT09dm9pZCAwP3ZvaWQgMDpuLmNlbnRlck9mZnNldCkhPT0wLGY9ZD8wOnQuYXJyb3dXaWR0aCxoPWQ/MDp0LmFycm93SGVpZ2h0LFtnLG1dPW5rKHMpLHc9e3N0YXJ0OiIwJSIsY2VudGVyOiI1MCUiLGVuZDoiMTAwJSJ9W21dLHY9KChyPShpPXUuYXJyb3cpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS54KSE9PW51bGwmJnIhPT12b2lkIDA/cjowKStmLzIseT0oKG89KGw9dS5hcnJvdyk9PT1udWxsfHxsPT09dm9pZCAwP3ZvaWQgMDpsLnkpIT09bnVsbCYmbyE9PXZvaWQgMD9vOjApK2gvMjtsZXQgXz0iIixTPSIiO3JldHVybiBnPT09ImJvdHRvbSI/KF89ZD93OmAke3Z9cHhgLFM9YCR7LWh9cHhgKTpnPT09InRvcCI/KF89ZD93OmAke3Z9cHhgLFM9YCR7YS5mbG9hdGluZy5oZWlnaHQraH1weGApOmc9PT0icmlnaHQiPyhfPWAkey1ofXB4YCxTPWQ/dzpgJHt5fXB4YCk6Zz09PSJsZWZ0IiYmKF89YCR7YS5mbG9hdGluZy53aWR0aCtofXB4YCxTPWQ/dzpgJHt5fXB4YCkse2RhdGE6e3g6Xyx5OlN9fX19KTtmdW5jdGlvbiBuayh0KXtjb25zdFtlLG49ImNlbnRlciJdPXQuc3BsaXQoIi0iKTtyZXR1cm5bZSxuXX1jb25zdCBTND1tNCxFND12NCxDND14NCxrND1wLmZvcndhcmRSZWYoKHQsZSk9Pnt2YXIgbjtjb25zdHtjb250YWluZXI6cj1nbG9iYWxUaGlzPT1udWxsfHwobj1nbG9iYWxUaGlzLmRvY3VtZW50KT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uYm9keSwuLi5pfT10O3JldHVybiByP0J3LmNyZWF0ZVBvcnRhbChwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt9LGkse3JlZjplfSkpLHIpOm51bGx9KTtmdW5jdGlvbiBfcyh7cHJvcDp0LGRlZmF1bHRQcm9wOmUsb25DaGFuZ2U6bj0oKT0+e319KXtjb25zdFtyLGldPWI0KHtkZWZhdWx0UHJvcDplLG9uQ2hhbmdlOm59KSxvPXQhPT12b2lkIDAsbD1vP3Q6cixzPWVuKG4pLGE9cC51c2VDYWxsYmFjayh1PT57aWYobyl7Y29uc3QgZD10eXBlb2YgdT09ImZ1bmN0aW9uIj91KHQpOnU7ZCE9PXQmJnMoZCl9ZWxzZSBpKHUpfSxbbyx0LGksc10pO3JldHVybltsLGFdfWZ1bmN0aW9uIGI0KHtkZWZhdWx0UHJvcDp0LG9uQ2hhbmdlOmV9KXtjb25zdCBuPXAudXNlU3RhdGUodCksW3JdPW4saT1wLnVzZVJlZihyKSxvPWVuKGUpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2kuY3VycmVudCE9PXImJihvKHIpLGkuY3VycmVudD1yKX0sW3IsaSxvXSksbn1mdW5jdGlvbiByayh0KXtjb25zdCBlPXAudXNlUmVmKHt2YWx1ZTp0LHByZXZpb3VzOnR9KTtyZXR1cm4gcC51c2VNZW1vKCgpPT4oZS5jdXJyZW50LnZhbHVlIT09dCYmKGUuY3VycmVudC5wcmV2aW91cz1lLmN1cnJlbnQudmFsdWUsZS5jdXJyZW50LnZhbHVlPXQpLGUuY3VycmVudC5wcmV2aW91cyksW3RdKX1jb25zdCAkND1wLmZvcndhcmRSZWYoKHQsZSk9PnAuY3JlYXRlRWxlbWVudChLZS5zcGFuLG9lKHt9LHQse3JlZjplLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGJvcmRlcjowLHdpZHRoOjEsaGVpZ2h0OjEscGFkZGluZzowLG1hcmdpbjotMSxvdmVyZmxvdzoiaGlkZGVuIixjbGlwOiJyZWN0KDAsIDAsIDAsIDApIix3aGl0ZVNwYWNlOiJub3dyYXAiLHdvcmRXcmFwOiJub3JtYWwiLC4uLnQuc3R5bGV9fSkpKTt2YXIgVDQ9ZnVuY3Rpb24odCl7aWYodHlwZW9mIGRvY3VtZW50PiJ1IilyZXR1cm4gbnVsbDt2YXIgZT1BcnJheS5pc0FycmF5KHQpP3RbMF06dDtyZXR1cm4gZS5vd25lckRvY3VtZW50LmJvZHl9LGtsPW5ldyBXZWFrTWFwLGtjPW5ldyBXZWFrTWFwLGJjPXt9LEtoPTAsaWs9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJih0Lmhvc3R8fGlrKHQucGFyZW50Tm9kZSkpfSxOND1mdW5jdGlvbih0LGUpe3JldHVybiBlLm1hcChmdW5jdGlvbihuKXtpZih0LmNvbnRhaW5zKG4pKXJldHVybiBuO3ZhciByPWlrKG4pO3JldHVybiByJiZ0LmNvbnRhaW5zKHIpP3I6KGNvbnNvbGUuZXJyb3IoImFyaWEtaGlkZGVuIixuLCJpbiBub3QgY29udGFpbmVkIGluc2lkZSIsdCwiLiBEb2luZyBub3RoaW5nIiksbnVsbCl9KS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuISFufSl9LFI0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPU40KGUsQXJyYXkuaXNBcnJheSh0KT90Olt0XSk7YmNbbl18fChiY1tuXT1uZXcgV2Vha01hcCk7dmFyIG89YmNbbl0sbD1bXSxzPW5ldyBTZXQsYT1uZXcgU2V0KGkpLHU9ZnVuY3Rpb24oZCl7IWR8fHMuaGFzKGQpfHwocy5hZGQoZCksdShkLnBhcmVudE5vZGUpKX07aS5mb3JFYWNoKHUpO3ZhciBjPWZ1bmN0aW9uKGQpeyFkfHxhLmhhcyhkKXx8QXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkLmNoaWxkcmVuLGZ1bmN0aW9uKGYpe2lmKHMuaGFzKGYpKWMoZik7ZWxzZXt2YXIgaD1mLmdldEF0dHJpYnV0ZShyKSxnPWghPT1udWxsJiZoIT09ImZhbHNlIixtPShrbC5nZXQoZil8fDApKzEsdz0oby5nZXQoZil8fDApKzE7a2wuc2V0KGYsbSksby5zZXQoZix3KSxsLnB1c2goZiksbT09PTEmJmcmJmtjLnNldChmLCEwKSx3PT09MSYmZi5zZXRBdHRyaWJ1dGUobiwidHJ1ZSIpLGd8fGYuc2V0QXR0cmlidXRlKHIsInRydWUiKX19KX07cmV0dXJuIGMoZSkscy5jbGVhcigpLEtoKyssZnVuY3Rpb24oKXtsLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGY9a2wuZ2V0KGQpLTEsaD1vLmdldChkKS0xO2tsLnNldChkLGYpLG8uc2V0KGQsaCksZnx8KGtjLmhhcyhkKXx8ZC5yZW1vdmVBdHRyaWJ1dGUociksa2MuZGVsZXRlKGQpKSxofHxkLnJlbW92ZUF0dHJpYnV0ZShuKX0pLEtoLS0sS2h8fChrbD1uZXcgV2Vha01hcCxrbD1uZXcgV2Vha01hcCxrYz1uZXcgV2Vha01hcCxiYz17fSl9fSxPND1mdW5jdGlvbih0LGUsbil7bj09PXZvaWQgMCYmKG49ImRhdGEtYXJpYS1oaWRkZW4iKTt2YXIgcj1BcnJheS5mcm9tKEFycmF5LmlzQXJyYXkodCk/dDpbdF0pLGk9ZXx8VDQodCk7cmV0dXJuIGk/KHIucHVzaC5hcHBseShyLEFycmF5LmZyb20oaS5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1saXZlXSIpKSksUjQocixpLG4sImFyaWEtaGlkZGVuIikpOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxEcj1mdW5jdGlvbigpe3JldHVybiBEcj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIG4scj0xLGk9YXJndW1lbnRzLmxlbmd0aDtyPGk7cisrKXtuPWFyZ3VtZW50c1tyXTtmb3IodmFyIG8gaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixvKSYmKGVbb109bltvXSl9cmV0dXJuIGV9LERyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gb2sodCxlKXt2YXIgbj17fTtmb3IodmFyIHIgaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKSYmZS5pbmRleE9mKHIpPDAmJihuW3JdPXRbcl0pO2lmKHQhPW51bGwmJnR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzPT0iZnVuY3Rpb24iKWZvcih2YXIgaT0wLHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtpPHIubGVuZ3RoO2krKyllLmluZGV4T2YocltpXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQscltpXSkmJihuW3JbaV1dPXRbcltpXV0pO3JldHVybiBufWZ1bmN0aW9uIFA0KHQsZSxuKXtpZihufHxhcmd1bWVudHMubGVuZ3RoPT09Milmb3IodmFyIHI9MCxpPWUubGVuZ3RoLG87cjxpO3IrKykob3x8IShyIGluIGUpKSYmKG98fChvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUsMCxyKSksb1tyXT1lW3JdKTtyZXR1cm4gdC5jb25jYXQob3x8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfXZhciBZYz0icmlnaHQtc2Nyb2xsLWJhci1wb3NpdGlvbiIsWGM9IndpZHRoLWJlZm9yZS1zY3JvbGwtYmFyIixBND0id2l0aC1zY3JvbGwtYmFycy1oaWRkZW4iLE00PSItLXJlbW92ZWQtYm9keS1zY3JvbGwtYmFyLXNpemUiO2Z1bmN0aW9uIEw0KHQsZSl7cmV0dXJuIHR5cGVvZiB0PT0iZnVuY3Rpb24iP3QoZSk6dCYmKHQuY3VycmVudD1lKSx0fWZ1bmN0aW9uIEQ0KHQsZSl7dmFyIG49cC51c2VTdGF0ZShmdW5jdGlvbigpe3JldHVybnt2YWx1ZTp0LGNhbGxiYWNrOmUsZmFjYWRlOntnZXQgY3VycmVudCgpe3JldHVybiBuLnZhbHVlfSxzZXQgY3VycmVudChyKXt2YXIgaT1uLnZhbHVlO2khPT1yJiYobi52YWx1ZT1yLG4uY2FsbGJhY2socixpKSl9fX19KVswXTtyZXR1cm4gbi5jYWxsYmFjaz1lLG4uZmFjYWRlfWZ1bmN0aW9uIEk0KHQsZSl7cmV0dXJuIEQ0KGV8fG51bGwsZnVuY3Rpb24obil7cmV0dXJuIHQuZm9yRWFjaChmdW5jdGlvbihyKXtyZXR1cm4gTDQocixuKX0pfSl9ZnVuY3Rpb24gajQodCl7cmV0dXJuIHR9ZnVuY3Rpb24gejQodCxlKXtlPT09dm9pZCAwJiYoZT1qNCk7dmFyIG49W10scj0hMSxpPXtyZWFkOmZ1bmN0aW9uKCl7aWYocil0aHJvdyBuZXcgRXJyb3IoIlNpZGVjYXI6IGNvdWxkIG5vdCBgcmVhZGAgZnJvbSBhbiBgYXNzaWduZWRgIG1lZGl1bS4gYHJlYWRgIGNvdWxkIGJlIHVzZWQgb25seSB3aXRoIGB1c2VNZWRpdW1gLiIpO3JldHVybiBuLmxlbmd0aD9uW24ubGVuZ3RoLTFdOnR9LHVzZU1lZGl1bTpmdW5jdGlvbihvKXt2YXIgbD1lKG8scik7cmV0dXJuIG4ucHVzaChsKSxmdW5jdGlvbigpe249bi5maWx0ZXIoZnVuY3Rpb24ocyl7cmV0dXJuIHMhPT1sfSl9fSxhc3NpZ25TeW5jTWVkaXVtOmZ1bmN0aW9uKG8pe2ZvcihyPSEwO24ubGVuZ3RoOyl7dmFyIGw9bjtuPVtdLGwuZm9yRWFjaChvKX1uPXtwdXNoOmZ1bmN0aW9uKHMpe3JldHVybiBvKHMpfSxmaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbn19fSxhc3NpZ25NZWRpdW06ZnVuY3Rpb24obyl7cj0hMDt2YXIgbD1bXTtpZihuLmxlbmd0aCl7dmFyIHM9bjtuPVtdLHMuZm9yRWFjaChvKSxsPW59dmFyIGE9ZnVuY3Rpb24oKXt2YXIgYz1sO2w9W10sYy5mb3JFYWNoKG8pfSx1PWZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYSl9O3UoKSxuPXtwdXNoOmZ1bmN0aW9uKGMpe2wucHVzaChjKSx1KCl9LGZpbHRlcjpmdW5jdGlvbihjKXtyZXR1cm4gbD1sLmZpbHRlcihjKSxufX19fTtyZXR1cm4gaX1mdW5jdGlvbiBGNCh0KXt0PT09dm9pZCAwJiYodD17fSk7dmFyIGU9ejQobnVsbCk7cmV0dXJuIGUub3B0aW9ucz1Ecih7YXN5bmM6ITAsc3NyOiExfSx0KSxlfXZhciBsaz1mdW5jdGlvbih0KXt2YXIgZT10LnNpZGVDYXIsbj1vayh0LFsic2lkZUNhciJdKTtpZighZSl0aHJvdyBuZXcgRXJyb3IoIlNpZGVjYXI6IHBsZWFzZSBwcm92aWRlIGBzaWRlQ2FyYCBwcm9wZXJ0eSB0byBpbXBvcnQgdGhlIHJpZ2h0IGNhciIpO3ZhciByPWUucmVhZCgpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiU2lkZWNhciBtZWRpdW0gbm90IGZvdW5kIik7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChyLERyKHt9LG4pKX07bGsuaXNTaWRlQ2FyRXhwb3J0PSEwO2Z1bmN0aW9uIEI0KHQsZSl7cmV0dXJuIHQudXNlTWVkaXVtKGUpLGxrfXZhciBzaz1GNCgpLFpoPWZ1bmN0aW9uKCl7fSxXZj1wLmZvcndhcmRSZWYoZnVuY3Rpb24odCxlKXt2YXIgbj1wLnVzZVJlZihudWxsKSxyPXAudXNlU3RhdGUoe29uU2Nyb2xsQ2FwdHVyZTpaaCxvbldoZWVsQ2FwdHVyZTpaaCxvblRvdWNoTW92ZUNhcHR1cmU6Wmh9KSxpPXJbMF0sbz1yWzFdLGw9dC5mb3J3YXJkUHJvcHMscz10LmNoaWxkcmVuLGE9dC5jbGFzc05hbWUsdT10LnJlbW92ZVNjcm9sbEJhcixjPXQuZW5hYmxlZCxkPXQuc2hhcmRzLGY9dC5zaWRlQ2FyLGg9dC5ub0lzb2xhdGlvbixnPXQuaW5lcnQsbT10LmFsbG93UGluY2hab29tLHc9dC5hcyx2PXc9PT12b2lkIDA/ImRpdiI6dyx5PW9rKHQsWyJmb3J3YXJkUHJvcHMiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsInJlbW92ZVNjcm9sbEJhciIsImVuYWJsZWQiLCJzaGFyZHMiLCJzaWRlQ2FyIiwibm9Jc29sYXRpb24iLCJpbmVydCIsImFsbG93UGluY2hab29tIiwiYXMiXSksXz1mLFM9STQoW24sZV0pLEU9RHIoRHIoe30seSksaSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwsYyYmcC5jcmVhdGVFbGVtZW50KF8se3NpZGVDYXI6c2sscmVtb3ZlU2Nyb2xsQmFyOnUsc2hhcmRzOmQsbm9Jc29sYXRpb246aCxpbmVydDpnLHNldENhbGxiYWNrczpvLGFsbG93UGluY2hab29tOiEhbSxsb2NrUmVmOm59KSxsP3AuY2xvbmVFbGVtZW50KHAuQ2hpbGRyZW4ub25seShzKSxEcihEcih7fSxFKSx7cmVmOlN9KSk6cC5jcmVhdGVFbGVtZW50KHYsRHIoe30sRSx7Y2xhc3NOYW1lOmEscmVmOlN9KSxzKSl9KTtXZi5kZWZhdWx0UHJvcHM9e2VuYWJsZWQ6ITAscmVtb3ZlU2Nyb2xsQmFyOiEwLGluZXJ0OiExfTtXZi5jbGFzc05hbWVzPXtmdWxsV2lkdGg6WGMsemVyb1JpZ2h0OlljfTt2YXIgSngsVTQ9ZnVuY3Rpb24oKXtpZihKeClyZXR1cm4gSng7aWYodHlwZW9mIF9fd2VicGFja19ub25jZV9fPCJ1IilyZXR1cm4gX193ZWJwYWNrX25vbmNlX199O2Z1bmN0aW9uIFc0KCl7aWYoIWRvY3VtZW50KXJldHVybiBudWxsO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7dC50eXBlPSJ0ZXh0L2NzcyI7dmFyIGU9VTQoKTtyZXR1cm4gZSYmdC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixlKSx0fWZ1bmN0aW9uIFY0KHQsZSl7dC5zdHlsZVNoZWV0P3Quc3R5bGVTaGVldC5jc3NUZXh0PWU6dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9ZnVuY3Rpb24gSDQodCl7dmFyIGU9ZG9jdW1lbnQuaGVhZHx8ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtlLmFwcGVuZENoaWxkKHQpfXZhciBLND1mdW5jdGlvbigpe3ZhciB0PTAsZT1udWxsO3JldHVybnthZGQ6ZnVuY3Rpb24obil7dD09MCYmKGU9VzQoKSkmJihWNChlLG4pLEg0KGUpKSx0Kyt9LHJlbW92ZTpmdW5jdGlvbigpe3QtLSwhdCYmZSYmKGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9bnVsbCl9fX0sWjQ9ZnVuY3Rpb24oKXt2YXIgdD1LNCgpO3JldHVybiBmdW5jdGlvbihlLG4pe3AudXNlRWZmZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHQuYWRkKGUpLGZ1bmN0aW9uKCl7dC5yZW1vdmUoKX19LFtlJiZuXSl9fSxhaz1mdW5jdGlvbigpe3ZhciB0PVo0KCksZT1mdW5jdGlvbihuKXt2YXIgcj1uLnN0eWxlcyxpPW4uZHluYW1pYztyZXR1cm4gdChyLGkpLG51bGx9O3JldHVybiBlfSxHND17bGVmdDowLHRvcDowLHJpZ2h0OjAsZ2FwOjB9LEdoPWZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0fHwiIiwxMCl8fDB9LFk0PWZ1bmN0aW9uKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLG49ZVt0PT09InBhZGRpbmciPyJwYWRkaW5nTGVmdCI6Im1hcmdpbkxlZnQiXSxyPWVbdD09PSJwYWRkaW5nIj8icGFkZGluZ1RvcCI6Im1hcmdpblRvcCJdLGk9ZVt0PT09InBhZGRpbmciPyJwYWRkaW5nUmlnaHQiOiJtYXJnaW5SaWdodCJdO3JldHVybltHaChuKSxHaChyKSxHaChpKV19LFg0PWZ1bmN0aW9uKHQpe2lmKHQ9PT12b2lkIDAmJih0PSJtYXJnaW4iKSx0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4gRzQ7dmFyIGU9WTQodCksbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgscj13aW5kb3cuaW5uZXJXaWR0aDtyZXR1cm57bGVmdDplWzBdLHRvcDplWzFdLHJpZ2h0OmVbMl0sZ2FwOk1hdGgubWF4KDAsci1uK2VbMl0tZVswXSl9fSxKND1haygpLFE0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPXQubGVmdCxvPXQudG9wLGw9dC5yaWdodCxzPXQuZ2FwO3JldHVybiBuPT09dm9pZCAwJiYobj0ibWFyZ2luIiksYAogIC5gLmNvbmNhdChBNCxgIHsKICAgb3ZlcmZsb3c6IGhpZGRlbiBgKS5jb25jYXQocixgOwogICBwYWRkaW5nLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICB9CiAgYm9keSB7CiAgICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChyLGA7CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgYCkuY29uY2F0KFtlJiYicG9zaXRpb246IHJlbGF0aXZlICIuY29uY2F0KHIsIjsiKSxuPT09Im1hcmdpbiImJmAKICAgIHBhZGRpbmctbGVmdDogYC5jb25jYXQoaSxgcHg7CiAgICBwYWRkaW5nLXRvcDogYCkuY29uY2F0KG8sYHB4OwogICAgcGFkZGluZy1yaWdodDogYCkuY29uY2F0KGwsYHB4OwogICAgbWFyZ2luLWxlZnQ6MDsKICAgIG1hcmdpbi10b3A6MDsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHMsInB4ICIpLmNvbmNhdChyLGA7CiAgICBgKSxuPT09InBhZGRpbmciJiYicGFkZGluZy1yaWdodDogIi5jb25jYXQocywicHggIikuY29uY2F0KHIsIjsiKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiIpLGAKICB9CiAgCiAgLmApLmNvbmNhdChZYyxgIHsKICAgIHJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICB9CiAgCiAgLmApLmNvbmNhdChYYyxgIHsKICAgIG1hcmdpbi1yaWdodDogYCkuY29uY2F0KHMsInB4ICIpLmNvbmNhdChyLGA7CiAgfQogIAogIC5gKS5jb25jYXQoWWMsIiAuIikuY29uY2F0KFljLGAgewogICAgcmlnaHQ6IDAgYCkuY29uY2F0KHIsYDsKICB9CiAgCiAgLmApLmNvbmNhdChYYywiIC4iKS5jb25jYXQoWGMsYCB7CiAgICBtYXJnaW4tcmlnaHQ6IDAgYCkuY29uY2F0KHIsYDsKICB9CiAgCiAgYm9keSB7CiAgICBgKS5jb25jYXQoTTQsIjogIikuY29uY2F0KHMsYHB4OwogIH0KYCl9LHE0PWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9SZWxhdGl2ZSxuPXQubm9JbXBvcnRhbnQscj10LmdhcE1vZGUsaT1yPT09dm9pZCAwPyJtYXJnaW4iOnIsbz1wLnVzZU1lbW8oZnVuY3Rpb24oKXtyZXR1cm4gWDQoaSl9LFtpXSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChKNCx7c3R5bGVzOlE0KG8sIWUsaSxuPyIiOiIhaW1wb3J0YW50Iil9KX0sVm09ITE7aWYodHlwZW9mIHdpbmRvdzwidSIpdHJ5e3ZhciAkYz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVm09ITAsITB9fSk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLCRjLCRjKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsJGMsJGMpfWNhdGNoe1ZtPSExfXZhciBibD1WbT97cGFzc2l2ZTohMX06ITEsZTM9ZnVuY3Rpb24odCl7cmV0dXJuIHQudGFnTmFtZT09PSJURVhUQVJFQSJ9LHVrPWZ1bmN0aW9uKHQsZSl7dmFyIG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodCk7cmV0dXJuIG5bZV0hPT0iaGlkZGVuIiYmIShuLm92ZXJmbG93WT09PW4ub3ZlcmZsb3dYJiYhZTModCkmJm5bZV09PT0idmlzaWJsZSIpfSx0Mz1mdW5jdGlvbih0KXtyZXR1cm4gdWsodCwib3ZlcmZsb3dZIil9LG4zPWZ1bmN0aW9uKHQpe3JldHVybiB1ayh0LCJvdmVyZmxvd1giKX0sUXg9ZnVuY3Rpb24odCxlKXt2YXIgbj1lO2Rve3R5cGVvZiBTaGFkb3dSb290PCJ1IiYmbiBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QmJihuPW4uaG9zdCk7dmFyIHI9Y2sodCxuKTtpZihyKXt2YXIgaT1kayh0LG4pLG89aVsxXSxsPWlbMl07aWYobz5sKXJldHVybiEwfW49bi5wYXJlbnROb2RlfXdoaWxlKG4mJm4hPT1kb2N1bWVudC5ib2R5KTtyZXR1cm4hMX0scjM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zY3JvbGxUb3Asbj10LnNjcm9sbEhlaWdodCxyPXQuY2xpZW50SGVpZ2h0O3JldHVybltlLG4scl19LGkzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2Nyb2xsTGVmdCxuPXQuc2Nyb2xsV2lkdGgscj10LmNsaWVudFdpZHRoO3JldHVybltlLG4scl19LGNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT0idiI/dDMoZSk6bjMoZSl9LGRrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT0idiI/cjMoZSk6aTMoZSl9LG8zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT0iaCImJmU9PT0icnRsIj8tMToxfSxsMz1mdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvPW8zKHQsd2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkuZGlyZWN0aW9uKSxsPW8qcixzPW4udGFyZ2V0LGE9ZS5jb250YWlucyhzKSx1PSExLGM9bD4wLGQ9MCxmPTA7ZG97dmFyIGg9ZGsodCxzKSxnPWhbMF0sbT1oWzFdLHc9aFsyXSx2PW0tdy1vKmc7KGd8fHYpJiZjayh0LHMpJiYoZCs9dixmKz1nKSxzPXMucGFyZW50Tm9kZX13aGlsZSghYSYmcyE9PWRvY3VtZW50LmJvZHl8fGEmJihlLmNvbnRhaW5zKHMpfHxlPT09cykpO3JldHVybihjJiYoaSYmZD09PTB8fCFpJiZsPmQpfHwhYyYmKGkmJmY9PT0wfHwhaSYmLWw+ZikpJiYodT0hMCksdX0sVGM9ZnVuY3Rpb24odCl7cmV0dXJuImNoYW5nZWRUb3VjaGVzImluIHQ/W3QuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCx0LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFldOlswLDBdfSxxeD1mdW5jdGlvbih0KXtyZXR1cm5bdC5kZWx0YVgsdC5kZWx0YVldfSxlXz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmImN1cnJlbnQiaW4gdD90LmN1cnJlbnQ6dH0sczM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT09PWVbMF0mJnRbMV09PT1lWzFdfSxhMz1mdW5jdGlvbih0KXtyZXR1cm5gCiAgLmJsb2NrLWludGVyYWN0aXZpdHktYC5jb25jYXQodCxgIHtwb2ludGVyLWV2ZW50czogbm9uZTt9CiAgLmFsbG93LWludGVyYWN0aXZpdHktYCkuY29uY2F0KHQsYCB7cG9pbnRlci1ldmVudHM6IGFsbDt9CmApfSx1Mz0wLCRsPVtdO2Z1bmN0aW9uIGMzKHQpe3ZhciBlPXAudXNlUmVmKFtdKSxuPXAudXNlUmVmKFswLDBdKSxyPXAudXNlUmVmKCksaT1wLnVzZVN0YXRlKHUzKyspWzBdLG89cC51c2VTdGF0ZShmdW5jdGlvbigpe3JldHVybiBhaygpfSlbMF0sbD1wLnVzZVJlZih0KTtwLnVzZUVmZmVjdChmdW5jdGlvbigpe2wuY3VycmVudD10fSxbdF0pLHAudXNlRWZmZWN0KGZ1bmN0aW9uKCl7aWYodC5pbmVydCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJibG9jay1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KGkpKTt2YXIgbT1QNChbdC5sb2NrUmVmLmN1cnJlbnRdLCh0LnNoYXJkc3x8W10pLm1hcChlXyksITApLmZpbHRlcihCb29sZWFuKTtyZXR1cm4gbS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiB3LmNsYXNzTGlzdC5hZGQoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQoaSkpfSksZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQoaSkpLG0uZm9yRWFjaChmdW5jdGlvbih3KXtyZXR1cm4gdy5jbGFzc0xpc3QucmVtb3ZlKCJhbGxvdy1pbnRlcmFjdGl2aXR5LSIuY29uY2F0KGkpKX0pfX19LFt0LmluZXJ0LHQubG9ja1JlZi5jdXJyZW50LHQuc2hhcmRzXSk7dmFyIHM9cC51c2VDYWxsYmFjayhmdW5jdGlvbihtLHcpe2lmKCJ0b3VjaGVzImluIG0mJm0udG91Y2hlcy5sZW5ndGg9PT0yKXJldHVybiFsLmN1cnJlbnQuYWxsb3dQaW5jaFpvb207dmFyIHY9VGMobSkseT1uLmN1cnJlbnQsXz0iZGVsdGFYImluIG0/bS5kZWx0YVg6eVswXS12WzBdLFM9ImRlbHRhWSJpbiBtP20uZGVsdGFZOnlbMV0tdlsxXSxFLCQ9bS50YXJnZXQsQz1NYXRoLmFicyhfKT5NYXRoLmFicyhTKT8iaCI6InYiO2lmKCJ0b3VjaGVzImluIG0mJkM9PT0iaCImJiQudHlwZT09PSJyYW5nZSIpcmV0dXJuITE7dmFyIE49UXgoQywkKTtpZighTilyZXR1cm4hMDtpZihOP0U9QzooRT1DPT09InYiPyJoIjoidiIsTj1ReChDLCQpKSwhTilyZXR1cm4hMTtpZighci5jdXJyZW50JiYiY2hhbmdlZFRvdWNoZXMiaW4gbSYmKF98fFMpJiYoci5jdXJyZW50PUUpLCFFKXJldHVybiEwO3ZhciBBPXIuY3VycmVudHx8RTtyZXR1cm4gbDMoQSx3LG0sQT09PSJoIj9fOlMsITApfSxbXSksYT1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0pe3ZhciB3PW07aWYoISghJGwubGVuZ3RofHwkbFskbC5sZW5ndGgtMV0hPT1vKSl7dmFyIHY9ImRlbHRhWSJpbiB3P3F4KHcpOlRjKHcpLHk9ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS5uYW1lPT09dy50eXBlJiZFLnRhcmdldD09PXcudGFyZ2V0JiZzMyhFLmRlbHRhLHYpfSlbMF07aWYoeSYmeS5zaG91bGQpe3cuY2FuY2VsYWJsZSYmdy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1pZigheSl7dmFyIF89KGwuY3VycmVudC5zaGFyZHN8fFtdKS5tYXAoZV8pLmZpbHRlcihCb29sZWFuKS5maWx0ZXIoZnVuY3Rpb24oRSl7cmV0dXJuIEUuY29udGFpbnMody50YXJnZXQpfSksUz1fLmxlbmd0aD4wP3ModyxfWzBdKTohbC5jdXJyZW50Lm5vSXNvbGF0aW9uO1MmJncuY2FuY2VsYWJsZSYmdy5wcmV2ZW50RGVmYXVsdCgpfX19LFtdKSx1PXAudXNlQ2FsbGJhY2soZnVuY3Rpb24obSx3LHYseSl7dmFyIF89e25hbWU6bSxkZWx0YTp3LHRhcmdldDp2LHNob3VsZDp5fTtlLmN1cnJlbnQucHVzaChfKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5jdXJyZW50PWUuY3VycmVudC5maWx0ZXIoZnVuY3Rpb24oUyl7cmV0dXJuIFMhPT1ffSl9LDEpfSxbXSksYz1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0pe24uY3VycmVudD1UYyhtKSxyLmN1cnJlbnQ9dm9pZCAwfSxbXSksZD1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0pe3UobS50eXBlLHF4KG0pLG0udGFyZ2V0LHMobSx0LmxvY2tSZWYuY3VycmVudCkpfSxbXSksZj1wLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0pe3UobS50eXBlLFRjKG0pLG0udGFyZ2V0LHMobSx0LmxvY2tSZWYuY3VycmVudCkpfSxbXSk7cC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gJGwucHVzaChvKSx0LnNldENhbGxiYWNrcyh7b25TY3JvbGxDYXB0dXJlOmQsb25XaGVlbENhcHR1cmU6ZCxvblRvdWNoTW92ZUNhcHR1cmU6Zn0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIixhLGJsKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGEsYmwpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGMsYmwpLGZ1bmN0aW9uKCl7JGw9JGwuZmlsdGVyKGZ1bmN0aW9uKG0pe3JldHVybiBtIT09b30pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIixhLGJsKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLGEsYmwpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLGMsYmwpfX0sW10pO3ZhciBoPXQucmVtb3ZlU2Nyb2xsQmFyLGc9dC5pbmVydDtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxnP3AuY3JlYXRlRWxlbWVudChvLHtzdHlsZXM6YTMoaSl9KTpudWxsLGg/cC5jcmVhdGVFbGVtZW50KHE0LHtnYXBNb2RlOiJtYXJnaW4ifSk6bnVsbCl9Y29uc3QgZDM9QjQoc2ssYzMpO3ZhciBmaz1wLmZvcndhcmRSZWYoZnVuY3Rpb24odCxlKXtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KFdmLERyKHt9LHQse3JlZjplLHNpZGVDYXI6ZDN9KSl9KTtmay5jbGFzc05hbWVzPVdmLmNsYXNzTmFtZXM7Y29uc3QgZjM9ZmssaDM9WyIgIiwiRW50ZXIiLCJBcnJvd1VwIiwiQXJyb3dEb3duIl0scDM9WyIgIiwiRW50ZXIiXSxWZj0iU2VsZWN0IixbSGYsSHYsbTNdPWpDKFZmKSxbQnMsUkldPWFsKFZmLFttMyxxQ10pLEt2PXFDKCksW2czLGhsXT1CcyhWZiksW3YzLHkzXT1CcyhWZikseDM9dD0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6ZSxjaGlsZHJlbjpuLG9wZW46cixkZWZhdWx0T3BlbjppLG9uT3BlbkNoYW5nZTpvLHZhbHVlOmwsZGVmYXVsdFZhbHVlOnMsb25WYWx1ZUNoYW5nZTphLGRpcjp1LG5hbWU6YyxhdXRvQ29tcGxldGU6ZCxkaXNhYmxlZDpmLHJlcXVpcmVkOmh9PXQsZz1LdihlKSxbbSx3XT1wLnVzZVN0YXRlKG51bGwpLFt2LHldPXAudXNlU3RhdGUobnVsbCksW18sU109cC51c2VTdGF0ZSghMSksRT1ZZyh1KSxbJD0hMSxDXT1fcyh7cHJvcDpyLGRlZmF1bHRQcm9wOmksb25DaGFuZ2U6b30pLFtOLEFdPV9zKHtwcm9wOmwsZGVmYXVsdFByb3A6cyxvbkNoYW5nZTphfSksaz1wLnVzZVJlZihudWxsKSxNPW0/ISFtLmNsb3Nlc3QoImZvcm0iKTohMCxbRCxpZV09cC51c2VTdGF0ZShuZXcgU2V0KSxWPUFycmF5LmZyb20oRCkubWFwKEs9PksucHJvcHMudmFsdWUpLmpvaW4oIjsiKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KFM0LGcscC5jcmVhdGVFbGVtZW50KGczLHtyZXF1aXJlZDpoLHNjb3BlOmUsdHJpZ2dlcjptLG9uVHJpZ2dlckNoYW5nZTp3LHZhbHVlTm9kZTp2LG9uVmFsdWVOb2RlQ2hhbmdlOnksdmFsdWVOb2RlSGFzQ2hpbGRyZW46XyxvblZhbHVlTm9kZUhhc0NoaWxkcmVuQ2hhbmdlOlMsY29udGVudElkOkZmKCksdmFsdWU6TixvblZhbHVlQ2hhbmdlOkEsb3BlbjokLG9uT3BlbkNoYW5nZTpDLGRpcjpFLHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjprLGRpc2FibGVkOmZ9LHAuY3JlYXRlRWxlbWVudChIZi5Qcm92aWRlcix7c2NvcGU6ZX0scC5jcmVhdGVFbGVtZW50KHYzLHtzY29wZTp0Ll9fc2NvcGVTZWxlY3Qsb25OYXRpdmVPcHRpb25BZGQ6cC51c2VDYWxsYmFjayhLPT57aWUoUj0+bmV3IFNldChSKS5hZGQoSykpfSxbXSksb25OYXRpdmVPcHRpb25SZW1vdmU6cC51c2VDYWxsYmFjayhLPT57aWUoUj0+e2NvbnN0IFA9bmV3IFNldChSKTtyZXR1cm4gUC5kZWxldGUoSyksUH0pfSxbXSl9LG4pKSxNP3AuY3JlYXRlRWxlbWVudChnayx7a2V5OlYsImFyaWEtaGlkZGVuIjohMCxyZXF1aXJlZDpoLHRhYkluZGV4Oi0xLG5hbWU6YyxhdXRvQ29tcGxldGU6ZCx2YWx1ZTpOLG9uQ2hhbmdlOks9PkEoSy50YXJnZXQudmFsdWUpLGRpc2FibGVkOmZ9LE49PT12b2lkIDA/cC5jcmVhdGVFbGVtZW50KCJvcHRpb24iLHt2YWx1ZToiIn0pOm51bGwsQXJyYXkuZnJvbShEKSk6bnVsbCkpfSxfMz0iU2VsZWN0VHJpZ2dlciIsdzM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGRpc2FibGVkOnI9ITEsLi4uaX09dCxvPUt2KG4pLGw9aGwoXzMsbikscz1sLmRpc2FibGVkfHxyLGE9c3QoZSxsLm9uVHJpZ2dlckNoYW5nZSksdT1IdihuKSxbYyxkLGZdPXZrKGc9Pntjb25zdCBtPXUoKS5maWx0ZXIoeT0+IXkuZGlzYWJsZWQpLHc9bS5maW5kKHk9PnkudmFsdWU9PT1sLnZhbHVlKSx2PXlrKG0sZyx3KTt2IT09dm9pZCAwJiZsLm9uVmFsdWVDaGFuZ2Uodi52YWx1ZSl9KSxoPSgpPT57c3x8KGwub25PcGVuQ2hhbmdlKCEwKSxmKCkpfTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEU0LG9lKHthc0NoaWxkOiEwfSxvKSxwLmNyZWF0ZUVsZW1lbnQoS2UuYnV0dG9uLG9lKHt0eXBlOiJidXR0b24iLHJvbGU6ImNvbWJvYm94IiwiYXJpYS1jb250cm9scyI6bC5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOmwub3BlbiwiYXJpYS1yZXF1aXJlZCI6bC5yZXF1aXJlZCwiYXJpYS1hdXRvY29tcGxldGUiOiJub25lIixkaXI6bC5kaXIsImRhdGEtc3RhdGUiOmwub3Blbj8ib3BlbiI6ImNsb3NlZCIsZGlzYWJsZWQ6cywiZGF0YS1kaXNhYmxlZCI6cz8iIjp2b2lkIDAsImRhdGEtcGxhY2Vob2xkZXIiOm1rKGwudmFsdWUpPyIiOnZvaWQgMH0saSx7cmVmOmEsb25DbGljazpudChpLm9uQ2xpY2ssZz0+e2cuY3VycmVudFRhcmdldC5mb2N1cygpfSksb25Qb2ludGVyRG93bjpudChpLm9uUG9pbnRlckRvd24sZz0+e2NvbnN0IG09Zy50YXJnZXQ7bS5oYXNQb2ludGVyQ2FwdHVyZShnLnBvaW50ZXJJZCkmJm0ucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGcucG9pbnRlcklkKSxnLmJ1dHRvbj09PTAmJmcuY3RybEtleT09PSExJiYoaCgpLGwudHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmLmN1cnJlbnQ9e3g6TWF0aC5yb3VuZChnLnBhZ2VYKSx5Ok1hdGgucm91bmQoZy5wYWdlWSl9LGcucHJldmVudERlZmF1bHQoKSl9KSxvbktleURvd246bnQoaS5vbktleURvd24sZz0+e2NvbnN0IG09Yy5jdXJyZW50IT09IiI7IShnLmN0cmxLZXl8fGcuYWx0S2V5fHxnLm1ldGFLZXkpJiZnLmtleS5sZW5ndGg9PT0xJiZkKGcua2V5KSwhKG0mJmcua2V5PT09IiAiKSYmaDMuaW5jbHVkZXMoZy5rZXkpJiYoaCgpLGcucHJldmVudERlZmF1bHQoKSl9KX0pKSl9KSxTMz0iU2VsZWN0VmFsdWUiLEUzPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixjbGFzc05hbWU6cixzdHlsZTppLGNoaWxkcmVuOm8scGxhY2Vob2xkZXI6bD0iIiwuLi5zfT10LGE9aGwoUzMsbikse29uVmFsdWVOb2RlSGFzQ2hpbGRyZW5DaGFuZ2U6dX09YSxjPW8hPT12b2lkIDAsZD1zdChlLGEub25WYWx1ZU5vZGVDaGFuZ2UpO3JldHVybiBWbigoKT0+e3UoYyl9LFt1LGNdKSxwLmNyZWF0ZUVsZW1lbnQoS2Uuc3BhbixvZSh7fSxzLHtyZWY6ZCxzdHlsZTp7cG9pbnRlckV2ZW50czoibm9uZSJ9fSksbWsoYS52YWx1ZSk/cC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxsKTpvKX0pLEMzPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixjaGlsZHJlbjpyLC4uLml9PXQ7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChLZS5zcGFuLG9lKHsiYXJpYS1oaWRkZW4iOiEwfSxpLHtyZWY6ZX0pLHJ8fCLilrwiKX0pLGszPXQ9PnAuY3JlYXRlRWxlbWVudChrNCxvZSh7YXNDaGlsZDohMH0sdCkpLHdzPSJTZWxlY3RDb250ZW50IixiMz1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdCBuPWhsKHdzLHQuX19zY29wZVNlbGVjdCksW3IsaV09cC51c2VTdGF0ZSgpO2lmKFZuKCgpPT57aShuZXcgRG9jdW1lbnRGcmFnbWVudCl9LFtdKSwhbi5vcGVuKXtjb25zdCBvPXI7cmV0dXJuIG8/WXIuY3JlYXRlUG9ydGFsKHAuY3JlYXRlRWxlbWVudChoayx7c2NvcGU6dC5fX3Njb3BlU2VsZWN0fSxwLmNyZWF0ZUVsZW1lbnQoSGYuU2xvdCx7c2NvcGU6dC5fX3Njb3BlU2VsZWN0fSxwLmNyZWF0ZUVsZW1lbnQoImRpdiIsbnVsbCx0LmNoaWxkcmVuKSkpLG8pOm51bGx9cmV0dXJuIHAuY3JlYXRlRWxlbWVudCgkMyxvZSh7fSx0LHtyZWY6ZX0pKX0pLGlpPTEwLFtoayxLZl09QnMod3MpLCQzPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6bixwb3NpdGlvbjpyPSJpdGVtLWFsaWduZWQiLG9uQ2xvc2VBdXRvRm9jdXM6aSxvbkVzY2FwZUtleURvd246byxvblBvaW50ZXJEb3duT3V0c2lkZTpsLHNpZGU6cyxzaWRlT2Zmc2V0OmEsYWxpZ246dSxhbGlnbk9mZnNldDpjLGFycm93UGFkZGluZzpkLGNvbGxpc2lvbkJvdW5kYXJ5OmYsY29sbGlzaW9uUGFkZGluZzpoLHN0aWNreTpnLGhpZGVXaGVuRGV0YWNoZWQ6bSxhdm9pZENvbGxpc2lvbnM6dywuLi52fT10LHk9aGwod3MsbiksW18sU109cC51c2VTdGF0ZShudWxsKSxbRSwkXT1wLnVzZVN0YXRlKG51bGwpLEM9c3QoZSx0ZT0+Uyh0ZSkpLFtOLEFdPXAudXNlU3RhdGUobnVsbCksW2ssTV09cC51c2VTdGF0ZShudWxsKSxEPUh2KG4pLFtpZSxWXT1wLnVzZVN0YXRlKCExKSxLPXAudXNlUmVmKCExKTtwLnVzZUVmZmVjdCgoKT0+e2lmKF8pcmV0dXJuIE80KF8pfSxbX10pLHc1KCk7Y29uc3QgUj1wLnVzZUNhbGxiYWNrKHRlPT57Y29uc3RbSWUsLi4uJGVdPUQoKS5tYXAoTGU9PkxlLnJlZi5jdXJyZW50KSxbUmVdPSRlLnNsaWNlKC0xKSxTZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2Zvcihjb25zdCBMZSBvZiB0ZSlpZihMZT09PVNlfHwoTGU9PW51bGx8fExlLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCJ9KSxMZT09PUllJiZFJiYoRS5zY3JvbGxUb3A9MCksTGU9PT1SZSYmRSYmKEUuc2Nyb2xsVG9wPUUuc2Nyb2xsSGVpZ2h0KSxMZT09bnVsbHx8TGUuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09U2UpKXJldHVybn0sW0QsRV0pLFA9cC51c2VDYWxsYmFjaygoKT0+UihbTixfXSksW1IsTixfXSk7cC51c2VFZmZlY3QoKCk9PntpZSYmUCgpfSxbaWUsUF0pO2NvbnN0e29uT3BlbkNoYW5nZTpiLHRyaWdnZXJQb2ludGVyRG93blBvc1JlZjp6fT15O3AudXNlRWZmZWN0KCgpPT57aWYoXyl7bGV0IHRlPXt4OjAseTowfTtjb25zdCBJZT1SZT0+e3ZhciBTZSxMZSxKZSxXdDt0ZT17eDpNYXRoLmFicyhNYXRoLnJvdW5kKFJlLnBhZ2VYKS0oKFNlPShMZT16LmN1cnJlbnQpPT09bnVsbHx8TGU9PT12b2lkIDA/dm9pZCAwOkxlLngpIT09bnVsbCYmU2UhPT12b2lkIDA/U2U6MCkpLHk6TWF0aC5hYnMoTWF0aC5yb3VuZChSZS5wYWdlWSktKChKZT0oV3Q9ei5jdXJyZW50KT09PW51bGx8fFd0PT09dm9pZCAwP3ZvaWQgMDpXdC55KSE9PW51bGwmJkplIT09dm9pZCAwP0plOjApKX19LCRlPVJlPT57dGUueDw9MTAmJnRlLnk8PTEwP1JlLnByZXZlbnREZWZhdWx0KCk6Xy5jb250YWlucyhSZS50YXJnZXQpfHxiKCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsSWUpLHouY3VycmVudD1udWxsfTtyZXR1cm4gei5jdXJyZW50IT09bnVsbCYmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixJZSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwkZSx7Y2FwdHVyZTohMCxvbmNlOiEwfSkpLCgpPT57ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEllKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCRlLHtjYXB0dXJlOiEwfSl9fX0sW18sYix6XSkscC51c2VFZmZlY3QoKCk9Pntjb25zdCB0ZT0oKT0+YighMSk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIix0ZSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGUpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLHRlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0ZSl9fSxbYl0pO2NvbnN0W2osWl09dmsodGU9Pntjb25zdCBJZT1EKCkuZmlsdGVyKFNlPT4hU2UuZGlzYWJsZWQpLCRlPUllLmZpbmQoU2U9PlNlLnJlZi5jdXJyZW50PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksUmU9eWsoSWUsdGUsJGUpO1JlJiZzZXRUaW1lb3V0KCgpPT5SZS5yZWYuY3VycmVudC5mb2N1cygpKX0pLG5lPXAudXNlQ2FsbGJhY2soKHRlLEllLCRlKT0+e2NvbnN0IFJlPSFLLmN1cnJlbnQmJiEkZTsoeS52YWx1ZSE9PXZvaWQgMCYmeS52YWx1ZT09PUllfHxSZSkmJihBKHRlKSxSZSYmKEsuY3VycmVudD0hMCkpfSxbeS52YWx1ZV0pLGtlPXAudXNlQ2FsbGJhY2soKCk9Pl89PW51bGw/dm9pZCAwOl8uZm9jdXMoKSxbX10pLHllPXAudXNlQ2FsbGJhY2soKHRlLEllLCRlKT0+e2NvbnN0IFJlPSFLLmN1cnJlbnQmJiEkZTsoeS52YWx1ZSE9PXZvaWQgMCYmeS52YWx1ZT09PUllfHxSZSkmJk0odGUpfSxbeS52YWx1ZV0pLFdlPXI9PT0icG9wcGVyIj90XzpUMyxGZT1XZT09PXRfP3tzaWRlOnMsc2lkZU9mZnNldDphLGFsaWduOnUsYWxpZ25PZmZzZXQ6YyxhcnJvd1BhZGRpbmc6ZCxjb2xsaXNpb25Cb3VuZGFyeTpmLGNvbGxpc2lvblBhZGRpbmc6aCxzdGlja3k6ZyxoaWRlV2hlbkRldGFjaGVkOm0sYXZvaWRDb2xsaXNpb25zOnd9Ont9O3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoaGsse3Njb3BlOm4sY29udGVudDpfLHZpZXdwb3J0OkUsb25WaWV3cG9ydENoYW5nZTokLGl0ZW1SZWZDYWxsYmFjazpuZSxzZWxlY3RlZEl0ZW06Tixvbkl0ZW1MZWF2ZTprZSxpdGVtVGV4dFJlZkNhbGxiYWNrOnllLGZvY3VzU2VsZWN0ZWRJdGVtOlAsc2VsZWN0ZWRJdGVtVGV4dDprLHBvc2l0aW9uOnIsaXNQb3NpdGlvbmVkOmllLHNlYXJjaFJlZjpqfSxwLmNyZWF0ZUVsZW1lbnQoZjMse2FzOmhzLGFsbG93UGluY2hab29tOiEwfSxwLmNyZWF0ZUVsZW1lbnQoUzUse2FzQ2hpbGQ6ITAsdHJhcHBlZDp5Lm9wZW4sb25Nb3VudEF1dG9Gb2N1czp0ZT0+e3RlLnByZXZlbnREZWZhdWx0KCl9LG9uVW5tb3VudEF1dG9Gb2N1czpudChpLHRlPT57dmFyIEllOyhJZT15LnRyaWdnZXIpPT09bnVsbHx8SWU9PT12b2lkIDB8fEllLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksdGUucHJldmVudERlZmF1bHQoKX0pfSxwLmNyZWF0ZUVsZW1lbnQoeTUse2FzQ2hpbGQ6ITAsZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOiEwLG9uRXNjYXBlS2V5RG93bjpvLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsb25Gb2N1c091dHNpZGU6dGU9PnRlLnByZXZlbnREZWZhdWx0KCksb25EaXNtaXNzOigpPT55Lm9uT3BlbkNoYW5nZSghMSl9LHAuY3JlYXRlRWxlbWVudChXZSxvZSh7cm9sZToibGlzdGJveCIsaWQ6eS5jb250ZW50SWQsImRhdGEtc3RhdGUiOnkub3Blbj8ib3BlbiI6ImNsb3NlZCIsZGlyOnkuZGlyLG9uQ29udGV4dE1lbnU6dGU9PnRlLnByZXZlbnREZWZhdWx0KCl9LHYsRmUse29uUGxhY2VkOigpPT5WKCEwKSxyZWY6QyxzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixvdXRsaW5lOiJub25lIiwuLi52LnN0eWxlfSxvbktleURvd246bnQodi5vbktleURvd24sdGU9Pntjb25zdCBJZT10ZS5jdHJsS2V5fHx0ZS5hbHRLZXl8fHRlLm1ldGFLZXk7aWYodGUua2V5PT09IlRhYiImJnRlLnByZXZlbnREZWZhdWx0KCksIUllJiZ0ZS5rZXkubGVuZ3RoPT09MSYmWih0ZS5rZXkpLFsiQXJyb3dVcCIsIkFycm93RG93biIsIkhvbWUiLCJFbmQiXS5pbmNsdWRlcyh0ZS5rZXkpKXtsZXQgUmU9RCgpLmZpbHRlcihTZT0+IVNlLmRpc2FibGVkKS5tYXAoU2U9PlNlLnJlZi5jdXJyZW50KTtpZihbIkFycm93VXAiLCJFbmQiXS5pbmNsdWRlcyh0ZS5rZXkpJiYoUmU9UmUuc2xpY2UoKS5yZXZlcnNlKCkpLFsiQXJyb3dVcCIsIkFycm93RG93biJdLmluY2x1ZGVzKHRlLmtleSkpe2NvbnN0IFNlPXRlLnRhcmdldCxMZT1SZS5pbmRleE9mKFNlKTtSZT1SZS5zbGljZShMZSsxKX1zZXRUaW1lb3V0KCgpPT5SKFJlKSksdGUucHJldmVudERlZmF1bHQoKX19KX0pKSkpKSl9KSxUMz1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sb25QbGFjZWQ6ciwuLi5pfT10LG89aGwod3MsbiksbD1LZih3cyxuKSxbcyxhXT1wLnVzZVN0YXRlKG51bGwpLFt1LGNdPXAudXNlU3RhdGUobnVsbCksZD1zdChlLEM9PmMoQykpLGY9SHYobiksaD1wLnVzZVJlZighMSksZz1wLnVzZVJlZighMCkse3ZpZXdwb3J0Om0sc2VsZWN0ZWRJdGVtOncsc2VsZWN0ZWRJdGVtVGV4dDp2LGZvY3VzU2VsZWN0ZWRJdGVtOnl9PWwsXz1wLnVzZUNhbGxiYWNrKCgpPT57aWYoby50cmlnZ2VyJiZvLnZhbHVlTm9kZSYmcyYmdSYmbSYmdyYmdil7Y29uc3QgQz1vLnRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksTj11LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEE9by52YWx1ZU5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaz12LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKG8uZGlyIT09InJ0bCIpe2NvbnN0IFNlPWsubGVmdC1OLmxlZnQsTGU9QS5sZWZ0LVNlLEplPUMubGVmdC1MZSxXdD1DLndpZHRoK0plLFNuPU1hdGgubWF4KFd0LE4ud2lkdGgpLGNyPXdpbmRvdy5pbm5lcldpZHRoLWlpLGplPUpwKExlLFtpaSxjci1Tbl0pO3Muc3R5bGUubWluV2lkdGg9V3QrInB4IixzLnN0eWxlLmxlZnQ9amUrInB4In1lbHNle2NvbnN0IFNlPU4ucmlnaHQtay5yaWdodCxMZT13aW5kb3cuaW5uZXJXaWR0aC1BLnJpZ2h0LVNlLEplPXdpbmRvdy5pbm5lcldpZHRoLUMucmlnaHQtTGUsV3Q9Qy53aWR0aCtKZSxTbj1NYXRoLm1heChXdCxOLndpZHRoKSxjcj13aW5kb3cuaW5uZXJXaWR0aC1paSxqZT1KcChMZSxbaWksY3ItU25dKTtzLnN0eWxlLm1pbldpZHRoPVd0KyJweCIscy5zdHlsZS5yaWdodD1qZSsicHgifWNvbnN0IE09ZigpLEQ9d2luZG93LmlubmVySGVpZ2h0LWlpKjIsaWU9bS5zY3JvbGxIZWlnaHQsVj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh1KSxLPXBhcnNlSW50KFYuYm9yZGVyVG9wV2lkdGgsMTApLFI9cGFyc2VJbnQoVi5wYWRkaW5nVG9wLDEwKSxQPXBhcnNlSW50KFYuYm9yZGVyQm90dG9tV2lkdGgsMTApLGI9cGFyc2VJbnQoVi5wYWRkaW5nQm90dG9tLDEwKSx6PUsrUitpZStiK1Asaj1NYXRoLm1pbih3Lm9mZnNldEhlaWdodCo1LHopLFo9d2luZG93LmdldENvbXB1dGVkU3R5bGUobSksbmU9cGFyc2VJbnQoWi5wYWRkaW5nVG9wLDEwKSxrZT1wYXJzZUludChaLnBhZGRpbmdCb3R0b20sMTApLHllPUMudG9wK0MuaGVpZ2h0LzItaWksV2U9RC15ZSxGZT13Lm9mZnNldEhlaWdodC8yLHRlPXcub2Zmc2V0VG9wK0ZlLEllPUsrUit0ZSwkZT16LUllO2lmKEllPD15ZSl7Y29uc3QgU2U9dz09PU1bTS5sZW5ndGgtMV0ucmVmLmN1cnJlbnQ7cy5zdHlsZS5ib3R0b209IjBweCI7Y29uc3QgTGU9dS5jbGllbnRIZWlnaHQtbS5vZmZzZXRUb3AtbS5vZmZzZXRIZWlnaHQsSmU9TWF0aC5tYXgoV2UsRmUrKFNlP2tlOjApK0xlK1ApLFd0PUllK0plO3Muc3R5bGUuaGVpZ2h0PVd0KyJweCJ9ZWxzZXtjb25zdCBTZT13PT09TVswXS5yZWYuY3VycmVudDtzLnN0eWxlLnRvcD0iMHB4Ijtjb25zdCBKZT1NYXRoLm1heCh5ZSxLK20ub2Zmc2V0VG9wKyhTZT9uZTowKStGZSkrJGU7cy5zdHlsZS5oZWlnaHQ9SmUrInB4IixtLnNjcm9sbFRvcD1JZS15ZSttLm9mZnNldFRvcH1zLnN0eWxlLm1hcmdpbj1gJHtpaX1weCAwYCxzLnN0eWxlLm1pbkhlaWdodD1qKyJweCIscy5zdHlsZS5tYXhIZWlnaHQ9RCsicHgiLHI9PW51bGx8fHIoKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmguY3VycmVudD0hMCl9fSxbZixvLnRyaWdnZXIsby52YWx1ZU5vZGUscyx1LG0sdyx2LG8uZGlyLHJdKTtWbigoKT0+XygpLFtfXSk7Y29uc3RbUyxFXT1wLnVzZVN0YXRlKCk7Vm4oKCk9Pnt1JiZFKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHUpLnpJbmRleCl9LFt1XSk7Y29uc3QgJD1wLnVzZUNhbGxiYWNrKEM9PntDJiZnLmN1cnJlbnQ9PT0hMCYmKF8oKSx5PT1udWxsfHx5KCksZy5jdXJyZW50PSExKX0sW18seV0pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoTjMse3Njb3BlOm4sY29udGVudFdyYXBwZXI6cyxzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpoLG9uU2Nyb2xsQnV0dG9uQ2hhbmdlOiR9LHAuY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOmEsc3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIscG9zaXRpb246ImZpeGVkIix6SW5kZXg6U319LHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe30saSx7cmVmOmQsc3R5bGU6e2JveFNpemluZzoiYm9yZGVyLWJveCIsbWF4SGVpZ2h0OiIxMDAlIiwuLi5pLnN0eWxlfX0pKSkpfSksdF89cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGFsaWduOnI9InN0YXJ0Iixjb2xsaXNpb25QYWRkaW5nOmk9aWksLi4ub309dCxsPUt2KG4pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoQzQsb2Uoe30sbCxvLHtyZWY6ZSxhbGlnbjpyLGNvbGxpc2lvblBhZGRpbmc6aSxzdHlsZTp7Ym94U2l6aW5nOiJib3JkZXItYm94IiwuLi5vLnN0eWxlLCItLXJhZGl4LXNlbGVjdC1jb250ZW50LXRyYW5zZm9ybS1vcmlnaW4iOiJ2YXIoLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbikiLCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS13aWR0aCI6InZhcigtLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgpIiwiLS1yYWRpeC1zZWxlY3QtY29udGVudC1hdmFpbGFibGUtaGVpZ2h0IjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQpIiwiLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3Itd2lkdGgpIiwiLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCkifX0pKX0pLFtOMyxSM109QnMod3Mse30pLG5fPSJTZWxlY3RWaWV3cG9ydCIsTzM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLC4uLnJ9PXQsaT1LZihuXyxuKSxvPVIzKG5fLG4pLGw9c3QoZSxpLm9uVmlld3BvcnRDaGFuZ2UpLHM9cC51c2VSZWYoMCk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChwLkZyYWdtZW50LG51bGwscC5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6IltkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF17c2Nyb2xsYmFyLXdpZHRoOm5vbmU7LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7fVtkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydF06Oi13ZWJraXQtc2Nyb2xsYmFye2Rpc3BsYXk6bm9uZX0ifX0pLHAuY3JlYXRlRWxlbWVudChIZi5TbG90LHtzY29wZTpufSxwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHsiZGF0YS1yYWRpeC1zZWxlY3Qtdmlld3BvcnQiOiIiLHJvbGU6InByZXNlbnRhdGlvbiJ9LHIse3JlZjpsLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxvdmVyZmxvdzoiYXV0byIsLi4uci5zdHlsZX0sb25TY3JvbGw6bnQoci5vblNjcm9sbCxhPT57Y29uc3QgdT1hLmN1cnJlbnRUYXJnZXQse2NvbnRlbnRXcmFwcGVyOmMsc2hvdWxkRXhwYW5kT25TY3JvbGxSZWY6ZH09bztpZihkIT1udWxsJiZkLmN1cnJlbnQmJmMpe2NvbnN0IGY9TWF0aC5hYnMocy5jdXJyZW50LXUuc2Nyb2xsVG9wKTtpZihmPjApe2NvbnN0IGg9d2luZG93LmlubmVySGVpZ2h0LWlpKjIsZz1wYXJzZUZsb2F0KGMuc3R5bGUubWluSGVpZ2h0KSxtPXBhcnNlRmxvYXQoYy5zdHlsZS5oZWlnaHQpLHc9TWF0aC5tYXgoZyxtKTtpZih3PGgpe2NvbnN0IHY9dytmLHk9TWF0aC5taW4oaCx2KSxfPXYteTtjLnN0eWxlLmhlaWdodD15KyJweCIsYy5zdHlsZS5ib3R0b209PT0iMHB4IiYmKHUuc2Nyb2xsVG9wPV8+MD9fOjAsYy5zdHlsZS5qdXN0aWZ5Q29udGVudD0iZmxleC1lbmQiKX19fXMuY3VycmVudD11LnNjcm9sbFRvcH0pfSkpKSl9KSxQMz0iU2VsZWN0R3JvdXAiLFtPSSxBM109QnMoUDMpLE0zPSJTZWxlY3RMYWJlbCIsTDM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLC4uLnJ9PXQsaT1BMyhNMyxuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7aWQ6aS5pZH0scix7cmVmOmV9KSl9KSxIbT0iU2VsZWN0SXRlbSIsW0QzLHBrXT1CcyhIbSksSTM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHZhbHVlOnIsZGlzYWJsZWQ6aT0hMSx0ZXh0VmFsdWU6bywuLi5sfT10LHM9aGwoSG0sbiksYT1LZihIbSxuKSx1PXMudmFsdWU9PT1yLFtjLGRdPXAudXNlU3RhdGUobz8/IiIpLFtmLGhdPXAudXNlU3RhdGUoITEpLGc9c3QoZSx2PT57dmFyIHk7cmV0dXJuKHk9YS5pdGVtUmVmQ2FsbGJhY2spPT09bnVsbHx8eT09PXZvaWQgMD92b2lkIDA6eS5jYWxsKGEsdixyLGkpfSksbT1GZigpLHc9KCk9PntpfHwocy5vblZhbHVlQ2hhbmdlKHIpLHMub25PcGVuQ2hhbmdlKCExKSl9O2lmKHI9PT0iIil0aHJvdyBuZXcgRXJyb3IoIkEgPFNlbGVjdC5JdGVtIC8+IG11c3QgaGF2ZSBhIHZhbHVlIHByb3AgdGhhdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLiBUaGlzIGlzIGJlY2F1c2UgdGhlIFNlbGVjdCB2YWx1ZSBjYW4gYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBjbGVhciB0aGUgc2VsZWN0aW9uIGFuZCBzaG93IHRoZSBwbGFjZWhvbGRlci4iKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEQzLHtzY29wZTpuLHZhbHVlOnIsZGlzYWJsZWQ6aSx0ZXh0SWQ6bSxpc1NlbGVjdGVkOnUsb25JdGVtVGV4dENoYW5nZTpwLnVzZUNhbGxiYWNrKHY9PntkKHk9Pnt2YXIgXztyZXR1cm4geXx8KChfPXY9PW51bGw/dm9pZCAwOnYudGV4dENvbnRlbnQpIT09bnVsbCYmXyE9PXZvaWQgMD9fOiIiKS50cmltKCl9KX0sW10pfSxwLmNyZWF0ZUVsZW1lbnQoSGYuSXRlbVNsb3Qse3Njb3BlOm4sdmFsdWU6cixkaXNhYmxlZDppLHRleHRWYWx1ZTpjfSxwLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHtyb2xlOiJvcHRpb24iLCJhcmlhLWxhYmVsbGVkYnkiOm0sImRhdGEtaGlnaGxpZ2h0ZWQiOmY/IiI6dm9pZCAwLCJhcmlhLXNlbGVjdGVkIjp1JiZmLCJkYXRhLXN0YXRlIjp1PyJjaGVja2VkIjoidW5jaGVja2VkIiwiYXJpYS1kaXNhYmxlZCI6aXx8dm9pZCAwLCJkYXRhLWRpc2FibGVkIjppPyIiOnZvaWQgMCx0YWJJbmRleDppP3ZvaWQgMDotMX0sbCx7cmVmOmcsb25Gb2N1czpudChsLm9uRm9jdXMsKCk9PmgoITApKSxvbkJsdXI6bnQobC5vbkJsdXIsKCk9PmgoITEpKSxvblBvaW50ZXJVcDpudChsLm9uUG9pbnRlclVwLHcpLG9uUG9pbnRlck1vdmU6bnQobC5vblBvaW50ZXJNb3ZlLHY9PntpZihpKXt2YXIgeTsoeT1hLm9uSXRlbUxlYXZlKT09PW51bGx8fHk9PT12b2lkIDB8fHkuY2FsbChhKX1lbHNlIHYuY3VycmVudFRhcmdldC5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pfSksb25Qb2ludGVyTGVhdmU6bnQobC5vblBvaW50ZXJMZWF2ZSx2PT57aWYodi5jdXJyZW50VGFyZ2V0PT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl7dmFyIHk7KHk9YS5vbkl0ZW1MZWF2ZSk9PT1udWxsfHx5PT09dm9pZCAwfHx5LmNhbGwoYSl9fSksb25LZXlEb3duOm50KGwub25LZXlEb3duLHY9Pnt2YXIgeTsoKHk9YS5zZWFyY2hSZWYpPT09bnVsbHx8eT09PXZvaWQgMD92b2lkIDA6eS5jdXJyZW50KSE9PSIiJiZ2LmtleT09PSIgInx8KHAzLmluY2x1ZGVzKHYua2V5KSYmdygpLHYua2V5PT09IiAiJiZ2LnByZXZlbnREZWZhdWx0KCkpfSl9KSkpKX0pLE5jPSJTZWxlY3RJdGVtVGV4dCIsajM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNsYXNzTmFtZTpyLHN0eWxlOmksLi4ub309dCxsPWhsKE5jLG4pLHM9S2YoTmMsbiksYT1wayhOYyxuKSx1PXkzKE5jLG4pLFtjLGRdPXAudXNlU3RhdGUobnVsbCksZj1zdChlLHY9PmQodiksYS5vbkl0ZW1UZXh0Q2hhbmdlLHY9Pnt2YXIgeTtyZXR1cm4oeT1zLml0ZW1UZXh0UmVmQ2FsbGJhY2spPT09bnVsbHx8eT09PXZvaWQgMD92b2lkIDA6eS5jYWxsKHMsdixhLnZhbHVlLGEuZGlzYWJsZWQpfSksaD1jPT1udWxsP3ZvaWQgMDpjLnRleHRDb250ZW50LGc9cC51c2VNZW1vKCgpPT5wLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse2tleTphLnZhbHVlLHZhbHVlOmEudmFsdWUsZGlzYWJsZWQ6YS5kaXNhYmxlZH0saCksW2EuZGlzYWJsZWQsYS52YWx1ZSxoXSkse29uTmF0aXZlT3B0aW9uQWRkOm0sb25OYXRpdmVPcHRpb25SZW1vdmU6d309dTtyZXR1cm4gVm4oKCk9PihtKGcpLCgpPT53KGcpKSxbbSx3LGddKSxwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudChLZS5zcGFuLG9lKHtpZDphLnRleHRJZH0sbyx7cmVmOmZ9KSksYS5pc1NlbGVjdGVkJiZsLnZhbHVlTm9kZSYmIWwudmFsdWVOb2RlSGFzQ2hpbGRyZW4/WXIuY3JlYXRlUG9ydGFsKG8uY2hpbGRyZW4sbC52YWx1ZU5vZGUpOm51bGwpfSksejM9IlNlbGVjdEl0ZW1JbmRpY2F0b3IiLEYzPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTZWxlY3Q6biwuLi5yfT10O3JldHVybiBwayh6MyxuKS5pc1NlbGVjdGVkP3AuY3JlYXRlRWxlbWVudChLZS5zcGFuLG9lKHsiYXJpYS1oaWRkZW4iOiEwfSxyLHtyZWY6ZX0pKTpudWxsfSksQjM9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLC4uLnJ9PXQ7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2UoeyJhcmlhLWhpZGRlbiI6ITB9LHIse3JlZjplfSkpfSk7ZnVuY3Rpb24gbWsodCl7cmV0dXJuIHQ9PT0iInx8dD09PXZvaWQgMH1jb25zdCBnaz1wLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHt2YWx1ZTpuLC4uLnJ9PXQsaT1wLnVzZVJlZihudWxsKSxvPXN0KGUsaSksbD1yayhuKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBzPWkuY3VycmVudCxhPXdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsInZhbHVlIikuc2V0O2lmKGwhPT1uJiZjKXtjb25zdCBkPW5ldyBFdmVudCgiY2hhbmdlIix7YnViYmxlczohMH0pO2MuY2FsbChzLG4pLHMuZGlzcGF0Y2hFdmVudChkKX19LFtsLG5dKSxwLmNyZWF0ZUVsZW1lbnQoJDQse2FzQ2hpbGQ6ITB9LHAuY3JlYXRlRWxlbWVudCgic2VsZWN0IixvZSh7fSxyLHtyZWY6byxkZWZhdWx0VmFsdWU6bn0pKSl9KTtnay5kaXNwbGF5TmFtZT0iQnViYmxlU2VsZWN0IjtmdW5jdGlvbiB2ayh0KXtjb25zdCBlPWVuKHQpLG49cC51c2VSZWYoIiIpLHI9cC51c2VSZWYoMCksaT1wLnVzZUNhbGxiYWNrKGw9Pntjb25zdCBzPW4uY3VycmVudCtsO2UocyksZnVuY3Rpb24gYSh1KXtuLmN1cnJlbnQ9dSx3aW5kb3cuY2xlYXJUaW1lb3V0KHIuY3VycmVudCksdSE9PSIiJiYoci5jdXJyZW50PXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5hKCIiKSwxZTMpKX0ocyl9LFtlXSksbz1wLnVzZUNhbGxiYWNrKCgpPT57bi5jdXJyZW50PSIiLHdpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KX0sW10pO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+KCk9PndpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxbXSksW24saSxvXX1mdW5jdGlvbiB5ayh0LGUsbil7Y29uc3QgaT1lLmxlbmd0aD4xJiZBcnJheS5mcm9tKGUpLmV2ZXJ5KHU9PnU9PT1lWzBdKT9lWzBdOmUsbz1uP3QuaW5kZXhPZihuKTotMTtsZXQgbD1VMyh0LE1hdGgubWF4KG8sMCkpO2kubGVuZ3RoPT09MSYmKGw9bC5maWx0ZXIodT0+dSE9PW4pKTtjb25zdCBhPWwuZmluZCh1PT51LnRleHRWYWx1ZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaS50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGEhPT1uP2E6dm9pZCAwfWZ1bmN0aW9uIFUzKHQsZSl7cmV0dXJuIHQubWFwKChuLHIpPT50WyhlK3IpJXQubGVuZ3RoXSl9Y29uc3QgVzM9eDMseGs9dzMsVjM9RTMsSDM9QzMsSzM9azMsX2s9YjMsWjM9TzMsd2s9TDMsU2s9STMsRzM9ajMsWTM9RjMsRWs9QjMsQ2s9VzMsa2s9VjMsWnY9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsY2hpbGRyZW46ZSwuLi5ufSxyKT0+eC5qc3hzKHhrLHtyZWY6cixjbGFzc05hbWU6eHQoImZsZXggaC0xMCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIHB5LTIgdGV4dC1zbSByaW5nLW9mZnNldC1iYWNrZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctcmluZyBmb2N1czpyaW5nLW9mZnNldC0yIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIix0KSwuLi5uLGNoaWxkcmVuOltlLHguanN4KEgzLHthc0NoaWxkOiEwLGNoaWxkcmVuOnguanN4KHdTLHtjbGFzc05hbWU6InctNCBoLTQgb3BhY2l0eS01MCJ9KX0pXX0pKTtadi5kaXNwbGF5TmFtZT14ay5kaXNwbGF5TmFtZTtjb25zdCBHdj1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCxjaGlsZHJlbjplLHBvc2l0aW9uOm49InBvcHBlciIsLi4ucn0saSk9PnguanN4KEszLHtjaGlsZHJlbjp4LmpzeChfayx7cmVmOmksY2xhc3NOYW1lOnh0KCJyZWxhdGl2ZSB6LTUwIG1pbi13LVs4cmVtXSBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1tZCBib3JkZXIgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctbWQgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1pbiBkYXRhLVtzdGF0ZT1jbG9zZWRdOmFuaW1hdGUtb3V0IGRhdGEtW3N0YXRlPWNsb3NlZF06ZmFkZS1vdXQtMCBkYXRhLVtzdGF0ZT1vcGVuXTpmYWRlLWluLTAgZGF0YS1bc3RhdGU9Y2xvc2VkXTp6b29tLW91dC05NSBkYXRhLVtzdGF0ZT1vcGVuXTp6b29tLWluLTk1IGRhdGEtW3NpZGU9Ym90dG9tXTpzbGlkZS1pbi1mcm9tLXRvcC0yIGRhdGEtW3NpZGU9bGVmdF06c2xpZGUtaW4tZnJvbS1yaWdodC0yIGRhdGEtW3NpZGU9cmlnaHRdOnNsaWRlLWluLWZyb20tbGVmdC0yIGRhdGEtW3NpZGU9dG9wXTpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yIixuPT09InBvcHBlciImJiJkYXRhLVtzaWRlPWJvdHRvbV06dHJhbnNsYXRlLXktMSBkYXRhLVtzaWRlPWxlZnRdOi10cmFuc2xhdGUteC0xIGRhdGEtW3NpZGU9cmlnaHRdOnRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT10b3BdOi10cmFuc2xhdGUteS0xIix0KSxwb3NpdGlvbjpuLC4uLnIsY2hpbGRyZW46eC5qc3goWjMse2NsYXNzTmFtZTp4dCgicC0xIixuPT09InBvcHBlciImJiJoLVt2YXIoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci1oZWlnaHQpXSB3LWZ1bGwgbWluLXctW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKV0iKSxjaGlsZHJlbjplfSl9KX0pKTtHdi5kaXNwbGF5TmFtZT1fay5kaXNwbGF5TmFtZTtjb25zdCBYMz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eC5qc3god2sse3JlZjpuLGNsYXNzTmFtZTp4dCgicHktMS41IHBsLTggcHItMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQiLHQpLC4uLmV9KSk7WDMuZGlzcGxheU5hbWU9d2suZGlzcGxheU5hbWU7Y29uc3QgWXY9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsY2hpbGRyZW46ZSwuLi5ufSxyKT0+eC5qc3hzKFNrLHtyZWY6cixjbGFzc05hbWU6eHQoInJlbGF0aXZlIGZsZXggdy1mdWxsIGN1cnNvci1kZWZhdWx0IHNlbGVjdC1ub25lIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtIHB5LTEuNSBwbC04IHByLTIgdGV4dC1zbSBvdXRsaW5lLW5vbmUgZm9jdXM6YmctYWNjZW50IGZvY3VzOnRleHQtYWNjZW50LWZvcmVncm91bmQgZGF0YS1bZGlzYWJsZWRdOnBvaW50ZXItZXZlbnRzLW5vbmUgZGF0YS1bZGlzYWJsZWRdOm9wYWNpdHktNTAiLHQpLC4uLm4sY2hpbGRyZW46W3guanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBsZWZ0LTIgZmxleCBoLTMuNSB3LTMuNSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOnguanN4KFkzLHtjaGlsZHJlbjp4LmpzeChpUix7Y2xhc3NOYW1lOiJ3LTQgaC00In0pfSl9KSx4LmpzeChHMyx7Y2hpbGRyZW46ZX0pXX0pKTtZdi5kaXNwbGF5TmFtZT1Tay5kaXNwbGF5TmFtZTtjb25zdCBKMz1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eC5qc3goRWsse3JlZjpuLGNsYXNzTmFtZTp4dCgiLW14LTEgbXktMSBoLXB4IGJnLW11dGVkIix0KSwuLi5lfSkpO0ozLmRpc3BsYXlOYW1lPUVrLmRpc3BsYXlOYW1lO2Z1bmN0aW9uIGJrKHtwYXRoOnQsZGlzYWJsZWQ6ZSxzb3VyY2U6bixzY2hlbWE6cixyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvfSl7cmV0dXJuKHR5cGVvZiBuPT0ic3RyaW5nInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJzdHJpbmciP3guanN4KHRMLHtwYXRoOnQsZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6ZSxzY2hlbWE6cixyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJudW1iZXIiP3guanN4KGxfLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDplLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om99KToodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ia2V5T2YiP3guanN4KG9fLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDplLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om8sc2VsZWN0b3I6ci5zZWxlY3Rvcn0pOih0eXBlb2Ygbj09Im51bWJlciJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ibnVtYmVyIj94LmpzeChsXyx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8dHlwZW9mIG49PSJzdHJpbmcifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09ImtleU9mIj94LmpzeChvXyx7ZGVmYXVsdFZhbHVlOm4sZGlzYWJsZWQ6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvLHNlbGVjdG9yOnIuc2VsZWN0b3J9KToodHlwZW9mIG49PSJvYmplY3QifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09InJpY2h0ZXh0Ij94LmpzeChlTCx7cmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6byxkZWZhdWx0VmFsdWU6bn0pOih0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0iaW1hZ2UiP3guanN4KHEzLHtwYXRoOnQscmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6byxkZWZhdWx0VmFsdWU6bn0pOnguanN4cygiZGl2Iix7Y2hpbGRyZW46WyJVbnN1cHBvcnRlZCBzY2hlbWE6ICIsci50eXBlLCIgKHNvdXJjZSB0eXBlOiAiLHR5cGVvZiBuLCIgc291cmNlOiIsIiAiLEpTT04uc3RyaW5naWZ5KG4pLCIpIl19KX1mdW5jdGlvbiByXyh0LGUsbixyKXtpZighZXx8IXIpcmV0dXJuW107Y29uc3QgaT1yLnNoYTI1Ni5zbGljZSgwLDUpLG89ZnVuY3Rpb24oKXtjb25zdCBsPUV2KGUpPz8idW5rbm93biIscz1DdihsKTtpZihuKXtsZXQgYT1uLnNwbGl0KCIuIikuc2xpY2UoMCwtMSkuam9pbigiLiIpfHxuO2NvbnN0IHU9YS5sYXN0SW5kZXhPZigiXyIpO3JldHVybiBhLnNsaWNlKHUrMSxhLmxlbmd0aCk9PT1pJiYoYT1hLnNsaWNlKDAsdSkpLGAvcHVibGljLyR7YX1fJHtpfS4ke3N9YH1yZXR1cm5gL3B1YmxpYy8ke3Iuc2hhMjU2fS4ke3N9YH0oKTtyZXR1cm5be3ZhbHVlOntbUm5dOm8sW25uXToiZmlsZSIsbWV0YWRhdGE6cn0sb3A6InJlcGxhY2UiLHBhdGg6dH0se3ZhbHVlOmUsb3A6ImZpbGUiLHBhdGg6dCxmaWxlUGF0aDpvfV19ZnVuY3Rpb24gUTModCxlKXtjb25zdCBuPXQrIi9tZXRhZGF0YSI7cmV0dXJuW3t2YWx1ZTplLG9wOiJyZXBsYWNlIixwYXRoOm59XX1mdW5jdGlvbiBxMyh7cGF0aDp0LGRlZmF1bHRWYWx1ZTplLG9uU3VibWl0Om4scmVnaXN0ZXJQYXRjaENhbGxiYWNrOnJ9KXt2YXIgZyxtLHcsdix5LF8sUyxFLCQsQyxOLEE7Y29uc3RbaSxvXT1wLnVzZVN0YXRlKG51bGwpLFtsLHNdPXAudXNlU3RhdGUoITEpLFthLHVdPXAudXNlU3RhdGUoKSxbYyxkXT1wLnVzZVN0YXRlKCksW2YsaF09cC51c2VTdGF0ZSgpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e2goZSYmT24uY29udmVydEZpbGVTb3VyY2UoZSkudXJsKX0sW2VdKSxwLnVzZUVmZmVjdCgoKT0+e3ImJnIoYXN5bmMgaz0+cl8oaywoaT09bnVsbD92b2lkIDA6aS5zcmMpPz9udWxsLChpPT1udWxsP3ZvaWQgMDppLmZpbGVuYW1lKT8/bnVsbCxhKSl9LFtpLGVdKSxwLnVzZUVmZmVjdCgoKT0+e3ZhciBrO2lmKGMpaWYoYSl7Y29uc3QgTT17Li4uYSxob3RzcG90OmN9O3UoTSl9ZWxzZSBlIT1udWxsJiZlLm1ldGFkYXRhP3Uoey4uLmUubWV0YWRhdGEsaG90c3BvdDpjfSk6Y29uc29sZS5lcnJvcigiTmVpdGhlciBpbWFnZSBtZXRhZGF0YSBub3IgdmFsdWUgaXMgc2V0Iik7ZWxzZShrPWU9PW51bGw/dm9pZCAwOmUubWV0YWRhdGEpIT1udWxsJiZrLmhvdHNwb3QmJmQoZS5tZXRhZGF0YS5ob3RzcG90KX0sW2MsZV0pLHguanN4cyhwbCx7Y2hpbGRyZW46W3guanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJ3LWZpdCIsY2hpbGRyZW46W3guanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wganVzdGlmeS1zdGFydCBwLTIgYm9yZGVyIGJvcmRlci1iLTAgcm91bmRlZC1zbSByb3VuZGVkLWItbm9uZSBnYXAteS00IGJnLWJhY2tncm91bmQgdGV4dC1mb3JlZ3JvdW5kIGJvcmRlci1pbnB1dCIsY2hpbGRyZW46aXx8Zj94LmpzeHMoImRpdiIse2NsYXNzTmFtZToicmVsYXRpdmUiLGNoaWxkcmVuOltjJiZ4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJyb3VuZGVkLWZ1bGwgaC1bMTJweF0gdy1bMTJweF0gYmctYmFja2dyb3VuZCBtaXgtYmxlbmQtZGlmZmVyZW5jZSBib3JkZXItYWNjZW50IGJvcmRlci0yIGFic29sdXRlIHBvaW50ZXItZXZlbnRzLW5vbmUiLHN0eWxlOnt0b3A6YCR7Yy55KjEwMH0lYCxsZWZ0OmAke2MueCoxMDB9JWB9fSkseC5qc3goImltZyIse3NyYzooaT09bnVsbD92b2lkIDA6aS5zcmMpfHxmLGRyYWdnYWJsZTohMSxjbGFzc05hbWU6Im9iamVjdC1jb250YWluIHctZnVsbCBtYXgtaC1bNTAwcHhdIixzdHlsZTp7Y3Vyc29yOiJjcm9zc2hhaXIifSxvbkNsaWNrOms9Pntjb25zdHt3aWR0aDpNLGhlaWdodDpELGxlZnQ6aWUsdG9wOlZ9PWsuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxLPShrLmNsaWVudFgtNi1pZSkvTSxSPShrLmNsaWVudFktNi1WKS9EO2Qoe3g6Syx5OlIsd2lkdGg6MSxoZWlnaHQ6MX0pfX0pXX0pOnguanN4KCJkaXYiLHtjaGlsZHJlbjoiU2VsZWN0IGltYWdlIGJlbG93In0pfSx0KSx4LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IGJvcmRlciBib3JkZXItdC0wIHJvdW5kZWQtYi1zbSBiZy1iYWNrZ3JvdW5kIGJvcmRlci1pbnB1dCIsY2hpbGRyZW46W3guanN4KCJsYWJlbCIse2h0bWxGb3I6YGltZ19pbnB1dDoke3R9YCxjbGFzc05hbWU6ImJsb2NrIHB4LTEgcHktMiB0ZXh0LXNtIHRleHQtY2VudGVyIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgYmctcHJpbWFyeSB0ZXh0LWJhY2tncm91bmQiLGNoaWxkcmVuOiJVcGRhdGUifSkseC5qc3goImlucHV0Iix7aGlkZGVuOiEwLGlkOmBpbWdfaW5wdXQ6JHt0fWAsdHlwZToiZmlsZSIsb25DaGFuZ2U6az0+e0NDKGspLnRoZW4oTT0+e28oe3NyYzpNLnNyYyxmaWxlbmFtZTpNLmZpbGVuYW1lfSksTS53aWR0aCYmTS5oZWlnaHQmJk0ubWltZVR5cGU/dSh7c2hhMjU2Ok0uc2hhMjU2LHdpZHRoOk0ud2lkdGgsaGVpZ2h0Ok0uaGVpZ2h0LG1pbWVUeXBlOk0ubWltZVR5cGUsaG90c3BvdDpjfSk6KHUodm9pZCAwKSxkKHZvaWQgMCkpfSkuY2F0Y2goTT0+e2NvbnNvbGUuZXJyb3IoTS5tZXNzYWdlKSxvKG51bGwpLGQodm9pZCAwKSx1KHZvaWQgMCl9KX19KV19KV19KSxuJiZ4LmpzeChVcyx7bG9hZGluZzpsLGVuYWJsZWQ6ISFpfHwoKG09KGc9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOmcuaG90c3BvdCk9PW51bGw/dm9pZCAwOm0uaGVpZ2h0KSE9PShjPT1udWxsP3ZvaWQgMDpjLmhlaWdodCl8fCgodj0odz1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6dy5ob3RzcG90KT09bnVsbD92b2lkIDA6di53aWR0aCkhPT0oYz09bnVsbD92b2lkIDA6Yy53aWR0aCl8fCgoXz0oeT1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6eS5ob3RzcG90KT09bnVsbD92b2lkIDA6Xy54KSE9PShjPT1udWxsP3ZvaWQgMDpjLngpfHwoKEU9KFM9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOlMuaG90c3BvdCk9PW51bGw/dm9pZCAwOkUueSkhPT0oYz09bnVsbD92b2lkIDA6Yy55KXx8KCgkPWU9PW51bGw/dm9pZCAwOmUubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDokLndpZHRoKSE9PShhPT1udWxsP3ZvaWQgMDphLndpZHRoKXx8KChDPWU9PW51bGw/dm9pZCAwOmUubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDpDLmhlaWdodCkhPT0oYT09bnVsbD92b2lkIDA6YS5oZWlnaHQpfHwoKE49ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOk4ubWltZVR5cGUpIT09KGE9PW51bGw/dm9pZCAwOmEubWltZVR5cGUpfHwoKEE9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOkEuc2hhMjU2KSE9PShhPT1udWxsP3ZvaWQgMDphLnNoYTI1Niksb25DbGljazooKT0+e2k/KHMoITApLG4oaz0+UHJvbWlzZS5yZXNvbHZlKHJfKGssaS5zcmMsaS5maWxlbmFtZT8/bnVsbCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLHUodm9pZCAwKX0pKTphJiYocyghMCksbihrPT5Qcm9taXNlLnJlc29sdmUoUTMoayxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLHUodm9pZCAwKX0pKX19KV19KX1mdW5jdGlvbiBpXyh0LGUpe2NvbnN0e3RlbXBsYXRlU3RyaW5nczpuLGV4cHJzOnIsZmlsZXM6aX09ZT9rTyhlLmdldEVkaXRvclN0YXRlKCkudG9KU09OKCkucm9vdCk6e1tubl06InJpY2h0ZXh0Iix0ZW1wbGF0ZVN0cmluZ3M6WyIiXSxleHByczpbXSxmaWxlczp7fX07cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDp0LHZhbHVlOnt0ZW1wbGF0ZVN0cmluZ3M6bixleHByczpyLFtubl06InJpY2h0ZXh0In19LC4uLk9iamVjdC5lbnRyaWVzKGkpLm1hcCgoW28sbF0pPT4oe29wOiJmaWxlIixwYXRoOnQsZmlsZVBhdGg6byx2YWx1ZTpsfSkpXX1mdW5jdGlvbiBlTCh7ZGVmYXVsdFZhbHVlOnQsb25TdWJtaXQ6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bn0pe2NvbnN0W3IsaV09cC51c2VTdGF0ZShudWxsKSxbbyxsXT1wLnVzZVN0YXRlKCExKSxbcyxhXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntyJiYobCghMSksci5yZWdpc3RlclRleHRDb250ZW50TGlzdGVuZXIoKCk9PntsKCEwKX0pLHIucmVnaXN0ZXJEZWNvcmF0b3JMaXN0ZW5lcigoKT0+e2woITApfSksci5yZWdpc3Rlck11dGF0aW9uTGlzdGVuZXIoZWwuTGlua05vZGUsKCk9PntsKCEwKX0pLHIucmVnaXN0ZXJNdXRhdGlvbkxpc3RlbmVyKGpzLCgpPT57bCghMCl9KSxyLnJlZ2lzdGVyTXV0YXRpb25MaXN0ZW5lcihfZS5UZXh0Tm9kZSwoKT0+e2woITApfSkpfSxbcl0pLHAudXNlRWZmZWN0KCgpPT57ciYmbiYmbihhc3luYyB1PT5pXyh1LHIpKX0sW3JdKSx4LmpzeHMocGwse2NoaWxkcmVuOlt4LmpzeChzTSx7b25FZGl0b3I6dT0+e2kodSl9LHJpY2h0ZXh0OnR8fHtjaGlsZHJlbjpbXSxbbm5dOiJyb290In19KSxlJiZ4LmpzeChVcyx7bG9hZGluZzpzfHwhcixlbmFibGVkOm8sb25DbGljazooKT0+e3ImJihhKCEwKSxlKGFzeW5jIHU9PmlfKHUscikpLmZpbmFsbHkoKCk9PnthKCExKSxsKCExKX0pKX19KV19KX1mdW5jdGlvbiBvXyh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyLHNlbGVjdG9yOml9KXtjb25zdCBvPUNEKGkpLHM9KGg9PkFycmF5LmlzQXJyYXkoaC5tb2R1bGVTb3VyY2UpP3t0eXBlOiJudW1iZXIiLHZhbHVlczpPYmplY3Qua2V5cyhoLm1vZHVsZVNvdXJjZSkubWFwKGc9PnBhcnNlSW50KGcpKX06e3R5cGU6InN0cmluZyIsdmFsdWVzOk9iamVjdC5rZXlzKGgubW9kdWxlU291cmNlPz9bIkVSUk9SIGZldGNoaW5nIHNvdXJjZSJdKX0pKG8pLFthLHVdPXAudXNlU3RhdGUoZXx8cy52YWx1ZXNbMF0pLFtjLGRdPXAudXNlU3RhdGUoITEpO3AudXNlRWZmZWN0KCgpPT57ZCh0KX0sW3RdKTtjb25zdCBmPWg9PntpZihzLnR5cGU9PT0ibnVtYmVyIil7aWYoaD09PSIiKXRocm93IG5ldyBFcnJvcigiVmFsdWUgY2Fubm90IGJlIGVtcHR5Iik7aWYoTnVtYmVyLmlzTmFOKE51bWJlcihoKSkpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSB3YXMgbm90IGEgbnVtYmVyOiAiK0pTT04uc3RyaW5naWZ5KGgpKTtyZXR1cm4gTnVtYmVyKGgpfXJldHVybiBofTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntuJiZuKGFzeW5jIGg9Plt7b3A6InJlcGxhY2UiLHBhdGg6aCx2YWx1ZTphfV0pfSxbYV0pLHguanN4cyhwbCx7Y2hpbGRyZW46W3guanN4cyhDayx7ZGVmYXVsdFZhbHVlOmEudG9TdHJpbmcoKSxkaXNhYmxlZDpjLG9uVmFsdWVDaGFuZ2U6aD0+e3UoZihoKSl9LGNoaWxkcmVuOlt4LmpzeChadix7Y2hpbGRyZW46eC5qc3goa2sse3BsYWNlaG9sZGVyOiJTZWxlY3QgYSB2YWx1ZSJ9KX0pLHguanN4KEd2LHtjaGlsZHJlbjpzLnZhbHVlcy5tYXAoaD0+eC5qc3goWXYse3ZhbHVlOmgudG9TdHJpbmcoKSxjaGlsZHJlbjpoLnRvU3RyaW5nKCl9LGgpKX0pXX0pLHImJnguanN4KFVzLHtsb2FkaW5nOmMsZW5hYmxlZDplIT09YSxvbkNsaWNrOigpPT57ZCghMCkscihhc3luYyBoPT5be29wOiJyZXBsYWNlIixwYXRoOmgsdmFsdWU6YX1dKS5maW5hbGx5KCgpPT57ZCghMSl9KX19KV19KX1mdW5jdGlvbiBsXyh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyfSl7Y29uc3RbaSxvXT1wLnVzZVN0YXRlKGV8fDApLFtsLHNdPXAudXNlU3RhdGUoITEpO3AudXNlRWZmZWN0KCgpPT57cyh0KX0sW3RdKTtjb25zdCBhPXAudXNlUmVmKG51bGwpO3JldHVybiBwLnVzZUVmZmVjdCgoKT0+e24mJm4oYXN5bmMgdT0+e3ZhciBjO3JldHVyblt7b3A6InJlcGxhY2UiLHBhdGg6dSx2YWx1ZTpOdW1iZXIoKGM9YS5jdXJyZW50KT09bnVsbD92b2lkIDA6Yy52YWx1ZSl8fDB9XX0pfSxbXSkseC5qc3hzKHBsLHtjaGlsZHJlbjpbeC5qc3goanYse3JlZjphLGRpc2FibGVkOmwsZGVmYXVsdFZhbHVlOmk/PzAsb25DaGFuZ2U6dT0+byhOdW1iZXIodS50YXJnZXQudmFsdWUpKSx0eXBlOiJudW1iZXIifSksciYmeC5qc3goVXMse2xvYWRpbmc6bCxlbmFibGVkOmUhPT1pLG9uQ2xpY2s6KCk9PntzKCEwKSxyKGFzeW5jIHU9Pnt2YXIgYztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnUsdmFsdWU6TnVtYmVyKChjPWEuY3VycmVudCk9PW51bGw/dm9pZCAwOmMudmFsdWUpfHwwfV19KS5maW5hbGx5KCgpPT57cyghMSl9KX19KV19KX1mdW5jdGlvbiB0TCh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxwYXRoOm4sc2NoZW1hOnIscmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6b30pe2NvbnN0W2wsc109cC51c2VTdGF0ZShlfHwiIiksW2EsdV09cC51c2VTdGF0ZSghMSk7cC51c2VFZmZlY3QoKCk9Pnt1KHQpfSxbdF0pO2NvbnN0IGM9cC51c2VSZWYobnVsbCk7cC51c2VFZmZlY3QoKCk9PntpJiZpKGFzeW5jIGg9Pnt2YXIgZztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOmgsdmFsdWU6KChnPWMuY3VycmVudCk9PW51bGw/dm9pZCAwOmcudmFsdWUpfHwiIn1dfSl9LFtdKTtjb25zdCBmPW5ldyBSTihyLm9wdGlvbnM/ey4uLnIub3B0aW9ucyxyZWdleHA6ci5vcHRpb25zLnJlZ2V4cD9uZXcgUmVnRXhwKHIub3B0aW9ucy5yZWdleHAuc291cmNlLHIub3B0aW9ucy5yZWdleHAuZmxhZ3MpOnZvaWQgMH06dm9pZCAwKS52YWxpZGF0ZShuLGwpO3JldHVybiB4LmpzeHMocGwse2NoaWxkcmVuOlt4LmpzeChqdix7cmVmOmMsZGlzYWJsZWQ6YSxkZWZhdWx0VmFsdWU6bD8/IiIsb25DaGFuZ2U6aD0+cyhoLnRhcmdldC52YWx1ZSl9KSxvJiZ4LmpzeChVcyx7dmFsaWRhdGlvbkVycm9yczpmJiZmW25dLGxvYWRpbmc6YSxlbmFibGVkOmUhPT1sJiYhZixvbkNsaWNrOigpPT57dSghMCksbyhhc3luYyBoPT57dmFyIGc7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDpoLHZhbHVlOigoZz1jLmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpnLnZhbHVlKXx8IiJ9XX0pLmZpbmFsbHkoKCk9Pnt1KCExKX0pfX0pXX0pfWZ1bmN0aW9uIG5MKHtlcnJvcnM6dH0pe3JldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIHAtMiB0ZXh0LXNtIHJvdW5kZWQtbWQgZ2FwLXktMSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOnQubWFwKChlLG4pPT54LmpzeCgiZGl2Iix7Y2hpbGRyZW46ZS5tZXNzYWdlfSxuKSl9KX1mdW5jdGlvbiBwbCh7Y2hpbGRyZW46dCxjbGFzc05hbWU6ZX0pe3JldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOlBuKCJyZWxhdGl2ZSBtYXgtdy1sZyBweC00IHB0LTQiLGUpLGNoaWxkcmVuOnR9KX1mdW5jdGlvbiBVcyh7bG9hZGluZzp0LGVuYWJsZWQ6ZSx2YWxpZGF0aW9uRXJyb3JzOm4sb25DbGljazpyfSl7Y29uc3R7c2Vzc2lvbjppfT1qZigpLG89aS5zdGF0dXM9PT0ic3VjY2VzcyImJmkuZGF0YS5tb2RlPT09InByb3h5IjtyZXR1cm4geC5qc3goImRpdiIse2NsYXNzTmFtZToic3RpY2t5IGJvdHRvbS0wIG0tNCBtdC0yIG1sLTAiLGNoaWxkcmVuOnguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktc3RhcnQgdy1mdWxsIGdhcC0yIHRleHQtc20iLGNoaWxkcmVuOlt4LmpzeChJQyx7ZGlzYWJsZWQ6dHx8IWUsb25DbGljazpyLGNoaWxkcmVuOnQ/bz8iU3RhZ2luZy4uLiI6IlNhdmluZy4uLiI6bz8iU3RhZ2UiOiJTYXZlIn0pLCIgIixuP3guanN4KG5MLHtlcnJvcnM6bnx8W119KTp4LmpzeCgic3BhbiIse30pXX0pfSl9Y29uc3Qgckw9KHtjbGFzc05hbWU6dH0pPT54LmpzeHMoInN2ZyIse3dpZHRoOiI1OCIsaGVpZ2h0OiIzNCIsdmlld0JveDoiMCAwIDU4IDM0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZTp0LGNoaWxkcmVuOlt4LmpzeCgiZyIse2ZpbHRlcjoidXJsKCNmaWx0ZXIwX2RfMjFfMTY3NykiLGNoaWxkcmVuOnguanN4KCJwYXRoIix7ZDoiTTUgNS4zNjQyNkM1IDUuMTYzMDkgNS4xNjMwOSA1IDUuMzY0MjYgNUgxNy42NTgxQzE3Ljg1OTMgNSAxOC4wMjIzIDUuMTYzMDkgMTguMDIyMyA1LjM2NDI2VjI4LjQ5NDlDMTguMDIyMyAyOC42OTYgMTcuODU5MyAyOC44NTkxIDE3LjY1ODEgMjguODU5MUg1LjM2NDI2QzUuMTYzMDkgMjguODU5MSA1IDI4LjY5NiA1IDI4LjQ5NDlWNS4zNjQyNloiLGZpbGw6ImhzbCh2YXIoLS1hY2NlbnQpKSJ9KX0pLHguanN4KCJnIix7ZmlsdGVyOiJ1cmwoI2ZpbHRlcjFfaV8yMV8xNjc3KSIsY2hpbGRyZW46eC5qc3goImNpcmNsZSIse2N4OiIxMS40NjU2IixjeToiMjMuNzU5NSIscjoiMi4xODU1NyIsZmlsbDoiY3VycmVudENvbG9yIn0pfSkseC5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik01Mi44NTg4IDIzLjgzOUg0OC43MjU3SDQ4LjUzN0g0OC4xMTI4QzQ3LjY3MTUgMjMuODM5IDQ3LjQ1MDggMjMuNTk0MiA0Ny40NTA4IDIzLjEwNDRWMTMuNzI5M0M0Ny40NTA4IDEzLjU3ODQgNDcuMzI4NSAxMy40NTYxIDQ3LjE3NzcgMTMuNDU2MUg0NS44MTE4QzQ1LjY2MDkgMTMuNDU2MSA0NS41Mzg2IDEzLjU3ODQgNDUuNTM4NiAxMy43MjkzVjE1LjE4MzZDNDUuNTM4NiAxNS4yODQ0IDQ1LjQ1NjkgMTUuMzY2MSA0NS4zNTYxIDE1LjM2NjFDNDUuMjg3NiAxNS4zNjYxIDQ1LjIyNSAxNS4zMjc1IDQ1LjE5MjQgMTUuMjY3MkM0NC44MDUgMTQuNTUwMyA0NC4yODMgMTQuMDIgNDMuNjI2NCAxMy42NzY1QzQyLjk1NjMgMTMuMzAxIDQyLjIwNDUgMTMuMTEzMiA0MS4zNzA5IDEzLjExMzJDNDAuNjAyOCAxMy4xMTMyIDM5Ljg3NTUgMTMuMjUyIDM5LjE4OSAxMy41Mjk1QzM4LjUwMjYgMTMuODA3MSAzNy44OTc5IDE0LjIxNTIgMzcuMzc0OCAxNC43NTM5QzM2Ljg2ODIgMTUuMjc2NCAzNi40Njc4IDE1LjkyMTIgMzYuMTczNiAxNi42ODg1QzM1Ljg3OTQgMTcuNDU1OCAzNS43MzIzIDE4LjMzNzQgMzUuNzMyMyAxOS4zMzMyVjE5LjcyNUMzNS43MzIzIDIwLjczNzIgMzUuODc5NCAyMS42MjcgMzYuMTczNiAyMi4zOTQyQzM2LjQ2NzggMjMuMTYxNSAzNi44NjgyIDIzLjgxNDYgMzcuMzc0OCAyNC4zNTMzQzM3Ljg5NzkgMjQuODc1NyAzOC41MDI2IDI1LjI3NTcgMzkuMTg5IDI1LjU1MzJDMzkuODc1NSAyNS44MTQ0IDQwLjYxOTEgMjUuOTQ1IDQxLjQyIDI1Ljk0NUM0Mi4xODgxIDI1Ljk0NSA0Mi45MTU0IDI1Ljc0OTEgNDMuNjAxOSAyNS4zNTczQzQ0LjI3NTEgMjQuOTgyIDQ0LjgwNTggMjQuNDExOSA0NS4xOTQxIDIzLjY0NzFDNDUuMjI1NSAyMy41ODUyIDQ1LjI4ODYgMjMuNTQ1MiA0NS4zNTggMjMuNTQ1Mkg0NS4zOTE3QzQ1LjQ3MjggMjMuNTQ1MiA0NS41Mzg2IDIzLjYxMSA0NS41Mzg2IDIzLjY5MjFDNDUuNTM4NiAyMy43OTA0IDQ1LjU0NCAyMy44ODU2IDQ1LjU1NDcgMjMuOTc3N1YyNS4xMzkyQzQ1LjU1NDcgMjUuMzkwNCA0NS43NTg0IDI1LjU5NDEgNDYuMDA5NiAyNS41OTQxSDQ3LjIyNjFDNDcuMjkxNCAyNS41OTk1IDQ3LjM1ODEgMjUuNjAyMiA0Ny40MjYzIDI1LjYwMjJINDguNTM3SDQ4LjcyNTdINTcuNzI2OEM1Ny44Nzc3IDI1LjYwMjIgNTggMjUuNDc5OSA1OCAyNS4zMjlWMjQuMTEyMkM1OCAyMy45NjE0IDU3Ljg3NzcgMjMuODM5IDU3LjcyNjggMjMuODM5SDU1LjMxNzRDNTUuMTY2NSAyMy44MzkgNTUuMDQ0MiAyMy43MTY3IDU1LjA0NDIgMjMuNTY1OVY4LjczMzY4QzU1LjA0NDIgOC41ODI3OSA1NC45MjE5IDguNDYwNDggNTQuNzcxIDguNDYwNDhINTAuNTA1NEM1MC4zNTQ1IDguNDYwNDggNTAuMjMyMiA4LjU4Mjc5IDUwLjIzMjIgOC43MzM2OFY5Ljk1MDQzQzUwLjIzMjIgMTAuMTAxMyA1MC4zNTQ1IDEwLjIyMzYgNTAuNTA1NCAxMC4yMjM2SDUyLjg1ODhDNTMuMDA5NyAxMC4yMjM2IDUzLjEzMiAxMC4zNDU5IDUzLjEzMiAxMC40OTY4VjIzLjU2NTlDNTMuMTMyIDIzLjcxNjcgNTMuMDA5NyAyMy44MzkgNTIuODU4OCAyMy44MzlaTTQxLjYxNjEgMjQuMTMyOUM0Mi4xODgxIDI0LjEzMjkgNDIuNzExMSAyNC4wMjY4IDQzLjE4NTEgMjMuODE0NkM0My42NzU0IDIzLjYwMjMgNDQuMDkyMiAyMy4zMDAzIDQ0LjQzNTQgMjIuOTA4NUM0NC43Nzg2IDIyLjUxNjcgNDUuMDQ4MyAyMi4wNTE0IDQ1LjI0NDQgMjEuNTEyN0M0NS40NDA2IDIwLjk1NzYgNDUuNTM4NiAyMC4zNDU0IDQ1LjUzODYgMTkuNjc2MVYxOS4zODIyQzQ1LjUzODYgMTguNzI5MiA0NS40NDA2IDE4LjEzMzMgNDUuMjQ0NCAxNy41OTQ2QzQ1LjA0ODMgMTcuMDM5NSA0NC43NzA1IDE2LjU2NjEgNDQuNDEwOSAxNi4xNzQzQzQ0LjA2NzcgMTUuNzgyNCA0My42NTA5IDE1LjQ4MDQgNDMuMTYwNiAxNS4yNjgyQzQyLjY4NjYgMTUuMDM5NiA0Mi4xNzE4IDE0LjkyNTQgNDEuNjE2MSAxNC45MjU0QzQxLjA0NCAxNC45MjU0IDQwLjUyMSAxNS4wMzE1IDQwLjA0NzEgMTUuMjQzN0MzOS41NzMxIDE1LjQ1NTkgMzkuMTU2MyAxNS43NTggMzguNzk2OCAxNi4xNDk4QzM4LjQ1MzUgMTYuNTI1MiAzOC4xODM5IDE2Ljk5MDUgMzcuOTg3NyAxNy41NDU2QzM3Ljc5MTYgMTguMDg0MyAzNy42OTM2IDE4LjY4MDIgMzcuNjkzNiAxOS4zMzMyVjE5LjcyNUMzNy42OTM2IDIxLjExMjcgMzguMDUzMSAyMi4xOTgzIDM4Ljc3MjIgMjIuOTgyQzM5LjUwNzcgMjMuNzQ5MyA0MC40NTU3IDI0LjEzMjkgNDEuNjE2MSAyNC4xMzI5Wk0zMS4xMTE1IDI1LjQxOTFDMzEuMDczMiAyNS41Mjg3IDMwLjk2OTggMjUuNjAyMiAzMC44NTM2IDI1LjYwMjJIMjcuNDY2MUMyNy4zNSAyNS42MDIyIDI3LjI0NjUgMjUuNTI4NyAyNy4yMDgyIDI1LjQxOTFMMjMuMTU3OCAxMy44MTkzQzIzLjA5NTggMTMuNjQxNyAyMy4yMjc2IDEzLjQ1NjEgMjMuNDE1NyAxMy40NTYxSDI1LjA4OUMyNS4yMDY4IDEzLjQ1NjEgMjUuMzExNCAxMy41MzE2IDI1LjM0ODQgMTMuNjQzNUwyOC45NjY2IDI0LjU4MUMyOC45OTQyIDI0LjY2NDMgMjkuMDcyMSAyNC43MjA2IDI5LjE1OTkgMjQuNzIwNkMyOS4yNDc3IDI0LjcyMDYgMjkuMzI1NiAyNC42NjQzIDI5LjM1MzIgMjQuNTgxTDMyLjk3MTQgMTMuNjQzNUMzMy4wMDg0IDEzLjUzMTYgMzMuMTEyOSAxMy40NTYxIDMzLjIzMDggMTMuNDU2MUgzNC45MDQxQzM1LjA5MjIgMTMuNDU2MSAzNS4yMjQgMTMuNjQxNyAzNS4xNjIgMTMuODE5M0wzMS4xMTE1IDI1LjQxOTFaIixmaWxsOiJjdXJyZW50Q29sb3IifSkseC5qc3hzKCJkZWZzIix7Y2hpbGRyZW46W3guanN4cygiZmlsdGVyIix7aWQ6ImZpbHRlcjBfZF8yMV8xNjc3Iix4OiIwLjEyNDcyMiIseToiMC4xMjQ3MjIiLHdpZHRoOiIyMi43NzI5IixoZWlnaHQ6IjMzLjYwOTciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W3guanN4KCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSx4LmpzeCgiZmVDb2xvck1hdHJpeCIse2luOiJTb3VyY2VBbHBoYSIsdHlwZToibWF0cml4Iix2YWx1ZXM6IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIixyZXN1bHQ6ImhhcmRBbHBoYSJ9KSx4LmpzeCgiZmVPZmZzZXQiLHt9KSx4LmpzeCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjIuNDM3NjQifSkseC5qc3goImZlQ29tcG9zaXRlIix7aW4yOiJoYXJkQWxwaGEiLG9wZXJhdG9yOiJvdXQifSkseC5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSkseC5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6ImVmZmVjdDFfZHJvcFNoYWRvd18yMV8xNjc3In0pLHguanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJlZmZlY3QxX2Ryb3BTaGFkb3dfMjFfMTY3NyIscmVzdWx0OiJzaGFwZSJ9KV19KSx4LmpzeHMoImZpbHRlciIse2lkOiJmaWx0ZXIxX2lfMjFfMTY3NyIseDoiOS4yODAwMyIseToiMjEuNTczOSIsd2lkdGg6IjQuMzcxMTIiLGhlaWdodDoiNC4zNzExMiIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbeC5qc3goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLHguanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSkseC5qc3goImZlQ29sb3JNYXRyaXgiLHtpbjoiU291cmNlQWxwaGEiLHR5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIscmVzdWx0OiJoYXJkQWxwaGEifSkseC5qc3goImZlT2Zmc2V0Iix7fSkseC5qc3goImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjU0NjM5MiJ9KSx4LmpzeCgiZmVDb21wb3NpdGUiLHtpbjI6ImhhcmRBbHBoYSIsb3BlcmF0b3I6ImFyaXRobWV0aWMiLGsyOiItMSIsazM6IjEifSkseC5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSkseC5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoic2hhcGUiLHJlc3VsdDoiZWZmZWN0MV9pbm5lclNoYWRvd18yMV8xNjc3In0pXX0pXX0pXX0pLCRrPXJMLFRrPSJTd2l0Y2giLFtpTCxQSV09YWwoVGspLFtvTCxsTF09aUwoVGspLHNMPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTd2l0Y2g6bixuYW1lOnIsY2hlY2tlZDppLGRlZmF1bHRDaGVja2VkOm8scmVxdWlyZWQ6bCxkaXNhYmxlZDpzLHZhbHVlOmE9Im9uIixvbkNoZWNrZWRDaGFuZ2U6dSwuLi5jfT10LFtkLGZdPXAudXNlU3RhdGUobnVsbCksaD1zdChlLHk9PmYoeSkpLGc9cC51c2VSZWYoITEpLG09ZD8hIWQuY2xvc2VzdCgiZm9ybSIpOiEwLFt3PSExLHZdPV9zKHtwcm9wOmksZGVmYXVsdFByb3A6byxvbkNoYW5nZTp1fSk7cmV0dXJuIHAuY3JlYXRlRWxlbWVudChvTCx7c2NvcGU6bixjaGVja2VkOncsZGlzYWJsZWQ6c30scC5jcmVhdGVFbGVtZW50KEtlLmJ1dHRvbixvZSh7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOncsImFyaWEtcmVxdWlyZWQiOmwsImRhdGEtc3RhdGUiOk5rKHcpLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCxkaXNhYmxlZDpzLHZhbHVlOmF9LGMse3JlZjpoLG9uQ2xpY2s6bnQodC5vbkNsaWNrLHk9Pnt2KF89PiFfKSxtJiYoZy5jdXJyZW50PXkuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxnLmN1cnJlbnR8fHkuc3RvcFByb3BhZ2F0aW9uKCkpfSl9KSksbSYmcC5jcmVhdGVFbGVtZW50KGNMLHtjb250cm9sOmQsYnViYmxlczohZy5jdXJyZW50LG5hbWU6cix2YWx1ZTphLGNoZWNrZWQ6dyxyZXF1aXJlZDpsLGRpc2FibGVkOnMsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMTAwJSkifX0pKX0pLGFMPSJTd2l0Y2hUaHVtYiIsdUw9cC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVN3aXRjaDpuLC4uLnJ9PXQsaT1sTChhTCxuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2UoeyJkYXRhLXN0YXRlIjpOayhpLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjppLmRpc2FibGVkPyIiOnZvaWQgMH0scix7cmVmOmV9KSl9KSxjTD10PT57Y29uc3R7Y29udHJvbDplLGNoZWNrZWQ6bixidWJibGVzOnI9ITAsLi4uaX09dCxvPXAudXNlUmVmKG51bGwpLGw9cmsobikscz1YQyhlKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCBhPW8uY3VycmVudCx1PXdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodSwiY2hlY2tlZCIpLnNldDtpZihsIT09biYmZCl7Y29uc3QgZj1uZXcgRXZlbnQoImNsaWNrIix7YnViYmxlczpyfSk7ZC5jYWxsKGEsbiksYS5kaXNwYXRjaEV2ZW50KGYpfX0sW2wsbixyXSkscC5jcmVhdGVFbGVtZW50KCJpbnB1dCIsb2Uoe3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOm59LGkse3RhYkluZGV4Oi0xLHJlZjpvLHN0eWxlOnsuLi50LnN0eWxlLC4uLnMscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjB9fSkpfTtmdW5jdGlvbiBOayh0KXtyZXR1cm4gdD8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y29uc3QgUms9c0wsZEw9dUwsT2s9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsLi4uZX0sbik9PnguanN4KFJrLHtjbGFzc05hbWU6eHQoInBlZXIgaW5saW5lLWZsZXggaC1bMjJweF0gdy1bNDRweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTpiZy1wcmltYXJ5Iix0KSwuLi5lLHJlZjpuLGNoaWxkcmVuOnguanN4KGRMLHtjbGFzc05hbWU6eHQoInBvaW50ZXItZXZlbnRzLW5vbmUgYmxvY2sgaC1bMThweF0gdy01IHJvdW5kZWQtZnVsbCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1sZyByaW5nLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dHJhbnNsYXRlLXgtNSBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOnRyYW5zbGF0ZS14LTAiKX0pfSkpO09rLmRpc3BsYXlOYW1lPVJrLmRpc3BsYXlOYW1lO2NvbnN0IFh2PXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT54LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJyb3VuZGVkLWxnIGJvcmRlciBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSIsdCksLi4uZX0pKTtYdi5kaXNwbGF5TmFtZT0iQ2FyZCI7Y29uc3QgZkw9cC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsLi4uZX0sbik9PnguanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6eHQoImZsZXggZmxleC1jb2wgc3BhY2UteS0xLjUgcC02Iix0KSwuLi5lfSkpO2ZMLmRpc3BsYXlOYW1lPSJDYXJkSGVhZGVyIjtjb25zdCBoTD1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eC5qc3goImgzIix7cmVmOm4sY2xhc3NOYW1lOnh0KCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCIsdCksLi4uZX0pKTtoTC5kaXNwbGF5TmFtZT0iQ2FyZFRpdGxlIjtjb25zdCBwTD1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eC5qc3goInAiLHtyZWY6bixjbGFzc05hbWU6eHQoInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIix0KSwuLi5lfSkpO3BMLmRpc3BsYXlOYW1lPSJDYXJkRGVzY3JpcHRpb24iO2NvbnN0IG1MPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT54LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJwLTYgcHQtMCIsdCksLi4uZX0pKTttTC5kaXNwbGF5TmFtZT0iQ2FyZENvbnRlbnQiO2NvbnN0IGdMPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT54LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJmbGV4IGl0ZW1zLWNlbnRlciBwLTYgcHQtMCIsdCksLi4uZX0pKTtnTC5kaXNwbGF5TmFtZT0iQ2FyZEZvb3RlciI7LyoqCiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjEzLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiB5dCgpe3JldHVybiB5dD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LHl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgd3Q7KGZ1bmN0aW9uKHQpe3QuUG9wPSJQT1AiLHQuUHVzaD0iUFVTSCIsdC5SZXBsYWNlPSJSRVBMQUNFIn0pKHd0fHwod3Q9e30pKTtjb25zdCBzXz0icG9wc3RhdGUiO2Z1bmN0aW9uIHZMKHQpe3Q9PT12b2lkIDAmJih0PXt9KTtmdW5jdGlvbiBlKHIsaSl7bGV0e3BhdGhuYW1lOm8sc2VhcmNoOmwsaGFzaDpzfT1yLmxvY2F0aW9uO3JldHVybiBUdSgiIix7cGF0aG5hbWU6byxzZWFyY2g6bCxoYXNoOnN9LGkuc3RhdGUmJmkuc3RhdGUudXNyfHxudWxsLGkuc3RhdGUmJmkuc3RhdGUua2V5fHwiZGVmYXVsdCIpfWZ1bmN0aW9uIG4ocixpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2k6S3UoaSl9cmV0dXJuIHhMKGUsbixudWxsLHQpfWZ1bmN0aW9uIE9lKHQsZSl7aWYodD09PSExfHx0PT09bnVsbHx8dHlwZW9mIHQ+InUiKXRocm93IG5ldyBFcnJvcihlKX1mdW5jdGlvbiBvbCh0LGUpe2lmKCF0KXt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybihlKTt0cnl7dGhyb3cgbmV3IEVycm9yKGUpfWNhdGNoe319fWZ1bmN0aW9uIHlMKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDgpfWZ1bmN0aW9uIGFfKHQsZSl7cmV0dXJue3Vzcjp0LnN0YXRlLGtleTp0LmtleSxpZHg6ZX19ZnVuY3Rpb24gVHUodCxlLG4scil7cmV0dXJuIG49PT12b2lkIDAmJihuPW51bGwpLHl0KHtwYXRobmFtZTp0eXBlb2YgdD09InN0cmluZyI/dDp0LnBhdGhuYW1lLHNlYXJjaDoiIixoYXNoOiIifSx0eXBlb2YgZT09InN0cmluZyI/TmkoZSk6ZSx7c3RhdGU6bixrZXk6ZSYmZS5rZXl8fHJ8fHlMKCl9KX1mdW5jdGlvbiBLdSh0KXtsZXR7cGF0aG5hbWU6ZT0iLyIsc2VhcmNoOm49IiIsaGFzaDpyPSIifT10O3JldHVybiBuJiZuIT09Ij8iJiYoZSs9bi5jaGFyQXQoMCk9PT0iPyI/bjoiPyIrbiksciYmciE9PSIjIiYmKGUrPXIuY2hhckF0KDApPT09IiMiP3I6IiMiK3IpLGV9ZnVuY3Rpb24gTmkodCl7bGV0IGU9e307aWYodCl7bGV0IG49dC5pbmRleE9mKCIjIik7bj49MCYmKGUuaGFzaD10LnN1YnN0cihuKSx0PXQuc3Vic3RyKDAsbikpO2xldCByPXQuaW5kZXhPZigiPyIpO3I+PTAmJihlLnNlYXJjaD10LnN1YnN0cihyKSx0PXQuc3Vic3RyKDAscikpLHQmJihlLnBhdGhuYW1lPXQpfXJldHVybiBlfWZ1bmN0aW9uIHhMKHQsZSxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7d2luZG93Omk9ZG9jdW1lbnQuZGVmYXVsdFZpZXcsdjVDb21wYXQ6bz0hMX09cixsPWkuaGlzdG9yeSxzPXd0LlBvcCxhPW51bGwsdT1jKCk7dT09bnVsbCYmKHU9MCxsLnJlcGxhY2VTdGF0ZSh5dCh7fSxsLnN0YXRlLHtpZHg6dX0pLCIiKSk7ZnVuY3Rpb24gYygpe3JldHVybihsLnN0YXRlfHx7aWR4Om51bGx9KS5pZHh9ZnVuY3Rpb24gZCgpe3M9d3QuUG9wO2xldCB3PWMoKSx2PXc9PW51bGw/bnVsbDp3LXU7dT13LGEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOm0ubG9jYXRpb24sZGVsdGE6dn0pfWZ1bmN0aW9uIGYodyx2KXtzPXd0LlB1c2g7bGV0IHk9VHUobS5sb2NhdGlvbix3LHYpO24mJm4oeSx3KSx1PWMoKSsxO2xldCBfPWFfKHksdSksUz1tLmNyZWF0ZUhyZWYoeSk7dHJ5e2wucHVzaFN0YXRlKF8sIiIsUyl9Y2F0Y2goRSl7aWYoRSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmRS5uYW1lPT09IkRhdGFDbG9uZUVycm9yIil0aHJvdyBFO2kubG9jYXRpb24uYXNzaWduKFMpfW8mJmEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOm0ubG9jYXRpb24sZGVsdGE6MX0pfWZ1bmN0aW9uIGgodyx2KXtzPXd0LlJlcGxhY2U7bGV0IHk9VHUobS5sb2NhdGlvbix3LHYpO24mJm4oeSx3KSx1PWMoKTtsZXQgXz1hXyh5LHUpLFM9bS5jcmVhdGVIcmVmKHkpO2wucmVwbGFjZVN0YXRlKF8sIiIsUyksbyYmYSYmYSh7YWN0aW9uOnMsbG9jYXRpb246bS5sb2NhdGlvbixkZWx0YTowfSl9ZnVuY3Rpb24gZyh3KXtsZXQgdj1pLmxvY2F0aW9uLm9yaWdpbiE9PSJudWxsIj9pLmxvY2F0aW9uLm9yaWdpbjppLmxvY2F0aW9uLmhyZWYseT10eXBlb2Ygdz09InN0cmluZyI/dzpLdSh3KTtyZXR1cm4gT2UodiwiTm8gd2luZG93LmxvY2F0aW9uLihvcmlnaW58aHJlZikgYXZhaWxhYmxlIHRvIGNyZWF0ZSBVUkwgZm9yIGhyZWY6ICIreSksbmV3IFVSTCh5LHYpfWxldCBtPXtnZXQgYWN0aW9uKCl7cmV0dXJuIHN9LGdldCBsb2NhdGlvbigpe3JldHVybiB0KGksbCl9LGxpc3Rlbih3KXtpZihhKXRocm93IG5ldyBFcnJvcigiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyIik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcihzXyxkKSxhPXcsKCk9PntpLnJlbW92ZUV2ZW50TGlzdGVuZXIoc18sZCksYT1udWxsfX0sY3JlYXRlSHJlZih3KXtyZXR1cm4gZShpLHcpfSxjcmVhdGVVUkw6ZyxlbmNvZGVMb2NhdGlvbih3KXtsZXQgdj1nKHcpO3JldHVybntwYXRobmFtZTp2LnBhdGhuYW1lLHNlYXJjaDp2LnNlYXJjaCxoYXNoOnYuaGFzaH19LHB1c2g6ZixyZXBsYWNlOmgsZ28odyl7cmV0dXJuIGwuZ28odyl9fTtyZXR1cm4gbX12YXIgU3Q7KGZ1bmN0aW9uKHQpe3QuZGF0YT0iZGF0YSIsdC5kZWZlcnJlZD0iZGVmZXJyZWQiLHQucmVkaXJlY3Q9InJlZGlyZWN0Iix0LmVycm9yPSJlcnJvciJ9KShTdHx8KFN0PXt9KSk7Y29uc3QgX0w9bmV3IFNldChbImxhenkiLCJjYXNlU2Vuc2l0aXZlIiwicGF0aCIsImlkIiwiaW5kZXgiLCJjaGlsZHJlbiJdKTtmdW5jdGlvbiB3TCh0KXtyZXR1cm4gdC5pbmRleD09PSEwfWZ1bmN0aW9uIEttKHQsZSxuLHIpe3JldHVybiBuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9e30pLHQubWFwKChpLG8pPT57bGV0IGw9Wy4uLm4sb10scz10eXBlb2YgaS5pZD09InN0cmluZyI/aS5pZDpsLmpvaW4oIi0iKTtpZihPZShpLmluZGV4IT09ITB8fCFpLmNoaWxkcmVuLCJDYW5ub3Qgc3BlY2lmeSBjaGlsZHJlbiBvbiBhbiBpbmRleCByb3V0ZSIpLE9lKCFyW3NdLCdGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCAiJytzK2AiLiAgUm91dGUgaWQncyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSB3aXRoaW4gRGF0YSBSb3V0ZXIgdXNhZ2VzYCksd0woaSkpe2xldCBhPXl0KHt9LGksZShpKSx7aWQ6c30pO3JldHVybiByW3NdPWEsYX1lbHNle2xldCBhPXl0KHt9LGksZShpKSx7aWQ6cyxjaGlsZHJlbjp2b2lkIDB9KTtyZXR1cm4gcltzXT1hLGkuY2hpbGRyZW4mJihhLmNoaWxkcmVuPUttKGkuY2hpbGRyZW4sZSxsLHIpKSxhfX0pfWZ1bmN0aW9uIEhsKHQsZSxuKXtuPT09dm9pZCAwJiYobj0iLyIpO2xldCByPXR5cGVvZiBlPT0ic3RyaW5nIj9OaShlKTplLGk9WnUoci5wYXRobmFtZXx8Ii8iLG4pO2lmKGk9PW51bGwpcmV0dXJuIG51bGw7bGV0IG89UGsodCk7RUwobyk7bGV0IGw9bnVsbDtmb3IobGV0IHM9MDtsPT1udWxsJiZzPG8ubGVuZ3RoOysrcylsPVBMKG9bc10sTEwoaSkpO3JldHVybiBsfWZ1bmN0aW9uIFNMKHQsZSl7bGV0e3JvdXRlOm4scGF0aG5hbWU6cixwYXJhbXM6aX09dDtyZXR1cm57aWQ6bi5pZCxwYXRobmFtZTpyLHBhcmFtczppLGRhdGE6ZVtuLmlkXSxoYW5kbGU6bi5oYW5kbGV9fWZ1bmN0aW9uIFBrKHQsZSxuLHIpe2U9PT12b2lkIDAmJihlPVtdKSxuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9IiIpO2xldCBpPShvLGwscyk9PntsZXQgYT17cmVsYXRpdmVQYXRoOnM9PT12b2lkIDA/by5wYXRofHwiIjpzLGNhc2VTZW5zaXRpdmU6by5jYXNlU2Vuc2l0aXZlPT09ITAsY2hpbGRyZW5JbmRleDpsLHJvdXRlOm99O2EucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoIi8iKSYmKE9lKGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggIicrYS5yZWxhdGl2ZVBhdGgrJyIgbmVzdGVkIHVuZGVyIHBhdGggJysoJyInK3IrJyIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoICcpKyJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLiIpLGEucmVsYXRpdmVQYXRoPWEucmVsYXRpdmVQYXRoLnNsaWNlKHIubGVuZ3RoKSk7bGV0IHU9aW8oW3IsYS5yZWxhdGl2ZVBhdGhdKSxjPW4uY29uY2F0KGEpO28uY2hpbGRyZW4mJm8uY2hpbGRyZW4ubGVuZ3RoPjAmJihPZShvLmluZGV4IT09ITAsIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSAiKygnYWxsIGNoaWxkIHJvdXRlcyBmcm9tIHJvdXRlIHBhdGggIicrdSsnIi4nKSksUGsoby5jaGlsZHJlbixlLGMsdSkpLCEoby5wYXRoPT1udWxsJiYhby5pbmRleCkmJmUucHVzaCh7cGF0aDp1LHNjb3JlOlJMKHUsby5pbmRleCkscm91dGVzTWV0YTpjfSl9O3JldHVybiB0LmZvckVhY2goKG8sbCk9Pnt2YXIgcztpZihvLnBhdGg9PT0iInx8ISgocz1vLnBhdGgpIT1udWxsJiZzLmluY2x1ZGVzKCI/IikpKWkobyxsKTtlbHNlIGZvcihsZXQgYSBvZiBBayhvLnBhdGgpKWkobyxsLGEpfSksZX1mdW5jdGlvbiBBayh0KXtsZXQgZT10LnNwbGl0KCIvIik7aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldFtuLC4uLnJdPWUsaT1uLmVuZHNXaXRoKCI/Iiksbz1uLnJlcGxhY2UoL1w/JC8sIiIpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gaT9bbywiIl06W29dO2xldCBsPUFrKHIuam9pbigiLyIpKSxzPVtdO3JldHVybiBzLnB1c2goLi4ubC5tYXAoYT0+YT09PSIiP286W28sYV0uam9pbigiLyIpKSksaSYmcy5wdXNoKC4uLmwpLHMubWFwKGE9PnQuc3RhcnRzV2l0aCgiLyIpJiZhPT09IiI/Ii8iOmEpfWZ1bmN0aW9uIEVMKHQpe3Quc29ydCgoZSxuKT0+ZS5zY29yZSE9PW4uc2NvcmU/bi5zY29yZS1lLnNjb3JlOk9MKGUucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSxuLnJvdXRlc01ldGEubWFwKHI9PnIuY2hpbGRyZW5JbmRleCkpKX1jb25zdCBDTD0vXjpcdyskLyxrTD0zLGJMPTIsJEw9MSxUTD0xMCxOTD0tMix1Xz10PT50PT09IioiO2Z1bmN0aW9uIFJMKHQsZSl7bGV0IG49dC5zcGxpdCgiLyIpLHI9bi5sZW5ndGg7cmV0dXJuIG4uc29tZSh1XykmJihyKz1OTCksZSYmKHIrPWJMKSxuLmZpbHRlcihpPT4hdV8oaSkpLnJlZHVjZSgoaSxvKT0+aSsoQ0wudGVzdChvKT9rTDpvPT09IiI/JEw6VEwpLHIpfWZ1bmN0aW9uIE9MKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuc2xpY2UoMCwtMSkuZXZlcnkoKHIsaSk9PnI9PT1lW2ldKT90W3QubGVuZ3RoLTFdLWVbZS5sZW5ndGgtMV06MH1mdW5jdGlvbiBQTCh0LGUpe2xldHtyb3V0ZXNNZXRhOm59PXQscj17fSxpPSIvIixvPVtdO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7KytsKXtsZXQgcz1uW2xdLGE9bD09PW4ubGVuZ3RoLTEsdT1pPT09Ii8iP2U6ZS5zbGljZShpLmxlbmd0aCl8fCIvIixjPUFMKHtwYXRoOnMucmVsYXRpdmVQYXRoLGNhc2VTZW5zaXRpdmU6cy5jYXNlU2Vuc2l0aXZlLGVuZDphfSx1KTtpZighYylyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKHIsYy5wYXJhbXMpO2xldCBkPXMucm91dGU7by5wdXNoKHtwYXJhbXM6cixwYXRobmFtZTppbyhbaSxjLnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOnpMKGlvKFtpLGMucGF0aG5hbWVCYXNlXSkpLHJvdXRlOmR9KSxjLnBhdGhuYW1lQmFzZSE9PSIvIiYmKGk9aW8oW2ksYy5wYXRobmFtZUJhc2VdKSl9cmV0dXJuIG99ZnVuY3Rpb24gQUwodCxlKXt0eXBlb2YgdD09InN0cmluZyImJih0PXtwYXRoOnQsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT1NTCh0LnBhdGgsdC5jYXNlU2Vuc2l0aXZlLHQuZW5kKSxpPWUubWF0Y2gobik7aWYoIWkpcmV0dXJuIG51bGw7bGV0IG89aVswXSxsPW8ucmVwbGFjZSgvKC4pXC8rJC8sIiQxIikscz1pLnNsaWNlKDEpO3JldHVybntwYXJhbXM6ci5yZWR1Y2UoKHUsYyxkKT0+e2xldHtwYXJhbU5hbWU6Zixpc09wdGlvbmFsOmh9PWM7aWYoZj09PSIqIil7bGV0IG09c1tkXXx8IiI7bD1vLnNsaWNlKDAsby5sZW5ndGgtbS5sZW5ndGgpLnJlcGxhY2UoLyguKVwvKyQvLCIkMSIpfWNvbnN0IGc9c1tkXTtyZXR1cm4gaCYmIWc/dVtmXT12b2lkIDA6dVtmXT1ETChnfHwiIixmKSx1fSx7fSkscGF0aG5hbWU6byxwYXRobmFtZUJhc2U6bCxwYXR0ZXJuOnR9fWZ1bmN0aW9uIE1MKHQsZSxuKXtlPT09dm9pZCAwJiYoZT0hMSksbj09PXZvaWQgMCYmKG49ITApLG9sKHQ9PT0iKiJ8fCF0LmVuZHNXaXRoKCIqIil8fHQuZW5kc1dpdGgoIi8qIiksJ1JvdXRlIHBhdGggIicrdCsnIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSAnKygnIicrdC5yZXBsYWNlKC9cKiQvLCIvKiIpKyciIGJlY2F1c2UgdGhlIGAqYCBjaGFyYWN0ZXIgbXVzdCAnKSsiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsICIrKCdwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvICInK3QucmVwbGFjZSgvXCokLywiLyoiKSsnIi4nKSk7bGV0IHI9W10saT0iXiIrdC5yZXBsYWNlKC9cLypcKj8kLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKS5yZXBsYWNlKC9bXFwuKiteJHt9fCgpW1xdXS9nLCJcXCQmIikucmVwbGFjZSgvXC86KFx3KykoXD8pPy9nLChsLHMsYSk9PihyLnB1c2goe3BhcmFtTmFtZTpzLGlzT3B0aW9uYWw6YSE9bnVsbH0pLGE/Ii8/KFteXFwvXSspPyI6Ii8oW15cXC9dKykiKSk7cmV0dXJuIHQuZW5kc1dpdGgoIioiKT8oci5wdXNoKHtwYXJhbU5hbWU6IioifSksaSs9dD09PSIqInx8dD09PSIvKiI/IiguKikkIjoiKD86XFwvKC4rKXxcXC8qKSQiKTpuP2krPSJcXC8qJCI6dCE9PSIiJiZ0IT09Ii8iJiYoaSs9Iig/Oig/PVxcL3wkKSkiKSxbbmV3IFJlZ0V4cChpLGU/dm9pZCAwOiJpIikscl19ZnVuY3Rpb24gTEwodCl7dHJ5e3JldHVybiBkZWNvZGVVUkkodCl9Y2F0Y2goZSl7cmV0dXJuIG9sKCExLCdUaGUgVVJMIHBhdGggIicrdCsnIiBjb3VsZCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlIGl0IGlzIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50ICcrKCJlbmNvZGluZyAoIitlKyIpLiIpKSx0fX1mdW5jdGlvbiBETCh0LGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKG4pe3JldHVybiBvbCghMSwnVGhlIHZhbHVlIGZvciB0aGUgVVJMIHBhcmFtICInK2UrJyIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlJysoJyB0aGUgc3RyaW5nICInK3QrJyIgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHknKSsoIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoIituKyIpLiIpKSx0fX1mdW5jdGlvbiBadSh0LGUpe2lmKGU9PT0iLyIpcmV0dXJuIHQ7aWYoIXQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG51bGw7bGV0IG49ZS5lbmRzV2l0aCgiLyIpP2UubGVuZ3RoLTE6ZS5sZW5ndGgscj10LmNoYXJBdChuKTtyZXR1cm4gciYmciE9PSIvIj9udWxsOnQuc2xpY2Uobil8fCIvIn1mdW5jdGlvbiBJTCh0LGUpe2U9PT12b2lkIDAmJihlPSIvIik7bGV0e3BhdGhuYW1lOm4sc2VhcmNoOnI9IiIsaGFzaDppPSIifT10eXBlb2YgdD09InN0cmluZyI/TmkodCk6dDtyZXR1cm57cGF0aG5hbWU6bj9uLnN0YXJ0c1dpdGgoIi8iKT9uOmpMKG4sZSk6ZSxzZWFyY2g6RkwociksaGFzaDpCTChpKX19ZnVuY3Rpb24gakwodCxlKXtsZXQgbj1lLnJlcGxhY2UoL1wvKyQvLCIiKS5zcGxpdCgiLyIpO3JldHVybiB0LnNwbGl0KCIvIikuZm9yRWFjaChpPT57aT09PSIuLiI/bi5sZW5ndGg+MSYmbi5wb3AoKTppIT09Ii4iJiZuLnB1c2goaSl9KSxuLmxlbmd0aD4xP24uam9pbigiLyIpOiIvIn1mdW5jdGlvbiBZaCh0LGUsbixyKXtyZXR1cm4iQ2Fubm90IGluY2x1ZGUgYSAnIit0KyInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCAiKygiYHRvLiIrZSsiYCBmaWVsZCBbIitKU09OLnN0cmluZ2lmeShyKSsiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlICIpKygiYHRvLiIrbisiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyAiKSsnYSBzdHJpbmcgaW4gPExpbmsgdG89Ii4uLiI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIE1rKHQpe3JldHVybiB0LmZpbHRlcigoZSxuKT0+bj09PTB8fGUucm91dGUucGF0aCYmZS5yb3V0ZS5wYXRoLmxlbmd0aD4wKX1mdW5jdGlvbiBMayh0KXtyZXR1cm4gTWsodCkubWFwKChlLG4pPT5uPT09dC5sZW5ndGgtMT9lLnBhdGhuYW1lOmUucGF0aG5hbWVCYXNlKX1mdW5jdGlvbiBEayh0LGUsbixyKXtyPT09dm9pZCAwJiYocj0hMSk7bGV0IGk7dHlwZW9mIHQ9PSJzdHJpbmciP2k9TmkodCk6KGk9eXQoe30sdCksT2UoIWkucGF0aG5hbWV8fCFpLnBhdGhuYW1lLmluY2x1ZGVzKCI/IiksWWgoIj8iLCJwYXRobmFtZSIsInNlYXJjaCIsaSkpLE9lKCFpLnBhdGhuYW1lfHwhaS5wYXRobmFtZS5pbmNsdWRlcygiIyIpLFloKCIjIiwicGF0aG5hbWUiLCJoYXNoIixpKSksT2UoIWkuc2VhcmNofHwhaS5zZWFyY2guaW5jbHVkZXMoIiMiKSxZaCgiIyIsInNlYXJjaCIsImhhc2giLGkpKSk7bGV0IG89dD09PSIifHxpLnBhdGhuYW1lPT09IiIsbD1vPyIvIjppLnBhdGhuYW1lLHM7aWYobD09bnVsbClzPW47ZWxzZSBpZihyKXtsZXQgZD1lW2UubGVuZ3RoLTFdLnJlcGxhY2UoL15cLy8sIiIpLnNwbGl0KCIvIik7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQucG9wKCk7aS5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPSIvIitkLmpvaW4oIi8iKX1lbHNle2xldCBkPWUubGVuZ3RoLTE7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQtPTE7aS5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPWQ+PTA/ZVtkXToiLyJ9bGV0IGE9SUwoaSxzKSx1PWwmJmwhPT0iLyImJmwuZW5kc1dpdGgoIi8iKSxjPShvfHxsPT09Ii4iKSYmbi5lbmRzV2l0aCgiLyIpO3JldHVybiFhLnBhdGhuYW1lLmVuZHNXaXRoKCIvIikmJih1fHxjKSYmKGEucGF0aG5hbWUrPSIvIiksYX1jb25zdCBpbz10PT50LmpvaW4oIi8iKS5yZXBsYWNlKC9cL1wvKy9nLCIvIiksekw9dD0+dC5yZXBsYWNlKC9cLyskLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKSxGTD10PT4hdHx8dD09PSI/Ij8iIjp0LnN0YXJ0c1dpdGgoIj8iKT90OiI/Iit0LEJMPXQ9PiF0fHx0PT09IiMiPyIiOnQuc3RhcnRzV2l0aCgiIyIpP3Q6IiMiK3Q7Y2xhc3MgSnZ7Y29uc3RydWN0b3IoZSxuLHIsaSl7aT09PXZvaWQgMCYmKGk9ITEpLHRoaXMuc3RhdHVzPWUsdGhpcy5zdGF0dXNUZXh0PW58fCIiLHRoaXMuaW50ZXJuYWw9aSxyIGluc3RhbmNlb2YgRXJyb3I/KHRoaXMuZGF0YT1yLnRvU3RyaW5nKCksdGhpcy5lcnJvcj1yKTp0aGlzLmRhdGE9cn19ZnVuY3Rpb24gSWsodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0LnN0YXR1cz09Im51bWJlciImJnR5cGVvZiB0LnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5pbnRlcm5hbD09ImJvb2xlYW4iJiYiZGF0YSJpbiB0fWNvbnN0IGprPVsicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIl0sVUw9bmV3IFNldChqayksV0w9WyJnZXQiLC4uLmprXSxWTD1uZXcgU2V0KFdMKSxITD1uZXcgU2V0KFszMDEsMzAyLDMwMywzMDcsMzA4XSksS0w9bmV3IFNldChbMzA3LDMwOF0pLFhoPXtzdGF0ZToiaWRsZSIsbG9jYXRpb246dm9pZCAwLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9LFpMPXtzdGF0ZToiaWRsZSIsZGF0YTp2b2lkIDAsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH0sb2E9e3N0YXRlOiJ1bmJsb2NrZWQiLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp2b2lkIDB9LHprPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksR0w9dD0+KHtoYXNFcnJvckJvdW5kYXJ5OiEhdC5oYXNFcnJvckJvdW5kYXJ5fSksRms9InJlbWl4LXJvdXRlci10cmFuc2l0aW9ucyI7ZnVuY3Rpb24gWUwodCl7Y29uc3QgZT10LndpbmRvdz90LndpbmRvdzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwLG49dHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5kb2N1bWVudDwidSImJnR5cGVvZiBlLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLHI9IW47T2UodC5yb3V0ZXMubGVuZ3RoPjAsIllvdSBtdXN0IHByb3ZpZGUgYSBub24tZW1wdHkgcm91dGVzIGFycmF5IHRvIGNyZWF0ZVJvdXRlciIpO2xldCBpO2lmKHQubWFwUm91dGVQcm9wZXJ0aWVzKWk9dC5tYXBSb3V0ZVByb3BlcnRpZXM7ZWxzZSBpZih0LmRldGVjdEVycm9yQm91bmRhcnkpe2xldCBUPXQuZGV0ZWN0RXJyb3JCb3VuZGFyeTtpPUw9Pih7aGFzRXJyb3JCb3VuZGFyeTpUKEwpfSl9ZWxzZSBpPUdMO2xldCBvPXt9LGw9S20odC5yb3V0ZXMsaSx2b2lkIDAsbykscyxhPXQuYmFzZW5hbWV8fCIvIix1PXl0KHt2N19mZXRjaGVyUGVyc2lzdDohMSx2N19ub3JtYWxpemVGb3JtTWV0aG9kOiExLHY3X3ByZXBlbmRCYXNlbmFtZTohMX0sdC5mdXR1cmUpLGM9bnVsbCxkPW5ldyBTZXQsZj1udWxsLGg9bnVsbCxnPW51bGwsbT10Lmh5ZHJhdGlvbkRhdGEhPW51bGwsdz1IbChsLHQuaGlzdG9yeS5sb2NhdGlvbixhKSx2PW51bGw7aWYodz09bnVsbCl7bGV0IFQ9Sm4oNDA0LHtwYXRobmFtZTp0Lmhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWV9KSx7bWF0Y2hlczpMLHJvdXRlOkZ9PXZfKGwpO3c9TCx2PXtbRi5pZF06VH19bGV0IHk9IXcuc29tZShUPT5ULnJvdXRlLmxhenkpJiYoIXcuc29tZShUPT5ULnJvdXRlLmxvYWRlcil8fHQuaHlkcmF0aW9uRGF0YSE9bnVsbCksXyxTPXtoaXN0b3J5QWN0aW9uOnQuaGlzdG9yeS5hY3Rpb24sbG9jYXRpb246dC5oaXN0b3J5LmxvY2F0aW9uLG1hdGNoZXM6dyxpbml0aWFsaXplZDp5LG5hdmlnYXRpb246WGgscmVzdG9yZVNjcm9sbFBvc2l0aW9uOnQuaHlkcmF0aW9uRGF0YSE9bnVsbD8hMTpudWxsLHByZXZlbnRTY3JvbGxSZXNldDohMSxyZXZhbGlkYXRpb246ImlkbGUiLGxvYWRlckRhdGE6dC5oeWRyYXRpb25EYXRhJiZ0Lmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YXx8e30sYWN0aW9uRGF0YTp0Lmh5ZHJhdGlvbkRhdGEmJnQuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhfHxudWxsLGVycm9yczp0Lmh5ZHJhdGlvbkRhdGEmJnQuaHlkcmF0aW9uRGF0YS5lcnJvcnN8fHYsZmV0Y2hlcnM6bmV3IE1hcCxibG9ja2VyczpuZXcgTWFwfSxFPXd0LlBvcCwkPSExLEMsTj0hMSxBPW5ldyBNYXAsaz1udWxsLE09ITEsRD0hMSxpZT1bXSxWPVtdLEs9bmV3IE1hcCxSPTAsUD0tMSxiPW5ldyBNYXAsej1uZXcgU2V0LGo9bmV3IE1hcCxaPW5ldyBNYXAsbmU9bmV3IFNldCxrZT1uZXcgTWFwLHllPW5ldyBNYXAsV2U9ITE7ZnVuY3Rpb24gRmUoKXtpZihjPXQuaGlzdG9yeS5saXN0ZW4oVD0+e2xldHthY3Rpb246TCxsb2NhdGlvbjpGLGRlbHRhOkd9PVQ7aWYoV2Upe1dlPSExO3JldHVybn1vbCh5ZS5zaXplPT09MHx8RyE9bnVsbCwiWW91IGFyZSB0cnlpbmcgdG8gdXNlIGEgYmxvY2tlciBvbiBhIFBPUCBuYXZpZ2F0aW9uIHRvIGEgbG9jYXRpb24gdGhhdCB3YXMgbm90IGNyZWF0ZWQgYnkgQHJlbWl4LXJ1bi9yb3V0ZXIuIFRoaXMgd2lsbCBmYWlsIHNpbGVudGx5IGluIHByb2R1Y3Rpb24uIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgYXJlIG5hdmlnYXRpbmcgb3V0c2lkZSB0aGUgcm91dGVyIHZpYSBgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlYC9gd2luZG93LmxvY2F0aW9uLmhhc2hgIGluc3RlYWQgb2YgdXNpbmcgcm91dGVyIG5hdmlnYXRpb24gQVBJcy4gIFRoaXMgY2FuIGFsc28gaGFwcGVuIGlmIHlvdSBhcmUgdXNpbmcgY3JlYXRlSGFzaFJvdXRlciBhbmQgdGhlIHVzZXIgbWFudWFsbHkgY2hhbmdlcyB0aGUgVVJMLiIpO2xldCBsZT1heSh7Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOkYsaGlzdG9yeUFjdGlvbjpMfSk7aWYobGUmJkchPW51bGwpe1dlPSEwLHQuaGlzdG9yeS5nbyhHKi0xKSxHdShsZSx7c3RhdGU6ImJsb2NrZWQiLGxvY2F0aW9uOkYscHJvY2VlZCgpe0d1KGxlLHtzdGF0ZToicHJvY2VlZGluZyIscHJvY2VlZDp2b2lkIDAscmVzZXQ6dm9pZCAwLGxvY2F0aW9uOkZ9KSx0Lmhpc3RvcnkuZ28oRyl9LHJlc2V0KCl7bGV0IGJlPW5ldyBNYXAoUy5ibG9ja2Vycyk7YmUuc2V0KGxlLG9hKSwkZSh7YmxvY2tlcnM6YmV9KX19KTtyZXR1cm59cmV0dXJuIEplKEwsRil9KSxuKXtsRChlLEEpO2xldCBUPSgpPT5zRChlLEEpO2UuYWRkRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFQpLGs9KCk9PmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLFQpfXJldHVybiBTLmluaXRpYWxpemVkfHxKZSh3dC5Qb3AsUy5sb2NhdGlvbiksX31mdW5jdGlvbiB0ZSgpe2MmJmMoKSxrJiZrKCksZC5jbGVhcigpLEMmJkMuYWJvcnQoKSxTLmZldGNoZXJzLmZvckVhY2goKFQsTCk9PkxuKEwpKSxTLmJsb2NrZXJzLmZvckVhY2goKFQsTCk9PnN5KEwpKX1mdW5jdGlvbiBJZShUKXtyZXR1cm4gZC5hZGQoVCksKCk9PmQuZGVsZXRlKFQpfWZ1bmN0aW9uICRlKFQsTCl7TD09PXZvaWQgMCYmKEw9e30pLFM9eXQoe30sUyxUKTtsZXQgRj1bXSxHPVtdO3UudjdfZmV0Y2hlclBlcnNpc3QmJlMuZmV0Y2hlcnMuZm9yRWFjaCgobGUsYmUpPT57bGUuc3RhdGU9PT0iaWRsZSImJihuZS5oYXMoYmUpP0cucHVzaChiZSk6Ri5wdXNoKGJlKSl9KSxbLi4uZF0uZm9yRWFjaChsZT0+bGUoUyx7ZGVsZXRlZEZldGNoZXJzOkcsdW5zdGFibGVfdmlld1RyYW5zaXRpb25PcHRzOkwudmlld1RyYW5zaXRpb25PcHRzLHVuc3RhYmxlX2ZsdXNoU3luYzpMLmZsdXNoU3luYz09PSEwfSkpLHUudjdfZmV0Y2hlclBlcnNpc3QmJihGLmZvckVhY2gobGU9PlMuZmV0Y2hlcnMuZGVsZXRlKGxlKSksRy5mb3JFYWNoKGxlPT5MbihsZSkpKX1mdW5jdGlvbiBSZShULEwsRil7dmFyIEcsbGU7bGV0e2ZsdXNoU3luYzpiZX09Rj09PXZvaWQgMD97fTpGLGhlPVMuYWN0aW9uRGF0YSE9bnVsbCYmUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QhPW51bGwmJnlyKFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kKSYmUy5uYXZpZ2F0aW9uLnN0YXRlPT09ImxvYWRpbmciJiYoKEc9VC5zdGF0ZSk9PW51bGw/dm9pZCAwOkcuX2lzUmVkaXJlY3QpIT09ITAsZmU7TC5hY3Rpb25EYXRhP09iamVjdC5rZXlzKEwuYWN0aW9uRGF0YSkubGVuZ3RoPjA/ZmU9TC5hY3Rpb25EYXRhOmZlPW51bGw6aGU/ZmU9Uy5hY3Rpb25EYXRhOmZlPW51bGw7bGV0IGFlPUwubG9hZGVyRGF0YT9nXyhTLmxvYWRlckRhdGEsTC5sb2FkZXJEYXRhLEwubWF0Y2hlc3x8W10sTC5lcnJvcnMpOlMubG9hZGVyRGF0YSxBZT1TLmJsb2NrZXJzO0FlLnNpemU+MCYmKEFlPW5ldyBNYXAoQWUpLEFlLmZvckVhY2goKFplLHV0KT0+QWUuc2V0KHV0LG9hKSkpO2xldCBWdD0kPT09ITB8fFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kIT1udWxsJiZ5cihTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCkmJigobGU9VC5zdGF0ZSk9PW51bGw/dm9pZCAwOmxlLl9pc1JlZGlyZWN0KSE9PSEwO3MmJihsPXMscz12b2lkIDApLE18fEU9PT13dC5Qb3B8fChFPT09d3QuUHVzaD90Lmhpc3RvcnkucHVzaChULFQuc3RhdGUpOkU9PT13dC5SZXBsYWNlJiZ0Lmhpc3RvcnkucmVwbGFjZShULFQuc3RhdGUpKTtsZXQgVGU7aWYoRT09PXd0LlBvcCl7bGV0IFplPUEuZ2V0KFMubG9jYXRpb24ucGF0aG5hbWUpO1plJiZaZS5oYXMoVC5wYXRobmFtZSk/VGU9e2N1cnJlbnRMb2NhdGlvbjpTLmxvY2F0aW9uLG5leHRMb2NhdGlvbjpUfTpBLmhhcyhULnBhdGhuYW1lKSYmKFRlPXtjdXJyZW50TG9jYXRpb246VCxuZXh0TG9jYXRpb246Uy5sb2NhdGlvbn0pfWVsc2UgaWYoTil7bGV0IFplPUEuZ2V0KFMubG9jYXRpb24ucGF0aG5hbWUpO1plP1plLmFkZChULnBhdGhuYW1lKTooWmU9bmV3IFNldChbVC5wYXRobmFtZV0pLEEuc2V0KFMubG9jYXRpb24ucGF0aG5hbWUsWmUpKSxUZT17Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOlR9fSRlKHl0KHt9LEwse2FjdGlvbkRhdGE6ZmUsbG9hZGVyRGF0YTphZSxoaXN0b3J5QWN0aW9uOkUsbG9jYXRpb246VCxpbml0aWFsaXplZDohMCxuYXZpZ2F0aW9uOlhoLHJldmFsaWRhdGlvbjoiaWRsZSIscmVzdG9yZVNjcm9sbFBvc2l0aW9uOmN5KFQsTC5tYXRjaGVzfHxTLm1hdGNoZXMpLHByZXZlbnRTY3JvbGxSZXNldDpWdCxibG9ja2VyczpBZX0pLHt2aWV3VHJhbnNpdGlvbk9wdHM6VGUsZmx1c2hTeW5jOmJlPT09ITB9KSxFPXd0LlBvcCwkPSExLE49ITEsTT0hMSxEPSExLGllPVtdLFY9W119YXN5bmMgZnVuY3Rpb24gU2UoVCxMKXtpZih0eXBlb2YgVD09Im51bWJlciIpe3QuaGlzdG9yeS5nbyhUKTtyZXR1cm59bGV0IEY9Wm0oUy5sb2NhdGlvbixTLm1hdGNoZXMsYSx1LnY3X3ByZXBlbmRCYXNlbmFtZSxULEw9PW51bGw/dm9pZCAwOkwuZnJvbVJvdXRlSWQsTD09bnVsbD92b2lkIDA6TC5yZWxhdGl2ZSkse3BhdGg6RyxzdWJtaXNzaW9uOmxlLGVycm9yOmJlfT1jXyh1LnY3X25vcm1hbGl6ZUZvcm1NZXRob2QsITEsRixMKSxoZT1TLmxvY2F0aW9uLGZlPVR1KFMubG9jYXRpb24sRyxMJiZMLnN0YXRlKTtmZT15dCh7fSxmZSx0Lmhpc3RvcnkuZW5jb2RlTG9jYXRpb24oZmUpKTtsZXQgYWU9TCYmTC5yZXBsYWNlIT1udWxsP0wucmVwbGFjZTp2b2lkIDAsQWU9d3QuUHVzaDthZT09PSEwP0FlPXd0LlJlcGxhY2U6YWU9PT0hMXx8bGUhPW51bGwmJnlyKGxlLmZvcm1NZXRob2QpJiZsZS5mb3JtQWN0aW9uPT09Uy5sb2NhdGlvbi5wYXRobmFtZStTLmxvY2F0aW9uLnNlYXJjaCYmKEFlPXd0LlJlcGxhY2UpO2xldCBWdD1MJiYicHJldmVudFNjcm9sbFJlc2V0ImluIEw/TC5wcmV2ZW50U2Nyb2xsUmVzZXQ9PT0hMDp2b2lkIDAsVGU9KEwmJkwudW5zdGFibGVfZmx1c2hTeW5jKT09PSEwLFplPWF5KHtjdXJyZW50TG9jYXRpb246aGUsbmV4dExvY2F0aW9uOmZlLGhpc3RvcnlBY3Rpb246QWV9KTtpZihaZSl7R3UoWmUse3N0YXRlOiJibG9ja2VkIixsb2NhdGlvbjpmZSxwcm9jZWVkKCl7R3UoWmUse3N0YXRlOiJwcm9jZWVkaW5nIixwcm9jZWVkOnZvaWQgMCxyZXNldDp2b2lkIDAsbG9jYXRpb246ZmV9KSxTZShULEwpfSxyZXNldCgpe2xldCB1dD1uZXcgTWFwKFMuYmxvY2tlcnMpO3V0LnNldChaZSxvYSksJGUoe2Jsb2NrZXJzOnV0fSl9fSk7cmV0dXJufXJldHVybiBhd2FpdCBKZShBZSxmZSx7c3VibWlzc2lvbjpsZSxwZW5kaW5nRXJyb3I6YmUscHJldmVudFNjcm9sbFJlc2V0OlZ0LHJlcGxhY2U6TCYmTC5yZXBsYWNlLGVuYWJsZVZpZXdUcmFuc2l0aW9uOkwmJkwudW5zdGFibGVfdmlld1RyYW5zaXRpb24sZmx1c2hTeW5jOlRlfSl9ZnVuY3Rpb24gTGUoKXtpZihFbigpLCRlKHtyZXZhbGlkYXRpb246ImxvYWRpbmcifSksUy5uYXZpZ2F0aW9uLnN0YXRlIT09InN1Ym1pdHRpbmciKXtpZihTLm5hdmlnYXRpb24uc3RhdGU9PT0iaWRsZSIpe0plKFMuaGlzdG9yeUFjdGlvbixTLmxvY2F0aW9uLHtzdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb246ITB9KTtyZXR1cm59SmUoRXx8Uy5oaXN0b3J5QWN0aW9uLFMubmF2aWdhdGlvbi5sb2NhdGlvbix7b3ZlcnJpZGVOYXZpZ2F0aW9uOlMubmF2aWdhdGlvbn0pfX1hc3luYyBmdW5jdGlvbiBKZShULEwsRil7QyYmQy5hYm9ydCgpLEM9bnVsbCxFPVQsTT0oRiYmRi5zdGFydFVuaW50ZXJydXB0ZWRSZXZhbGlkYXRpb24pPT09ITAsZ2IoUy5sb2NhdGlvbixTLm1hdGNoZXMpLCQ9KEYmJkYucHJldmVudFNjcm9sbFJlc2V0KT09PSEwLE49KEYmJkYuZW5hYmxlVmlld1RyYW5zaXRpb24pPT09ITA7bGV0IEc9c3x8bCxsZT1GJiZGLm92ZXJyaWRlTmF2aWdhdGlvbixiZT1IbChHLEwsYSksaGU9KEYmJkYuZmx1c2hTeW5jKT09PSEwO2lmKCFiZSl7bGV0IHV0PUpuKDQwNCx7cGF0aG5hbWU6TC5wYXRobmFtZX0pLHttYXRjaGVzOmFuLHJvdXRlOk9yfT12XyhHKTtxZigpLFJlKEwse21hdGNoZXM6YW4sbG9hZGVyRGF0YTp7fSxlcnJvcnM6e1tPci5pZF06dXR9fSx7Zmx1c2hTeW5jOmhlfSk7cmV0dXJufWlmKFMuaW5pdGlhbGl6ZWQmJiFEJiZlRChTLmxvY2F0aW9uLEwpJiYhKEYmJkYuc3VibWlzc2lvbiYmeXIoRi5zdWJtaXNzaW9uLmZvcm1NZXRob2QpKSl7UmUoTCx7bWF0Y2hlczpiZX0se2ZsdXNoU3luYzpoZX0pO3JldHVybn1DPW5ldyBBYm9ydENvbnRyb2xsZXI7bGV0IGZlPXNhKHQuaGlzdG9yeSxMLEMuc2lnbmFsLEYmJkYuc3VibWlzc2lvbiksYWUsQWU7aWYoRiYmRi5wZW5kaW5nRXJyb3IpQWU9e1tqYShiZSkucm91dGUuaWRdOkYucGVuZGluZ0Vycm9yfTtlbHNlIGlmKEYmJkYuc3VibWlzc2lvbiYmeXIoRi5zdWJtaXNzaW9uLmZvcm1NZXRob2QpKXtsZXQgdXQ9YXdhaXQgV3QoZmUsTCxGLnN1Ym1pc3Npb24sYmUse3JlcGxhY2U6Ri5yZXBsYWNlLGZsdXNoU3luYzpoZX0pO2lmKHV0LnNob3J0Q2lyY3VpdGVkKXJldHVybjthZT11dC5wZW5kaW5nQWN0aW9uRGF0YSxBZT11dC5wZW5kaW5nQWN0aW9uRXJyb3IsbGU9SmgoTCxGLnN1Ym1pc3Npb24pLGhlPSExLGZlPW5ldyBSZXF1ZXN0KGZlLnVybCx7c2lnbmFsOmZlLnNpZ25hbH0pfWxldHtzaG9ydENpcmN1aXRlZDpWdCxsb2FkZXJEYXRhOlRlLGVycm9yczpaZX09YXdhaXQgU24oZmUsTCxiZSxsZSxGJiZGLnN1Ym1pc3Npb24sRiYmRi5mZXRjaGVyU3VibWlzc2lvbixGJiZGLnJlcGxhY2UsaGUsYWUsQWUpO1Z0fHwoQz1udWxsLFJlKEwseXQoe21hdGNoZXM6YmV9LGFlP3thY3Rpb25EYXRhOmFlfTp7fSx7bG9hZGVyRGF0YTpUZSxlcnJvcnM6WmV9KSkpfWFzeW5jIGZ1bmN0aW9uIFd0KFQsTCxGLEcsbGUpe2xlPT09dm9pZCAwJiYobGU9e30pLEVuKCk7bGV0IGJlPWlEKEwsRik7JGUoe25hdmlnYXRpb246YmV9LHtmbHVzaFN5bmM6bGUuZmx1c2hTeW5jPT09ITB9KTtsZXQgaGUsZmU9WW0oRyxMKTtpZighZmUucm91dGUuYWN0aW9uJiYhZmUucm91dGUubGF6eSloZT17dHlwZTpTdC5lcnJvcixlcnJvcjpKbig0MDUse21ldGhvZDpULm1ldGhvZCxwYXRobmFtZTpMLnBhdGhuYW1lLHJvdXRlSWQ6ZmUucm91dGUuaWR9KX07ZWxzZSBpZihoZT1hd2FpdCBsYSgiYWN0aW9uIixULGZlLEcsbyxpLGEpLFQuc2lnbmFsLmFib3J0ZWQpcmV0dXJue3Nob3J0Q2lyY3VpdGVkOiEwfTtpZihpcyhoZSkpe2xldCBhZTtyZXR1cm4gbGUmJmxlLnJlcGxhY2UhPW51bGw/YWU9bGUucmVwbGFjZTphZT1oZS5sb2NhdGlvbj09PVMubG9jYXRpb24ucGF0aG5hbWUrUy5sb2NhdGlvbi5zZWFyY2gsYXdhaXQgYXQoUyxoZSx7c3VibWlzc2lvbjpGLHJlcGxhY2U6YWV9KSx7c2hvcnRDaXJjdWl0ZWQ6ITB9fWlmKHphKGhlKSl7bGV0IGFlPWphKEcsZmUucm91dGUuaWQpO3JldHVybihsZSYmbGUucmVwbGFjZSkhPT0hMCYmKEU9d3QuUHVzaCkse3BlbmRpbmdBY3Rpb25EYXRhOnt9LHBlbmRpbmdBY3Rpb25FcnJvcjp7W2FlLnJvdXRlLmlkXTpoZS5lcnJvcn19fWlmKERvKGhlKSl0aHJvdyBKbig0MDAse3R5cGU6ImRlZmVyLWFjdGlvbiJ9KTtyZXR1cm57cGVuZGluZ0FjdGlvbkRhdGE6e1tmZS5yb3V0ZS5pZF06aGUuZGF0YX19fWFzeW5jIGZ1bmN0aW9uIFNuKFQsTCxGLEcsbGUsYmUsaGUsZmUsYWUsQWUpe2xldCBWdD1HfHxKaChMLGxlKSxUZT1sZXx8YmV8fF9fKFZ0KSxaZT1zfHxsLFt1dCxhbl09ZF8odC5oaXN0b3J5LFMsRixUZSxMLEQsaWUsVixuZSxqLHosWmUsYSxhZSxBZSk7aWYocWYoR2U9PiEoRiYmRi5zb21lKFhuPT5Ybi5yb3V0ZS5pZD09PUdlKSl8fHV0JiZ1dC5zb21lKFhuPT5Ybi5yb3V0ZS5pZD09PUdlKSksUD0rK1IsdXQubGVuZ3RoPT09MCYmYW4ubGVuZ3RoPT09MCl7bGV0IEdlPUNvKCk7cmV0dXJuIFJlKEwseXQoe21hdGNoZXM6Rixsb2FkZXJEYXRhOnt9LGVycm9yczpBZXx8bnVsbH0sYWU/e2FjdGlvbkRhdGE6YWV9Ont9LEdlP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSkse2ZsdXNoU3luYzpmZX0pLHtzaG9ydENpcmN1aXRlZDohMH19aWYoIU0pe2FuLmZvckVhY2goWG49PntsZXQga3Q9Uy5mZXRjaGVycy5nZXQoWG4ua2V5KSxrbz1hYSh2b2lkIDAsa3Q/a3QuZGF0YTp2b2lkIDApO1MuZmV0Y2hlcnMuc2V0KFhuLmtleSxrbyl9KTtsZXQgR2U9YWV8fFMuYWN0aW9uRGF0YTskZSh5dCh7bmF2aWdhdGlvbjpWdH0sR2U/T2JqZWN0LmtleXMoR2UpLmxlbmd0aD09PTA/e2FjdGlvbkRhdGE6bnVsbH06e2FjdGlvbkRhdGE6R2V9Ont9LGFuLmxlbmd0aD4wP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSkse2ZsdXNoU3luYzpmZX0pfWFuLmZvckVhY2goR2U9PntLLmhhcyhHZS5rZXkpJiZndChHZS5rZXkpLEdlLmNvbnRyb2xsZXImJksuc2V0KEdlLmtleSxHZS5jb250cm9sbGVyKX0pO2xldCBPcj0oKT0+YW4uZm9yRWFjaChHZT0+Z3QoR2Uua2V5KSk7QyYmQy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLE9yKTtsZXR7cmVzdWx0czpWcyxsb2FkZXJSZXN1bHRzOmVoLGZldGNoZXJSZXN1bHRzOmdsfT1hd2FpdCBsbihTLm1hdGNoZXMsRix1dCxhbixUKTtpZihULnNpZ25hbC5hYm9ydGVkKXJldHVybntzaG9ydENpcmN1aXRlZDohMH07QyYmQy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLE9yKSxhbi5mb3JFYWNoKEdlPT5LLmRlbGV0ZShHZS5rZXkpKTtsZXQgZHI9eV8oVnMpO2lmKGRyKXtpZihkci5pZHg+PXV0Lmxlbmd0aCl7bGV0IEdlPWFuW2RyLmlkeC11dC5sZW5ndGhdLmtleTt6LmFkZChHZSl9cmV0dXJuIGF3YWl0IGF0KFMsZHIucmVzdWx0LHtyZXBsYWNlOmhlfSkse3Nob3J0Q2lyY3VpdGVkOiEwfX1sZXR7bG9hZGVyRGF0YTpZdSxlcnJvcnM6dGh9PW1fKFMsRix1dCxlaCxBZSxhbixnbCxrZSk7a2UuZm9yRWFjaCgoR2UsWG4pPT57R2Uuc3Vic2NyaWJlKGt0PT57KGt0fHxHZS5kb25lKSYma2UuZGVsZXRlKFhuKX0pfSk7bGV0IG5oPUNvKCkscmg9V3MoUCksdmw9bmh8fHJofHxhbi5sZW5ndGg+MDtyZXR1cm4geXQoe2xvYWRlckRhdGE6WXUsZXJyb3JzOnRofSx2bD97ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX06e30pfWZ1bmN0aW9uIGNyKFQsTCxGLEcpe2lmKHIpdGhyb3cgbmV3IEVycm9yKCJyb3V0ZXIuZmV0Y2goKSB3YXMgY2FsbGVkIGR1cmluZyB0aGUgc2VydmVyIHJlbmRlciwgYnV0IGl0IHNob3VsZG4ndCBiZS4gWW91IGFyZSBsaWtlbHkgY2FsbGluZyBhIHVzZUZldGNoZXIoKSBtZXRob2QgaW4gdGhlIGJvZHkgb2YgeW91ciBjb21wb25lbnQuIFRyeSBtb3ZpbmcgaXQgdG8gYSB1c2VFZmZlY3Qgb3IgYSBjYWxsYmFjay4iKTtLLmhhcyhUKSYmZ3QoVCk7bGV0IGxlPShHJiZHLnVuc3RhYmxlX2ZsdXNoU3luYyk9PT0hMCxiZT1zfHxsLGhlPVptKFMubG9jYXRpb24sUy5tYXRjaGVzLGEsdS52N19wcmVwZW5kQmFzZW5hbWUsRixMLEc9PW51bGw/dm9pZCAwOkcucmVsYXRpdmUpLGZlPUhsKGJlLGhlLGEpO2lmKCFmZSl7QXQoVCxMLEpuKDQwNCx7cGF0aG5hbWU6aGV9KSx7Zmx1c2hTeW5jOmxlfSk7cmV0dXJufWxldHtwYXRoOmFlLHN1Ym1pc3Npb246QWUsZXJyb3I6VnR9PWNfKHUudjdfbm9ybWFsaXplRm9ybU1ldGhvZCwhMCxoZSxHKTtpZihWdCl7QXQoVCxMLFZ0LHtmbHVzaFN5bmM6bGV9KTtyZXR1cm59bGV0IFRlPVltKGZlLGFlKTtpZigkPShHJiZHLnByZXZlbnRTY3JvbGxSZXNldCk9PT0hMCxBZSYmeXIoQWUuZm9ybU1ldGhvZCkpe2plKFQsTCxhZSxUZSxmZSxsZSxBZSk7cmV0dXJufWouc2V0KFQse3JvdXRlSWQ6TCxwYXRoOmFlfSksVHQoVCxMLGFlLFRlLGZlLGxlLEFlKX1hc3luYyBmdW5jdGlvbiBqZShULEwsRixHLGxlLGJlLGhlKXtpZihFbigpLGouZGVsZXRlKFQpLCFHLnJvdXRlLmFjdGlvbiYmIUcucm91dGUubGF6eSl7bGV0IGt0PUpuKDQwNSx7bWV0aG9kOmhlLmZvcm1NZXRob2QscGF0aG5hbWU6Rixyb3V0ZUlkOkx9KTtBdChULEwsa3Qse2ZsdXNoU3luYzpiZX0pO3JldHVybn1sZXQgZmU9Uy5mZXRjaGVycy5nZXQoVCk7X3QoVCxvRChoZSxmZSkse2ZsdXNoU3luYzpiZX0pO2xldCBhZT1uZXcgQWJvcnRDb250cm9sbGVyLEFlPXNhKHQuaGlzdG9yeSxGLGFlLnNpZ25hbCxoZSk7Sy5zZXQoVCxhZSk7bGV0IFZ0PVIsVGU9YXdhaXQgbGEoImFjdGlvbiIsQWUsRyxsZSxvLGksYSk7aWYoQWUuc2lnbmFsLmFib3J0ZWQpe0suZ2V0KFQpPT09YWUmJksuZGVsZXRlKFQpO3JldHVybn1pZihuZS5oYXMoVCkpe190KFQsRGkodm9pZCAwKSk7cmV0dXJufWlmKGlzKFRlKSlpZihLLmRlbGV0ZShUKSxQPlZ0KXtfdChULERpKHZvaWQgMCkpO3JldHVybn1lbHNlIHJldHVybiB6LmFkZChUKSxfdChULGFhKGhlKSksYXQoUyxUZSx7ZmV0Y2hlclN1Ym1pc3Npb246aGV9KTtpZih6YShUZSkpe0F0KFQsTCxUZS5lcnJvcik7cmV0dXJufWlmKERvKFRlKSl0aHJvdyBKbig0MDAse3R5cGU6ImRlZmVyLWFjdGlvbiJ9KTtsZXQgWmU9Uy5uYXZpZ2F0aW9uLmxvY2F0aW9ufHxTLmxvY2F0aW9uLHV0PXNhKHQuaGlzdG9yeSxaZSxhZS5zaWduYWwpLGFuPXN8fGwsT3I9Uy5uYXZpZ2F0aW9uLnN0YXRlIT09ImlkbGUiP0hsKGFuLFMubmF2aWdhdGlvbi5sb2NhdGlvbixhKTpTLm1hdGNoZXM7T2UoT3IsIkRpZG4ndCBmaW5kIGFueSBtYXRjaGVzIGFmdGVyIGZldGNoZXIgYWN0aW9uIik7bGV0IFZzPSsrUjtiLnNldChULFZzKTtsZXQgZWg9YWEoaGUsVGUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoVCxlaCk7bGV0W2dsLGRyXT1kXyh0Lmhpc3RvcnksUyxPcixoZSxaZSxELGllLFYsbmUsaix6LGFuLGEse1tHLnJvdXRlLmlkXTpUZS5kYXRhfSx2b2lkIDApO2RyLmZpbHRlcihrdD0+a3Qua2V5IT09VCkuZm9yRWFjaChrdD0+e2xldCBrbz1rdC5rZXksZHk9Uy5mZXRjaGVycy5nZXQoa28pLHliPWFhKHZvaWQgMCxkeT9keS5kYXRhOnZvaWQgMCk7Uy5mZXRjaGVycy5zZXQoa28seWIpLEsuaGFzKGtvKSYmZ3Qoa28pLGt0LmNvbnRyb2xsZXImJksuc2V0KGtvLGt0LmNvbnRyb2xsZXIpfSksJGUoe2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KTtsZXQgWXU9KCk9PmRyLmZvckVhY2goa3Q9Pmd0KGt0LmtleSkpO2FlLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsWXUpO2xldHtyZXN1bHRzOnRoLGxvYWRlclJlc3VsdHM6bmgsZmV0Y2hlclJlc3VsdHM6cmh9PWF3YWl0IGxuKFMubWF0Y2hlcyxPcixnbCxkcix1dCk7aWYoYWUuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2FlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsWXUpLGIuZGVsZXRlKFQpLEsuZGVsZXRlKFQpLGRyLmZvckVhY2goa3Q9PksuZGVsZXRlKGt0LmtleSkpO2xldCB2bD15Xyh0aCk7aWYodmwpe2lmKHZsLmlkeD49Z2wubGVuZ3RoKXtsZXQga3Q9ZHJbdmwuaWR4LWdsLmxlbmd0aF0ua2V5O3ouYWRkKGt0KX1yZXR1cm4gYXQoUyx2bC5yZXN1bHQpfWxldHtsb2FkZXJEYXRhOkdlLGVycm9yczpYbn09bV8oUyxTLm1hdGNoZXMsZ2wsbmgsdm9pZCAwLGRyLHJoLGtlKTtpZihTLmZldGNoZXJzLmhhcyhUKSl7bGV0IGt0PURpKFRlLmRhdGEpO1MuZmV0Y2hlcnMuc2V0KFQsa3QpfVdzKFZzKSxTLm5hdmlnYXRpb24uc3RhdGU9PT0ibG9hZGluZyImJlZzPlA/KE9lKEUsIkV4cGVjdGVkIHBlbmRpbmcgYWN0aW9uIiksQyYmQy5hYm9ydCgpLFJlKFMubmF2aWdhdGlvbi5sb2NhdGlvbix7bWF0Y2hlczpPcixsb2FkZXJEYXRhOkdlLGVycm9yczpYbixmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSkpOigkZSh7ZXJyb3JzOlhuLGxvYWRlckRhdGE6Z18oUy5sb2FkZXJEYXRhLEdlLE9yLFhuKSxmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSksRD0hMSl9YXN5bmMgZnVuY3Rpb24gVHQoVCxMLEYsRyxsZSxiZSxoZSl7bGV0IGZlPVMuZmV0Y2hlcnMuZ2V0KFQpO190KFQsYWEoaGUsZmU/ZmUuZGF0YTp2b2lkIDApLHtmbHVzaFN5bmM6YmV9KTtsZXQgYWU9bmV3IEFib3J0Q29udHJvbGxlcixBZT1zYSh0Lmhpc3RvcnksRixhZS5zaWduYWwpO0suc2V0KFQsYWUpO2xldCBWdD1SLFRlPWF3YWl0IGxhKCJsb2FkZXIiLEFlLEcsbGUsbyxpLGEpO2lmKERvKFRlKSYmKFRlPWF3YWl0IFdrKFRlLEFlLnNpZ25hbCwhMCl8fFRlKSxLLmdldChUKT09PWFlJiZLLmRlbGV0ZShUKSwhQWUuc2lnbmFsLmFib3J0ZWQpe2lmKG5lLmhhcyhUKSl7X3QoVCxEaSh2b2lkIDApKTtyZXR1cm59aWYoaXMoVGUpKWlmKFA+VnQpe190KFQsRGkodm9pZCAwKSk7cmV0dXJufWVsc2V7ei5hZGQoVCksYXdhaXQgYXQoUyxUZSk7cmV0dXJufWlmKHphKFRlKSl7QXQoVCxMLFRlLmVycm9yKTtyZXR1cm59T2UoIURvKFRlKSwiVW5oYW5kbGVkIGZldGNoZXIgZGVmZXJyZWQgZGF0YSIpLF90KFQsRGkoVGUuZGF0YSkpfX1hc3luYyBmdW5jdGlvbiBhdChULEwsRil7bGV0e3N1Ym1pc3Npb246RyxmZXRjaGVyU3VibWlzc2lvbjpsZSxyZXBsYWNlOmJlfT1GPT09dm9pZCAwP3t9OkY7TC5yZXZhbGlkYXRlJiYoRD0hMCk7bGV0IGhlPVR1KFQubG9jYXRpb24sTC5sb2NhdGlvbix7X2lzUmVkaXJlY3Q6ITB9KTtpZihPZShoZSwiRXhwZWN0ZWQgYSBsb2NhdGlvbiBvbiB0aGUgcmVkaXJlY3QgbmF2aWdhdGlvbiIpLG4pe2xldCBaZT0hMTtpZihMLnJlbG9hZERvY3VtZW50KVplPSEwO2Vsc2UgaWYoemsudGVzdChMLmxvY2F0aW9uKSl7Y29uc3QgdXQ9dC5oaXN0b3J5LmNyZWF0ZVVSTChMLmxvY2F0aW9uKTtaZT11dC5vcmlnaW4hPT1lLmxvY2F0aW9uLm9yaWdpbnx8WnUodXQucGF0aG5hbWUsYSk9PW51bGx9aWYoWmUpe2JlP2UubG9jYXRpb24ucmVwbGFjZShMLmxvY2F0aW9uKTplLmxvY2F0aW9uLmFzc2lnbihMLmxvY2F0aW9uKTtyZXR1cm59fUM9bnVsbDtsZXQgZmU9YmU9PT0hMD93dC5SZXBsYWNlOnd0LlB1c2gse2Zvcm1NZXRob2Q6YWUsZm9ybUFjdGlvbjpBZSxmb3JtRW5jVHlwZTpWdH09VC5uYXZpZ2F0aW9uOyFHJiYhbGUmJmFlJiZBZSYmVnQmJihHPV9fKFQubmF2aWdhdGlvbikpO2xldCBUZT1HfHxsZTtpZihLTC5oYXMoTC5zdGF0dXMpJiZUZSYmeXIoVGUuZm9ybU1ldGhvZCkpYXdhaXQgSmUoZmUsaGUse3N1Ym1pc3Npb246eXQoe30sVGUse2Zvcm1BY3Rpb246TC5sb2NhdGlvbn0pLHByZXZlbnRTY3JvbGxSZXNldDokfSk7ZWxzZXtsZXQgWmU9SmgoaGUsRyk7YXdhaXQgSmUoZmUsaGUse292ZXJyaWRlTmF2aWdhdGlvbjpaZSxmZXRjaGVyU3VibWlzc2lvbjpsZSxwcmV2ZW50U2Nyb2xsUmVzZXQ6JH0pfX1hc3luYyBmdW5jdGlvbiBsbihULEwsRixHLGxlKXtsZXQgYmU9YXdhaXQgUHJvbWlzZS5hbGwoWy4uLkYubWFwKGFlPT5sYSgibG9hZGVyIixsZSxhZSxMLG8saSxhKSksLi4uRy5tYXAoYWU9PmFlLm1hdGNoZXMmJmFlLm1hdGNoJiZhZS5jb250cm9sbGVyP2xhKCJsb2FkZXIiLHNhKHQuaGlzdG9yeSxhZS5wYXRoLGFlLmNvbnRyb2xsZXIuc2lnbmFsKSxhZS5tYXRjaCxhZS5tYXRjaGVzLG8saSxhKTp7dHlwZTpTdC5lcnJvcixlcnJvcjpKbig0MDQse3BhdGhuYW1lOmFlLnBhdGh9KX0pXSksaGU9YmUuc2xpY2UoMCxGLmxlbmd0aCksZmU9YmUuc2xpY2UoRi5sZW5ndGgpO3JldHVybiBhd2FpdCBQcm9taXNlLmFsbChbeF8oVCxGLGhlLGhlLm1hcCgoKT0+bGUuc2lnbmFsKSwhMSxTLmxvYWRlckRhdGEpLHhfKFQsRy5tYXAoYWU9PmFlLm1hdGNoKSxmZSxHLm1hcChhZT0+YWUuY29udHJvbGxlcj9hZS5jb250cm9sbGVyLnNpZ25hbDpudWxsKSwhMCldKSx7cmVzdWx0czpiZSxsb2FkZXJSZXN1bHRzOmhlLGZldGNoZXJSZXN1bHRzOmZlfX1mdW5jdGlvbiBFbigpe0Q9ITAsaWUucHVzaCguLi5xZigpKSxqLmZvckVhY2goKFQsTCk9PntLLmhhcyhMKSYmKFYucHVzaChMKSxndChMKSl9KX1mdW5jdGlvbiBfdChULEwsRil7Rj09PXZvaWQgMCYmKEY9e30pLFMuZmV0Y2hlcnMuc2V0KFQsTCksJGUoe2ZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9LHtmbHVzaFN5bmM6KEYmJkYuZmx1c2hTeW5jKT09PSEwfSl9ZnVuY3Rpb24gQXQoVCxMLEYsRyl7Rz09PXZvaWQgMCYmKEc9e30pO2xldCBsZT1qYShTLm1hdGNoZXMsTCk7TG4oVCksJGUoe2Vycm9yczp7W2xlLnJvdXRlLmlkXTpGfSxmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSx7Zmx1c2hTeW5jOihHJiZHLmZsdXNoU3luYyk9PT0hMH0pfWZ1bmN0aW9uIHNuKFQpe3JldHVybiB1LnY3X2ZldGNoZXJQZXJzaXN0JiYoWi5zZXQoVCwoWi5nZXQoVCl8fDApKzEpLG5lLmhhcyhUKSYmbmUuZGVsZXRlKFQpKSxTLmZldGNoZXJzLmdldChUKXx8Wkx9ZnVuY3Rpb24gTG4oVCl7bGV0IEw9Uy5mZXRjaGVycy5nZXQoVCk7Sy5oYXMoVCkmJiEoTCYmTC5zdGF0ZT09PSJsb2FkaW5nIiYmYi5oYXMoVCkpJiZndChUKSxqLmRlbGV0ZShUKSxiLmRlbGV0ZShUKSx6LmRlbGV0ZShUKSxuZS5kZWxldGUoVCksUy5mZXRjaGVycy5kZWxldGUoVCl9ZnVuY3Rpb24gZWkoVCl7aWYodS52N19mZXRjaGVyUGVyc2lzdCl7bGV0IEw9KFouZ2V0KFQpfHwwKS0xO0w8PTA/KFouZGVsZXRlKFQpLG5lLmFkZChUKSk6Wi5zZXQoVCxMKX1lbHNlIExuKFQpOyRlKHtmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSl9ZnVuY3Rpb24gZ3QoVCl7bGV0IEw9Sy5nZXQoVCk7T2UoTCwiRXhwZWN0ZWQgZmV0Y2ggY29udHJvbGxlcjogIitUKSxMLmFib3J0KCksSy5kZWxldGUoVCl9ZnVuY3Rpb24gUnIoVCl7Zm9yKGxldCBMIG9mIFQpe2xldCBGPXNuKEwpLEc9RGkoRi5kYXRhKTtTLmZldGNoZXJzLnNldChMLEcpfX1mdW5jdGlvbiBDbygpe2xldCBUPVtdLEw9ITE7Zm9yKGxldCBGIG9mIHope2xldCBHPVMuZmV0Y2hlcnMuZ2V0KEYpO09lKEcsIkV4cGVjdGVkIGZldGNoZXI6ICIrRiksRy5zdGF0ZT09PSJsb2FkaW5nIiYmKHouZGVsZXRlKEYpLFQucHVzaChGKSxMPSEwKX1yZXR1cm4gUnIoVCksTH1mdW5jdGlvbiBXcyhUKXtsZXQgTD1bXTtmb3IobGV0W0YsR11vZiBiKWlmKEc8VCl7bGV0IGxlPVMuZmV0Y2hlcnMuZ2V0KEYpO09lKGxlLCJFeHBlY3RlZCBmZXRjaGVyOiAiK0YpLGxlLnN0YXRlPT09ImxvYWRpbmciJiYoZ3QoRiksYi5kZWxldGUoRiksTC5wdXNoKEYpKX1yZXR1cm4gUnIoTCksTC5sZW5ndGg+MH1mdW5jdGlvbiBwYihULEwpe2xldCBGPVMuYmxvY2tlcnMuZ2V0KFQpfHxvYTtyZXR1cm4geWUuZ2V0KFQpIT09TCYmeWUuc2V0KFQsTCksRn1mdW5jdGlvbiBzeShUKXtTLmJsb2NrZXJzLmRlbGV0ZShUKSx5ZS5kZWxldGUoVCl9ZnVuY3Rpb24gR3UoVCxMKXtsZXQgRj1TLmJsb2NrZXJzLmdldChUKXx8b2E7T2UoRi5zdGF0ZT09PSJ1bmJsb2NrZWQiJiZMLnN0YXRlPT09ImJsb2NrZWQifHxGLnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09ImJsb2NrZWQifHxGLnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09InByb2NlZWRpbmcifHxGLnN0YXRlPT09ImJsb2NrZWQiJiZMLnN0YXRlPT09InVuYmxvY2tlZCJ8fEYuc3RhdGU9PT0icHJvY2VlZGluZyImJkwuc3RhdGU9PT0idW5ibG9ja2VkIiwiSW52YWxpZCBibG9ja2VyIHN0YXRlIHRyYW5zaXRpb246ICIrRi5zdGF0ZSsiIC0+ICIrTC5zdGF0ZSk7bGV0IEc9bmV3IE1hcChTLmJsb2NrZXJzKTtHLnNldChULEwpLCRlKHtibG9ja2VyczpHfSl9ZnVuY3Rpb24gYXkoVCl7bGV0e2N1cnJlbnRMb2NhdGlvbjpMLG5leHRMb2NhdGlvbjpGLGhpc3RvcnlBY3Rpb246R309VDtpZih5ZS5zaXplPT09MClyZXR1cm47eWUuc2l6ZT4xJiZvbCghMSwiQSByb3V0ZXIgb25seSBzdXBwb3J0cyBvbmUgYmxvY2tlciBhdCBhIHRpbWUiKTtsZXQgbGU9QXJyYXkuZnJvbSh5ZS5lbnRyaWVzKCkpLFtiZSxoZV09bGVbbGUubGVuZ3RoLTFdLGZlPVMuYmxvY2tlcnMuZ2V0KGJlKTtpZighKGZlJiZmZS5zdGF0ZT09PSJwcm9jZWVkaW5nIikmJmhlKHtjdXJyZW50TG9jYXRpb246TCxuZXh0TG9jYXRpb246RixoaXN0b3J5QWN0aW9uOkd9KSlyZXR1cm4gYmV9ZnVuY3Rpb24gcWYoVCl7bGV0IEw9W107cmV0dXJuIGtlLmZvckVhY2goKEYsRyk9PnsoIVR8fFQoRykpJiYoRi5jYW5jZWwoKSxMLnB1c2goRyksa2UuZGVsZXRlKEcpKX0pLEx9ZnVuY3Rpb24gbWIoVCxMLEYpe2lmKGY9VCxnPUwsaD1GfHxudWxsLCFtJiZTLm5hdmlnYXRpb249PT1YaCl7bT0hMDtsZXQgRz1jeShTLmxvY2F0aW9uLFMubWF0Y2hlcyk7RyE9bnVsbCYmJGUoe3Jlc3RvcmVTY3JvbGxQb3NpdGlvbjpHfSl9cmV0dXJuKCk9PntmPW51bGwsZz1udWxsLGg9bnVsbH19ZnVuY3Rpb24gdXkoVCxMKXtyZXR1cm4gaCYmaChULEwubWFwKEc9PlNMKEcsUy5sb2FkZXJEYXRhKSkpfHxULmtleX1mdW5jdGlvbiBnYihULEwpe2lmKGYmJmcpe2xldCBGPXV5KFQsTCk7ZltGXT1nKCl9fWZ1bmN0aW9uIGN5KFQsTCl7aWYoZil7bGV0IEY9dXkoVCxMKSxHPWZbRl07aWYodHlwZW9mIEc9PSJudW1iZXIiKXJldHVybiBHfXJldHVybiBudWxsfWZ1bmN0aW9uIHZiKFQpe289e30scz1LbShULGksdm9pZCAwLG8pfXJldHVybiBfPXtnZXQgYmFzZW5hbWUoKXtyZXR1cm4gYX0sZ2V0IHN0YXRlKCl7cmV0dXJuIFN9LGdldCByb3V0ZXMoKXtyZXR1cm4gbH0sZ2V0IHdpbmRvdygpe3JldHVybiBlfSxpbml0aWFsaXplOkZlLHN1YnNjcmliZTpJZSxlbmFibGVTY3JvbGxSZXN0b3JhdGlvbjptYixuYXZpZ2F0ZTpTZSxmZXRjaDpjcixyZXZhbGlkYXRlOkxlLGNyZWF0ZUhyZWY6VD0+dC5oaXN0b3J5LmNyZWF0ZUhyZWYoVCksZW5jb2RlTG9jYXRpb246VD0+dC5oaXN0b3J5LmVuY29kZUxvY2F0aW9uKFQpLGdldEZldGNoZXI6c24sZGVsZXRlRmV0Y2hlcjplaSxkaXNwb3NlOnRlLGdldEJsb2NrZXI6cGIsZGVsZXRlQmxvY2tlcjpzeSxfaW50ZXJuYWxGZXRjaENvbnRyb2xsZXJzOkssX2ludGVybmFsQWN0aXZlRGVmZXJyZWRzOmtlLF9pbnRlcm5hbFNldFJvdXRlczp2Yn0sX31mdW5jdGlvbiBYTCh0KXtyZXR1cm4gdCE9bnVsbCYmKCJmb3JtRGF0YSJpbiB0JiZ0LmZvcm1EYXRhIT1udWxsfHwiYm9keSJpbiB0JiZ0LmJvZHkhPT12b2lkIDApfWZ1bmN0aW9uIFptKHQsZSxuLHIsaSxvLGwpe2xldCBzLGE7aWYobyl7cz1bXTtmb3IobGV0IGMgb2YgZSlpZihzLnB1c2goYyksYy5yb3V0ZS5pZD09PW8pe2E9YzticmVha319ZWxzZSBzPWUsYT1lW2UubGVuZ3RoLTFdO2xldCB1PURrKGl8fCIuIixMayhzKSxadSh0LnBhdGhuYW1lLG4pfHx0LnBhdGhuYW1lLGw9PT0icGF0aCIpO3JldHVybiBpPT1udWxsJiYodS5zZWFyY2g9dC5zZWFyY2gsdS5oYXNoPXQuaGFzaCksKGk9PW51bGx8fGk9PT0iInx8aT09PSIuIikmJmEmJmEucm91dGUuaW5kZXgmJiFRdih1LnNlYXJjaCkmJih1LnNlYXJjaD11LnNlYXJjaD91LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCI/aW5kZXgmIik6Ij9pbmRleCIpLHImJm4hPT0iLyImJih1LnBhdGhuYW1lPXUucGF0aG5hbWU9PT0iLyI/bjppbyhbbix1LnBhdGhuYW1lXSkpLEt1KHUpfWZ1bmN0aW9uIGNfKHQsZSxuLHIpe2lmKCFyfHwhWEwocikpcmV0dXJue3BhdGg6bn07aWYoci5mb3JtTWV0aG9kJiYhckQoci5mb3JtTWV0aG9kKSlyZXR1cm57cGF0aDpuLGVycm9yOkpuKDQwNSx7bWV0aG9kOnIuZm9ybU1ldGhvZH0pfTtsZXQgaT0oKT0+KHtwYXRoOm4sZXJyb3I6Sm4oNDAwLHt0eXBlOiJpbnZhbGlkLWJvZHkifSl9KSxvPXIuZm9ybU1ldGhvZHx8ImdldCIsbD10P28udG9VcHBlckNhc2UoKTpvLnRvTG93ZXJDYXNlKCkscz1VayhuKTtpZihyLmJvZHkhPT12b2lkIDApe2lmKHIuZm9ybUVuY1R5cGU9PT0idGV4dC9wbGFpbiIpe2lmKCF5cihsKSlyZXR1cm4gaSgpO2xldCBmPXR5cGVvZiByLmJvZHk9PSJzdHJpbmciP3IuYm9keTpyLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ci5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zP0FycmF5LmZyb20oci5ib2R5LmVudHJpZXMoKSkucmVkdWNlKChoLGcpPT57bGV0W20sd109ZztyZXR1cm4iIitoK20rIj0iK3crYApgfSwiIik6U3RyaW5nKHIuYm9keSk7cmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOntmb3JtTWV0aG9kOmwsZm9ybUFjdGlvbjpzLGZvcm1FbmNUeXBlOnIuZm9ybUVuY1R5cGUsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6Zn19fWVsc2UgaWYoci5mb3JtRW5jVHlwZT09PSJhcHBsaWNhdGlvbi9qc29uIil7aWYoIXlyKGwpKXJldHVybiBpKCk7dHJ5e2xldCBmPXR5cGVvZiByLmJvZHk9PSJzdHJpbmciP0pTT04ucGFyc2Uoci5ib2R5KTpyLmJvZHk7cmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOntmb3JtTWV0aG9kOmwsZm9ybUFjdGlvbjpzLGZvcm1FbmNUeXBlOnIuZm9ybUVuY1R5cGUsZm9ybURhdGE6dm9pZCAwLGpzb246Zix0ZXh0OnZvaWQgMH19fWNhdGNoe3JldHVybiBpKCl9fX1PZSh0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiIsIkZvcm1EYXRhIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpO2xldCBhLHU7aWYoci5mb3JtRGF0YSlhPUdtKHIuZm9ybURhdGEpLHU9ci5mb3JtRGF0YTtlbHNlIGlmKHIuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKWE9R20oci5ib2R5KSx1PXIuYm9keTtlbHNlIGlmKHIuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcylhPXIuYm9keSx1PXBfKGEpO2Vsc2UgaWYoci5ib2R5PT1udWxsKWE9bmV3IFVSTFNlYXJjaFBhcmFtcyx1PW5ldyBGb3JtRGF0YTtlbHNlIHRyeXthPW5ldyBVUkxTZWFyY2hQYXJhbXMoci5ib2R5KSx1PXBfKGEpfWNhdGNoe3JldHVybiBpKCl9bGV0IGM9e2Zvcm1NZXRob2Q6bCxmb3JtQWN0aW9uOnMsZm9ybUVuY1R5cGU6ciYmci5mb3JtRW5jVHlwZXx8ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsZm9ybURhdGE6dSxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH07aWYoeXIoYy5mb3JtTWV0aG9kKSlyZXR1cm57cGF0aDpuLHN1Ym1pc3Npb246Y307bGV0IGQ9Tmkobik7cmV0dXJuIGUmJmQuc2VhcmNoJiZRdihkLnNlYXJjaCkmJmEuYXBwZW5kKCJpbmRleCIsIiIpLGQuc2VhcmNoPSI/IithLHtwYXRoOkt1KGQpLHN1Ym1pc3Npb246Y319ZnVuY3Rpb24gSkwodCxlKXtsZXQgbj10O2lmKGUpe2xldCByPXQuZmluZEluZGV4KGk9Pmkucm91dGUuaWQ9PT1lKTtyPj0wJiYobj10LnNsaWNlKDAscikpfXJldHVybiBufWZ1bmN0aW9uIGRfKHQsZSxuLHIsaSxvLGwscyxhLHUsYyxkLGYsaCxnKXtsZXQgbT1nP09iamVjdC52YWx1ZXMoZylbMF06aD9PYmplY3QudmFsdWVzKGgpWzBdOnZvaWQgMCx3PXQuY3JlYXRlVVJMKGUubG9jYXRpb24pLHY9dC5jcmVhdGVVUkwoaSkseT1nP09iamVjdC5rZXlzKGcpWzBdOnZvaWQgMCxTPUpMKG4seSkuZmlsdGVyKCgkLEMpPT57aWYoJC5yb3V0ZS5sYXp5KXJldHVybiEwO2lmKCQucm91dGUubG9hZGVyPT1udWxsKXJldHVybiExO2lmKFFMKGUubG9hZGVyRGF0YSxlLm1hdGNoZXNbQ10sJCl8fGwuc29tZShrPT5rPT09JC5yb3V0ZS5pZCkpcmV0dXJuITA7bGV0IE49ZS5tYXRjaGVzW0NdLEE9JDtyZXR1cm4gZl8oJCx5dCh7Y3VycmVudFVybDp3LGN1cnJlbnRQYXJhbXM6Ti5wYXJhbXMsbmV4dFVybDp2LG5leHRQYXJhbXM6QS5wYXJhbXN9LHIse2FjdGlvblJlc3VsdDptLGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlOm98fHcucGF0aG5hbWUrdy5zZWFyY2g9PT12LnBhdGhuYW1lK3Yuc2VhcmNofHx3LnNlYXJjaCE9PXYuc2VhcmNofHxCayhOLEEpfSkpfSksRT1bXTtyZXR1cm4gdS5mb3JFYWNoKCgkLEMpPT57aWYoIW4uc29tZShEPT5ELnJvdXRlLmlkPT09JC5yb3V0ZUlkKXx8YS5oYXMoQykpcmV0dXJuO2xldCBOPUhsKGQsJC5wYXRoLGYpO2lmKCFOKXtFLnB1c2goe2tleTpDLHJvdXRlSWQ6JC5yb3V0ZUlkLHBhdGg6JC5wYXRoLG1hdGNoZXM6bnVsbCxtYXRjaDpudWxsLGNvbnRyb2xsZXI6bnVsbH0pO3JldHVybn1sZXQgQT1lLmZldGNoZXJzLmdldChDKSxrPVltKE4sJC5wYXRoKSxNPSExO2MuaGFzKEMpP009ITE6cy5pbmNsdWRlcyhDKT9NPSEwOkEmJkEuc3RhdGUhPT0iaWRsZSImJkEuZGF0YT09PXZvaWQgMD9NPW86TT1mXyhrLHl0KHtjdXJyZW50VXJsOncsY3VycmVudFBhcmFtczplLm1hdGNoZXNbZS5tYXRjaGVzLmxlbmd0aC0xXS5wYXJhbXMsbmV4dFVybDp2LG5leHRQYXJhbXM6bltuLmxlbmd0aC0xXS5wYXJhbXN9LHIse2FjdGlvblJlc3VsdDptLGRlZmF1bHRTaG91bGRSZXZhbGlkYXRlOm99KSksTSYmRS5wdXNoKHtrZXk6Qyxyb3V0ZUlkOiQucm91dGVJZCxwYXRoOiQucGF0aCxtYXRjaGVzOk4sbWF0Y2g6ayxjb250cm9sbGVyOm5ldyBBYm9ydENvbnRyb2xsZXJ9KX0pLFtTLEVdfWZ1bmN0aW9uIFFMKHQsZSxuKXtsZXQgcj0hZXx8bi5yb3V0ZS5pZCE9PWUucm91dGUuaWQsaT10W24ucm91dGUuaWRdPT09dm9pZCAwO3JldHVybiByfHxpfWZ1bmN0aW9uIEJrKHQsZSl7bGV0IG49dC5yb3V0ZS5wYXRoO3JldHVybiB0LnBhdGhuYW1lIT09ZS5wYXRobmFtZXx8biE9bnVsbCYmbi5lbmRzV2l0aCgiKiIpJiZ0LnBhcmFtc1siKiJdIT09ZS5wYXJhbXNbIioiXX1mdW5jdGlvbiBmXyh0LGUpe2lmKHQucm91dGUuc2hvdWxkUmV2YWxpZGF0ZSl7bGV0IG49dC5yb3V0ZS5zaG91bGRSZXZhbGlkYXRlKGUpO2lmKHR5cGVvZiBuPT0iYm9vbGVhbiIpcmV0dXJuIG59cmV0dXJuIGUuZGVmYXVsdFNob3VsZFJldmFsaWRhdGV9YXN5bmMgZnVuY3Rpb24gaF8odCxlLG4pe2lmKCF0LmxhenkpcmV0dXJuO2xldCByPWF3YWl0IHQubGF6eSgpO2lmKCF0LmxhenkpcmV0dXJuO2xldCBpPW5bdC5pZF07T2UoaSwiTm8gcm91dGUgZm91bmQgaW4gbWFuaWZlc3QiKTtsZXQgbz17fTtmb3IobGV0IGwgaW4gcil7bGV0IGE9aVtsXSE9PXZvaWQgMCYmbCE9PSJoYXNFcnJvckJvdW5kYXJ5IjtvbCghYSwnUm91dGUgIicraS5pZCsnIiBoYXMgYSBzdGF0aWMgcHJvcGVydHkgIicrbCsnIiBkZWZpbmVkIGJ1dCBpdHMgbGF6eSBmdW5jdGlvbiBpcyBhbHNvIHJldHVybmluZyBhIHZhbHVlIGZvciB0aGlzIHByb3BlcnR5LiAnKygnVGhlIGxhenkgcm91dGUgcHJvcGVydHkgIicrbCsnIiB3aWxsIGJlIGlnbm9yZWQuJykpLCFhJiYhX0wuaGFzKGwpJiYob1tsXT1yW2xdKX1PYmplY3QuYXNzaWduKGksbyksT2JqZWN0LmFzc2lnbihpLHl0KHt9LGUoaSkse2xhenk6dm9pZCAwfSkpfWFzeW5jIGZ1bmN0aW9uIGxhKHQsZSxuLHIsaSxvLGwscyl7cz09PXZvaWQgMCYmKHM9e30pO2xldCBhLHUsYyxkPWc9PntsZXQgbSx3PW5ldyBQcm9taXNlKCh2LHkpPT5tPXkpO3JldHVybiBjPSgpPT5tKCksZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpLFByb21pc2UucmFjZShbZyh7cmVxdWVzdDplLHBhcmFtczpuLnBhcmFtcyxjb250ZXh0OnMucmVxdWVzdENvbnRleHR9KSx3XSl9O3RyeXtsZXQgZz1uLnJvdXRlW3RdO2lmKG4ucm91dGUubGF6eSlpZihnKXtsZXQgbSx3PWF3YWl0IFByb21pc2UuYWxsKFtkKGcpLmNhdGNoKHY9PnttPXZ9KSxoXyhuLnJvdXRlLG8saSldKTtpZihtKXRocm93IG07dT13WzBdfWVsc2UgaWYoYXdhaXQgaF8obi5yb3V0ZSxvLGkpLGc9bi5yb3V0ZVt0XSxnKXU9YXdhaXQgZChnKTtlbHNlIGlmKHQ9PT0iYWN0aW9uIil7bGV0IG09bmV3IFVSTChlLnVybCksdz1tLnBhdGhuYW1lK20uc2VhcmNoO3Rocm93IEpuKDQwNSx7bWV0aG9kOmUubWV0aG9kLHBhdGhuYW1lOncscm91dGVJZDpuLnJvdXRlLmlkfSl9ZWxzZSByZXR1cm57dHlwZTpTdC5kYXRhLGRhdGE6dm9pZCAwfTtlbHNlIGlmKGcpdT1hd2FpdCBkKGcpO2Vsc2V7bGV0IG09bmV3IFVSTChlLnVybCksdz1tLnBhdGhuYW1lK20uc2VhcmNoO3Rocm93IEpuKDQwNCx7cGF0aG5hbWU6d30pfU9lKHUhPT12b2lkIDAsIllvdSBkZWZpbmVkICIrKHQ9PT0iYWN0aW9uIj8iYW4gYWN0aW9uIjoiYSBsb2FkZXIiKSsiIGZvciByb3V0ZSAiKygnIicrbi5yb3V0ZS5pZCsiXCIgYnV0IGRpZG4ndCByZXR1cm4gYW55dGhpbmcgZnJvbSB5b3VyIGAiK3QrImAgIikrImZ1bmN0aW9uLiBQbGVhc2UgcmV0dXJuIGEgdmFsdWUgb3IgYG51bGxgLiIpfWNhdGNoKGcpe2E9U3QuZXJyb3IsdT1nfWZpbmFsbHl7YyYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGMpfWlmKG5EKHUpKXtsZXQgZz11LnN0YXR1cztpZihITC5oYXMoZykpe2xldCB2PXUuaGVhZGVycy5nZXQoIkxvY2F0aW9uIik7aWYoT2UodiwiUmVkaXJlY3RzIHJldHVybmVkL3Rocm93biBmcm9tIGxvYWRlcnMvYWN0aW9ucyBtdXN0IGhhdmUgYSBMb2NhdGlvbiBoZWFkZXIiKSwhemsudGVzdCh2KSl2PVptKG5ldyBVUkwoZS51cmwpLHIuc2xpY2UoMCxyLmluZGV4T2YobikrMSksbCwhMCx2KTtlbHNlIGlmKCFzLmlzU3RhdGljUmVxdWVzdCl7bGV0IHk9bmV3IFVSTChlLnVybCksXz12LnN0YXJ0c1dpdGgoIi8vIik/bmV3IFVSTCh5LnByb3RvY29sK3YpOm5ldyBVUkwodiksUz1adShfLnBhdGhuYW1lLGwpIT1udWxsO18ub3JpZ2luPT09eS5vcmlnaW4mJlMmJih2PV8ucGF0aG5hbWUrXy5zZWFyY2grXy5oYXNoKX1pZihzLmlzU3RhdGljUmVxdWVzdCl0aHJvdyB1LmhlYWRlcnMuc2V0KCJMb2NhdGlvbiIsdiksdTtyZXR1cm57dHlwZTpTdC5yZWRpcmVjdCxzdGF0dXM6Zyxsb2NhdGlvbjp2LHJldmFsaWRhdGU6dS5oZWFkZXJzLmdldCgiWC1SZW1peC1SZXZhbGlkYXRlIikhPT1udWxsLHJlbG9hZERvY3VtZW50OnUuaGVhZGVycy5nZXQoIlgtUmVtaXgtUmVsb2FkLURvY3VtZW50IikhPT1udWxsfX1pZihzLmlzUm91dGVSZXF1ZXN0KXRocm93e3R5cGU6YT09PVN0LmVycm9yP1N0LmVycm9yOlN0LmRhdGEscmVzcG9uc2U6dX07bGV0IG0sdz11LmhlYWRlcnMuZ2V0KCJDb250ZW50LVR5cGUiKTtyZXR1cm4gdyYmL1xiYXBwbGljYXRpb25cL2pzb25cYi8udGVzdCh3KT9tPWF3YWl0IHUuanNvbigpOm09YXdhaXQgdS50ZXh0KCksYT09PVN0LmVycm9yP3t0eXBlOmEsZXJyb3I6bmV3IEp2KGcsdS5zdGF0dXNUZXh0LG0pLGhlYWRlcnM6dS5oZWFkZXJzfTp7dHlwZTpTdC5kYXRhLGRhdGE6bSxzdGF0dXNDb2RlOnUuc3RhdHVzLGhlYWRlcnM6dS5oZWFkZXJzfX1pZihhPT09U3QuZXJyb3IpcmV0dXJue3R5cGU6YSxlcnJvcjp1fTtpZih0RCh1KSl7dmFyIGYsaDtyZXR1cm57dHlwZTpTdC5kZWZlcnJlZCxkZWZlcnJlZERhdGE6dSxzdGF0dXNDb2RlOihmPXUuaW5pdCk9PW51bGw/dm9pZCAwOmYuc3RhdHVzLGhlYWRlcnM6KChoPXUuaW5pdCk9PW51bGw/dm9pZCAwOmguaGVhZGVycykmJm5ldyBIZWFkZXJzKHUuaW5pdC5oZWFkZXJzKX19cmV0dXJue3R5cGU6U3QuZGF0YSxkYXRhOnV9fWZ1bmN0aW9uIHNhKHQsZSxuLHIpe2xldCBpPXQuY3JlYXRlVVJMKFVrKGUpKS50b1N0cmluZygpLG89e3NpZ25hbDpufTtpZihyJiZ5cihyLmZvcm1NZXRob2QpKXtsZXR7Zm9ybU1ldGhvZDpsLGZvcm1FbmNUeXBlOnN9PXI7by5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLHM9PT0iYXBwbGljYXRpb24vanNvbiI/KG8uaGVhZGVycz1uZXcgSGVhZGVycyh7IkNvbnRlbnQtVHlwZSI6c30pLG8uYm9keT1KU09OLnN0cmluZ2lmeShyLmpzb24pKTpzPT09InRleHQvcGxhaW4iP28uYm9keT1yLnRleHQ6cz09PSJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiJiZyLmZvcm1EYXRhP28uYm9keT1HbShyLmZvcm1EYXRhKTpvLmJvZHk9ci5mb3JtRGF0YX1yZXR1cm4gbmV3IFJlcXVlc3QoaSxvKX1mdW5jdGlvbiBHbSh0KXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2ZvcihsZXRbbixyXW9mIHQuZW50cmllcygpKWUuYXBwZW5kKG4sdHlwZW9mIHI9PSJzdHJpbmciP3I6ci5uYW1lKTtyZXR1cm4gZX1mdW5jdGlvbiBwXyh0KXtsZXQgZT1uZXcgRm9ybURhdGE7Zm9yKGxldFtuLHJdb2YgdC5lbnRyaWVzKCkpZS5hcHBlbmQobixyKTtyZXR1cm4gZX1mdW5jdGlvbiBxTCh0LGUsbixyLGkpe2xldCBvPXt9LGw9bnVsbCxzLGE9ITEsdT17fTtyZXR1cm4gbi5mb3JFYWNoKChjLGQpPT57bGV0IGY9ZVtkXS5yb3V0ZS5pZDtpZihPZSghaXMoYyksIkNhbm5vdCBoYW5kbGUgcmVkaXJlY3QgcmVzdWx0cyBpbiBwcm9jZXNzTG9hZGVyRGF0YSIpLHphKGMpKXtsZXQgaD1qYSh0LGYpLGc9Yy5lcnJvcjtyJiYoZz1PYmplY3QudmFsdWVzKHIpWzBdLHI9dm9pZCAwKSxsPWx8fHt9LGxbaC5yb3V0ZS5pZF09PW51bGwmJihsW2gucm91dGUuaWRdPWcpLG9bZl09dm9pZCAwLGF8fChhPSEwLHM9SWsoYy5lcnJvcik/Yy5lcnJvci5zdGF0dXM6NTAwKSxjLmhlYWRlcnMmJih1W2ZdPWMuaGVhZGVycyl9ZWxzZSBEbyhjKT8oaS5zZXQoZixjLmRlZmVycmVkRGF0YSksb1tmXT1jLmRlZmVycmVkRGF0YS5kYXRhKTpvW2ZdPWMuZGF0YSxjLnN0YXR1c0NvZGUhPW51bGwmJmMuc3RhdHVzQ29kZSE9PTIwMCYmIWEmJihzPWMuc3RhdHVzQ29kZSksYy5oZWFkZXJzJiYodVtmXT1jLmhlYWRlcnMpfSksciYmKGw9cixvW09iamVjdC5rZXlzKHIpWzBdXT12b2lkIDApLHtsb2FkZXJEYXRhOm8sZXJyb3JzOmwsc3RhdHVzQ29kZTpzfHwyMDAsbG9hZGVySGVhZGVyczp1fX1mdW5jdGlvbiBtXyh0LGUsbixyLGksbyxsLHMpe2xldHtsb2FkZXJEYXRhOmEsZXJyb3JzOnV9PXFMKGUsbixyLGkscyk7Zm9yKGxldCBjPTA7YzxvLmxlbmd0aDtjKyspe2xldHtrZXk6ZCxtYXRjaDpmLGNvbnRyb2xsZXI6aH09b1tjXTtPZShsIT09dm9pZCAwJiZsW2NdIT09dm9pZCAwLCJEaWQgbm90IGZpbmQgY29ycmVzcG9uZGluZyBmZXRjaGVyIHJlc3VsdCIpO2xldCBnPWxbY107aWYoIShoJiZoLnNpZ25hbC5hYm9ydGVkKSlpZih6YShnKSl7bGV0IG09amEodC5tYXRjaGVzLGY9PW51bGw/dm9pZCAwOmYucm91dGUuaWQpO3UmJnVbbS5yb3V0ZS5pZF18fCh1PXl0KHt9LHUse1ttLnJvdXRlLmlkXTpnLmVycm9yfSkpLHQuZmV0Y2hlcnMuZGVsZXRlKGQpfWVsc2UgaWYoaXMoZykpT2UoITEsIlVuaGFuZGxlZCBmZXRjaGVyIHJldmFsaWRhdGlvbiByZWRpcmVjdCIpO2Vsc2UgaWYoRG8oZykpT2UoITEsIlVuaGFuZGxlZCBmZXRjaGVyIGRlZmVycmVkIGRhdGEiKTtlbHNle2xldCBtPURpKGcuZGF0YSk7dC5mZXRjaGVycy5zZXQoZCxtKX19cmV0dXJue2xvYWRlckRhdGE6YSxlcnJvcnM6dX19ZnVuY3Rpb24gZ18odCxlLG4scil7bGV0IGk9eXQoe30sZSk7Zm9yKGxldCBvIG9mIG4pe2xldCBsPW8ucm91dGUuaWQ7aWYoZS5oYXNPd25Qcm9wZXJ0eShsKT9lW2xdIT09dm9pZCAwJiYoaVtsXT1lW2xdKTp0W2xdIT09dm9pZCAwJiZvLnJvdXRlLmxvYWRlciYmKGlbbF09dFtsXSksciYmci5oYXNPd25Qcm9wZXJ0eShsKSlicmVha31yZXR1cm4gaX1mdW5jdGlvbiBqYSh0LGUpe3JldHVybihlP3Quc2xpY2UoMCx0LmZpbmRJbmRleChyPT5yLnJvdXRlLmlkPT09ZSkrMSk6Wy4uLnRdKS5yZXZlcnNlKCkuZmluZChyPT5yLnJvdXRlLmhhc0Vycm9yQm91bmRhcnk9PT0hMCl8fHRbMF19ZnVuY3Rpb24gdl8odCl7bGV0IGU9dC5sZW5ndGg9PT0xP3RbMF06dC5maW5kKG49Pm4uaW5kZXh8fCFuLnBhdGh8fG4ucGF0aD09PSIvIil8fHtpZDoiX19zaGltLWVycm9yLXJvdXRlX18ifTtyZXR1cm57bWF0Y2hlczpbe3BhcmFtczp7fSxwYXRobmFtZToiIixwYXRobmFtZUJhc2U6IiIscm91dGU6ZX1dLHJvdXRlOmV9fWZ1bmN0aW9uIEpuKHQsZSl7bGV0e3BhdGhuYW1lOm4scm91dGVJZDpyLG1ldGhvZDppLHR5cGU6b309ZT09PXZvaWQgMD97fTplLGw9IlVua25vd24gU2VydmVyIEVycm9yIixzPSJVbmtub3duIEByZW1peC1ydW4vcm91dGVyIGVycm9yIjtyZXR1cm4gdD09PTQwMD8obD0iQmFkIFJlcXVlc3QiLGkmJm4mJnI/cz0iWW91IG1hZGUgYSAiK2krJyByZXF1ZXN0IHRvICInK24rJyIgYnV0ICcrKCdkaWQgbm90IHByb3ZpZGUgYSBgbG9hZGVyYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjpvPT09ImRlZmVyLWFjdGlvbiI/cz0iZGVmZXIoKSBpcyBub3Qgc3VwcG9ydGVkIGluIGFjdGlvbnMiOm89PT0iaW52YWxpZC1ib2R5IiYmKHM9IlVuYWJsZSB0byBlbmNvZGUgc3VibWlzc2lvbiBib2R5IikpOnQ9PT00MDM/KGw9IkZvcmJpZGRlbiIscz0nUm91dGUgIicrcisnIiBkb2VzIG5vdCBtYXRjaCBVUkwgIicrbisnIicpOnQ9PT00MDQ/KGw9Ik5vdCBGb3VuZCIscz0nTm8gcm91dGUgbWF0Y2hlcyBVUkwgIicrbisnIicpOnQ9PT00MDUmJihsPSJNZXRob2QgTm90IEFsbG93ZWQiLGkmJm4mJnI/cz0iWW91IG1hZGUgYSAiK2kudG9VcHBlckNhc2UoKSsnIHJlcXVlc3QgdG8gIicrbisnIiBidXQgJysoJ2RpZCBub3QgcHJvdmlkZSBhbiBgYWN0aW9uYCBmb3Igcm91dGUgIicrcisnIiwgJykrInNvIHRoZXJlIGlzIG5vIHdheSB0byBoYW5kbGUgdGhlIHJlcXVlc3QuIjppJiYocz0nSW52YWxpZCByZXF1ZXN0IG1ldGhvZCAiJytpLnRvVXBwZXJDYXNlKCkrJyInKSksbmV3IEp2KHR8fDUwMCxsLG5ldyBFcnJvcihzKSwhMCl9ZnVuY3Rpb24geV8odCl7Zm9yKGxldCBlPXQubGVuZ3RoLTE7ZT49MDtlLS0pe2xldCBuPXRbZV07aWYoaXMobikpcmV0dXJue3Jlc3VsdDpuLGlkeDplfX19ZnVuY3Rpb24gVWsodCl7bGV0IGU9dHlwZW9mIHQ9PSJzdHJpbmciP05pKHQpOnQ7cmV0dXJuIEt1KHl0KHt9LGUse2hhc2g6IiJ9KSl9ZnVuY3Rpb24gZUQodCxlKXtyZXR1cm4gdC5wYXRobmFtZSE9PWUucGF0aG5hbWV8fHQuc2VhcmNoIT09ZS5zZWFyY2g/ITE6dC5oYXNoPT09IiI/ZS5oYXNoIT09IiI6dC5oYXNoPT09ZS5oYXNoPyEwOmUuaGFzaCE9PSIifWZ1bmN0aW9uIERvKHQpe3JldHVybiB0LnR5cGU9PT1TdC5kZWZlcnJlZH1mdW5jdGlvbiB6YSh0KXtyZXR1cm4gdC50eXBlPT09U3QuZXJyb3J9ZnVuY3Rpb24gaXModCl7cmV0dXJuKHQmJnQudHlwZSk9PT1TdC5yZWRpcmVjdH1mdW5jdGlvbiB0RCh0KXtsZXQgZT10O3JldHVybiBlJiZ0eXBlb2YgZT09Im9iamVjdCImJnR5cGVvZiBlLmRhdGE9PSJvYmplY3QiJiZ0eXBlb2YgZS5zdWJzY3JpYmU9PSJmdW5jdGlvbiImJnR5cGVvZiBlLmNhbmNlbD09ImZ1bmN0aW9uIiYmdHlwZW9mIGUucmVzb2x2ZURhdGE9PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gbkQodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0LnN0YXR1cz09Im51bWJlciImJnR5cGVvZiB0LnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5oZWFkZXJzPT0ib2JqZWN0IiYmdHlwZW9mIHQuYm9keTwidSJ9ZnVuY3Rpb24gckQodCl7cmV0dXJuIFZMLmhhcyh0LnRvTG93ZXJDYXNlKCkpfWZ1bmN0aW9uIHlyKHQpe3JldHVybiBVTC5oYXModC50b0xvd2VyQ2FzZSgpKX1hc3luYyBmdW5jdGlvbiB4Xyh0LGUsbixyLGksbyl7Zm9yKGxldCBsPTA7bDxuLmxlbmd0aDtsKyspe2xldCBzPW5bbF0sYT1lW2xdO2lmKCFhKWNvbnRpbnVlO2xldCB1PXQuZmluZChkPT5kLnJvdXRlLmlkPT09YS5yb3V0ZS5pZCksYz11IT1udWxsJiYhQmsodSxhKSYmKG8mJm9bYS5yb3V0ZS5pZF0pIT09dm9pZCAwO2lmKERvKHMpJiYoaXx8Yykpe2xldCBkPXJbbF07T2UoZCwiRXhwZWN0ZWQgYW4gQWJvcnRTaWduYWwgZm9yIHJldmFsaWRhdGluZyBmZXRjaGVyIGRlZmVycmVkIHJlc3VsdCIpLGF3YWl0IFdrKHMsZCxpKS50aGVuKGY9PntmJiYobltsXT1mfHxuW2xdKX0pfX19YXN5bmMgZnVuY3Rpb24gV2sodCxlLG4pe2lmKG49PT12b2lkIDAmJihuPSExKSwhYXdhaXQgdC5kZWZlcnJlZERhdGEucmVzb2x2ZURhdGEoZSkpe2lmKG4pdHJ5e3JldHVybnt0eXBlOlN0LmRhdGEsZGF0YTp0LmRlZmVycmVkRGF0YS51bndyYXBwZWREYXRhfX1jYXRjaChpKXtyZXR1cm57dHlwZTpTdC5lcnJvcixlcnJvcjppfX1yZXR1cm57dHlwZTpTdC5kYXRhLGRhdGE6dC5kZWZlcnJlZERhdGEuZGF0YX19fWZ1bmN0aW9uIFF2KHQpe3JldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHQpLmdldEFsbCgiaW5kZXgiKS5zb21lKGU9PmU9PT0iIil9ZnVuY3Rpb24gWW0odCxlKXtsZXQgbj10eXBlb2YgZT09InN0cmluZyI/TmkoZSkuc2VhcmNoOmUuc2VhcmNoO2lmKHRbdC5sZW5ndGgtMV0ucm91dGUuaW5kZXgmJlF2KG58fCIiKSlyZXR1cm4gdFt0Lmxlbmd0aC0xXTtsZXQgcj1Nayh0KTtyZXR1cm4gcltyLmxlbmd0aC0xXX1mdW5jdGlvbiBfXyh0KXtsZXR7Zm9ybU1ldGhvZDplLGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLHRleHQ6aSxmb3JtRGF0YTpvLGpzb246bH09dDtpZighKCFlfHwhbnx8IXIpKXtpZihpIT1udWxsKXJldHVybntmb3JtTWV0aG9kOmUsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6aX07aWYobyE9bnVsbClyZXR1cm57Zm9ybU1ldGhvZDplLGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLGZvcm1EYXRhOm8sanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9O2lmKGwhPT12b2lkIDApcmV0dXJue2Zvcm1NZXRob2Q6ZSxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cixmb3JtRGF0YTp2b2lkIDAsanNvbjpsLHRleHQ6dm9pZCAwfX19ZnVuY3Rpb24gSmgodCxlKXtyZXR1cm4gZT97c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOnQsZm9ybU1ldGhvZDplLmZvcm1NZXRob2QsZm9ybUFjdGlvbjplLmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6ZS5mb3JtRW5jVHlwZSxmb3JtRGF0YTplLmZvcm1EYXRhLGpzb246ZS5qc29uLHRleHQ6ZS50ZXh0fTp7c3RhdGU6ImxvYWRpbmciLGxvY2F0aW9uOnQsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH19ZnVuY3Rpb24gaUQodCxlKXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGxvY2F0aW9uOnQsZm9ybU1ldGhvZDplLmZvcm1NZXRob2QsZm9ybUFjdGlvbjplLmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6ZS5mb3JtRW5jVHlwZSxmb3JtRGF0YTplLmZvcm1EYXRhLGpzb246ZS5qc29uLHRleHQ6ZS50ZXh0fX1mdW5jdGlvbiBhYSh0LGUpe3JldHVybiB0P3tzdGF0ZToibG9hZGluZyIsZm9ybU1ldGhvZDp0LmZvcm1NZXRob2QsZm9ybUFjdGlvbjp0LmZvcm1BY3Rpb24sZm9ybUVuY1R5cGU6dC5mb3JtRW5jVHlwZSxmb3JtRGF0YTp0LmZvcm1EYXRhLGpzb246dC5qc29uLHRleHQ6dC50ZXh0LGRhdGE6ZX06e3N0YXRlOiJsb2FkaW5nIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6ZX19ZnVuY3Rpb24gb0QodCxlKXtyZXR1cm57c3RhdGU6InN1Ym1pdHRpbmciLGZvcm1NZXRob2Q6dC5mb3JtTWV0aG9kLGZvcm1BY3Rpb246dC5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOnQuZm9ybUVuY1R5cGUsZm9ybURhdGE6dC5mb3JtRGF0YSxqc29uOnQuanNvbix0ZXh0OnQudGV4dCxkYXRhOmU/ZS5kYXRhOnZvaWQgMH19ZnVuY3Rpb24gRGkodCl7cmV0dXJue3N0YXRlOiJpZGxlIixmb3JtTWV0aG9kOnZvaWQgMCxmb3JtQWN0aW9uOnZvaWQgMCxmb3JtRW5jVHlwZTp2b2lkIDAsZm9ybURhdGE6dm9pZCAwLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwLGRhdGE6dH19ZnVuY3Rpb24gbEQodCxlKXt0cnl7bGV0IG49dC5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKEZrKTtpZihuKXtsZXQgcj1KU09OLnBhcnNlKG4pO2ZvcihsZXRbaSxvXW9mIE9iamVjdC5lbnRyaWVzKHJ8fHt9KSlvJiZBcnJheS5pc0FycmF5KG8pJiZlLnNldChpLG5ldyBTZXQob3x8W10pKX19Y2F0Y2h7fX1mdW5jdGlvbiBzRCh0LGUpe2lmKGUuc2l6ZT4wKXtsZXQgbj17fTtmb3IobGV0W3IsaV1vZiBlKW5bcl09Wy4uLmldO3RyeXt0LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oRmssSlNPTi5zdHJpbmdpZnkobikpfWNhdGNoKHIpe29sKCExLCJGYWlsZWQgdG8gc2F2ZSBhcHBsaWVkIHZpZXcgdHJhbnNpdGlvbnMgaW4gc2Vzc2lvblN0b3JhZ2UgKCIrcisiKS4iKX19fS8qKgogKiBSZWFjdCBSb3V0ZXIgdjYuMjAuMAogKgogKiBDb3B5cmlnaHQgKGMpIFJlbWl4IFNvZnR3YXJlIEluYy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UubWQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICoKICogQGxpY2Vuc2UgTUlUCiAqL2Z1bmN0aW9uIHRmKCl7cmV0dXJuIHRmPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbi5iaW5kKCk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sdGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IFpmPXAuY3JlYXRlQ29udGV4dChudWxsKSxWaz1wLmNyZWF0ZUNvbnRleHQobnVsbCksR2Y9cC5jcmVhdGVDb250ZXh0KG51bGwpLFlmPXAuY3JlYXRlQ29udGV4dChudWxsKSxtbD1wLmNyZWF0ZUNvbnRleHQoe291dGxldDpudWxsLG1hdGNoZXM6W10saXNEYXRhUm91dGU6ITF9KSxIaz1wLmNyZWF0ZUNvbnRleHQobnVsbCk7ZnVuY3Rpb24gWGYoKXtyZXR1cm4gcC51c2VDb250ZXh0KFlmKSE9bnVsbH1mdW5jdGlvbiBLaygpe3JldHVybiBYZigpfHxPZSghMSkscC51c2VDb250ZXh0KFlmKS5sb2NhdGlvbn1mdW5jdGlvbiBaayh0KXtwLnVzZUNvbnRleHQoR2YpLnN0YXRpY3x8cC51c2VMYXlvdXRFZmZlY3QodCl9ZnVuY3Rpb24gcXYoKXtsZXR7aXNEYXRhUm91dGU6dH09cC51c2VDb250ZXh0KG1sKTtyZXR1cm4gdD9fRCgpOmFEKCl9ZnVuY3Rpb24gYUQoKXtYZigpfHxPZSghMSk7bGV0IHQ9cC51c2VDb250ZXh0KFpmKSx7YmFzZW5hbWU6ZSxuYXZpZ2F0b3I6bn09cC51c2VDb250ZXh0KEdmKSx7bWF0Y2hlczpyfT1wLnVzZUNvbnRleHQobWwpLHtwYXRobmFtZTppfT1LaygpLG89SlNPTi5zdHJpbmdpZnkoTGsocikpLGw9cC51c2VSZWYoITEpO3JldHVybiBaaygoKT0+e2wuY3VycmVudD0hMH0pLHAudXNlQ2FsbGJhY2soZnVuY3Rpb24oYSx1KXtpZih1PT09dm9pZCAwJiYodT17fSksIWwuY3VycmVudClyZXR1cm47aWYodHlwZW9mIGE9PSJudW1iZXIiKXtuLmdvKGEpO3JldHVybn1sZXQgYz1EayhhLEpTT04ucGFyc2UobyksaSx1LnJlbGF0aXZlPT09InBhdGgiKTt0PT1udWxsJiZlIT09Ii8iJiYoYy5wYXRobmFtZT1jLnBhdGhuYW1lPT09Ii8iP2U6aW8oW2UsYy5wYXRobmFtZV0pKSwodS5yZXBsYWNlP24ucmVwbGFjZTpuLnB1c2gpKGMsdS5zdGF0ZSx1KX0sW2UsbixvLGksdF0pfWZ1bmN0aW9uIHVEKCl7bGV0e21hdGNoZXM6dH09cC51c2VDb250ZXh0KG1sKSxlPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU/ZS5wYXJhbXM6e319ZnVuY3Rpb24gY0QodCxlLG4pe1hmKCl8fE9lKCExKTtsZXR7bmF2aWdhdG9yOnJ9PXAudXNlQ29udGV4dChHZikse21hdGNoZXM6aX09cC51c2VDb250ZXh0KG1sKSxvPWlbaS5sZW5ndGgtMV0sbD1vP28ucGFyYW1zOnt9O28mJm8ucGF0aG5hbWU7bGV0IHM9bz9vLnBhdGhuYW1lQmFzZToiLyI7byYmby5yb3V0ZTtsZXQgYT1LaygpLHU7aWYoZSl7dmFyIGM7bGV0IG09dHlwZW9mIGU9PSJzdHJpbmciP05pKGUpOmU7cz09PSIvInx8KGM9bS5wYXRobmFtZSkhPW51bGwmJmMuc3RhcnRzV2l0aChzKXx8T2UoITEpLHU9bX1lbHNlIHU9YTtsZXQgZD11LnBhdGhuYW1lfHwiLyIsZj1zPT09Ii8iP2Q6ZC5zbGljZShzLmxlbmd0aCl8fCIvIixoPUhsKHQse3BhdGhuYW1lOmZ9KSxnPW1EKGgmJmgubWFwKG09Pk9iamVjdC5hc3NpZ24oe30sbSx7cGFyYW1zOk9iamVjdC5hc3NpZ24oe30sbCxtLnBhcmFtcykscGF0aG5hbWU6aW8oW3Msci5lbmNvZGVMb2NhdGlvbj9yLmVuY29kZUxvY2F0aW9uKG0ucGF0aG5hbWUpLnBhdGhuYW1lOm0ucGF0aG5hbWVdKSxwYXRobmFtZUJhc2U6bS5wYXRobmFtZUJhc2U9PT0iLyI/czppbyhbcyxyLmVuY29kZUxvY2F0aW9uP3IuZW5jb2RlTG9jYXRpb24obS5wYXRobmFtZUJhc2UpLnBhdGhuYW1lOm0ucGF0aG5hbWVCYXNlXSl9KSksaSxuKTtyZXR1cm4gZSYmZz9wLmNyZWF0ZUVsZW1lbnQoWWYuUHJvdmlkZXIse3ZhbHVlOntsb2NhdGlvbjp0Zih7cGF0aG5hbWU6Ii8iLHNlYXJjaDoiIixoYXNoOiIiLHN0YXRlOm51bGwsa2V5OiJkZWZhdWx0In0sdSksbmF2aWdhdGlvblR5cGU6d3QuUG9wfX0sZyk6Z31mdW5jdGlvbiBkRCgpe2xldCB0PXhEKCksZT1Jayh0KT90LnN0YXR1cysiICIrdC5zdGF0dXNUZXh0OnQgaW5zdGFuY2VvZiBFcnJvcj90Lm1lc3NhZ2U6SlNPTi5zdHJpbmdpZnkodCksbj10IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFjazpudWxsLGk9e3BhZGRpbmc6IjAuNXJlbSIsYmFja2dyb3VuZENvbG9yOiJyZ2JhKDIwMCwyMDAsMjAwLCAwLjUpIn0sbz1udWxsO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQocC5GcmFnbWVudCxudWxsLHAuY3JlYXRlRWxlbWVudCgiaDIiLG51bGwsIlVuZXhwZWN0ZWQgQXBwbGljYXRpb24gRXJyb3IhIikscC5jcmVhdGVFbGVtZW50KCJoMyIse3N0eWxlOntmb250U3R5bGU6Iml0YWxpYyJ9fSxlKSxuP3AuY3JlYXRlRWxlbWVudCgicHJlIix7c3R5bGU6aX0sbik6bnVsbCxvKX1jb25zdCBmRD1wLmNyZWF0ZUVsZW1lbnQoZEQsbnVsbCk7Y2xhc3MgaEQgZXh0ZW5kcyBwLkNvbXBvbmVudHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnN0YXRlPXtsb2NhdGlvbjplLmxvY2F0aW9uLHJldmFsaWRhdGlvbjplLnJldmFsaWRhdGlvbixlcnJvcjplLmVycm9yfX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGUpe3JldHVybntlcnJvcjplfX1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKGUsbil7cmV0dXJuIG4ubG9jYXRpb24hPT1lLmxvY2F0aW9ufHxuLnJldmFsaWRhdGlvbiE9PSJpZGxlIiYmZS5yZXZhbGlkYXRpb249PT0iaWRsZSI/e2Vycm9yOmUuZXJyb3IsbG9jYXRpb246ZS5sb2NhdGlvbixyZXZhbGlkYXRpb246ZS5yZXZhbGlkYXRpb259OntlcnJvcjplLmVycm9yfHxuLmVycm9yLGxvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOmUucmV2YWxpZGF0aW9ufHxuLnJldmFsaWRhdGlvbn19Y29tcG9uZW50RGlkQ2F0Y2goZSxuKXtjb25zb2xlLmVycm9yKCJSZWFjdCBSb3V0ZXIgY2F1Z2h0IHRoZSBmb2xsb3dpbmcgZXJyb3IgZHVyaW5nIHJlbmRlciIsZSxuKX1yZW5kZXIoKXtyZXR1cm4gdGhpcy5zdGF0ZS5lcnJvcj9wLmNyZWF0ZUVsZW1lbnQobWwuUHJvdmlkZXIse3ZhbHVlOnRoaXMucHJvcHMucm91dGVDb250ZXh0fSxwLmNyZWF0ZUVsZW1lbnQoSGsuUHJvdmlkZXIse3ZhbHVlOnRoaXMuc3RhdGUuZXJyb3IsY2hpbGRyZW46dGhpcy5wcm9wcy5jb21wb25lbnR9KSk6dGhpcy5wcm9wcy5jaGlsZHJlbn19ZnVuY3Rpb24gcEQodCl7bGV0e3JvdXRlQ29udGV4dDplLG1hdGNoOm4sY2hpbGRyZW46cn09dCxpPXAudXNlQ29udGV4dChaZik7cmV0dXJuIGkmJmkuc3RhdGljJiZpLnN0YXRpY0NvbnRleHQmJihuLnJvdXRlLmVycm9yRWxlbWVudHx8bi5yb3V0ZS5FcnJvckJvdW5kYXJ5KSYmKGkuc3RhdGljQ29udGV4dC5fZGVlcGVzdFJlbmRlcmVkQm91bmRhcnlJZD1uLnJvdXRlLmlkKSxwLmNyZWF0ZUVsZW1lbnQobWwuUHJvdmlkZXIse3ZhbHVlOmV9LHIpfWZ1bmN0aW9uIG1EKHQsZSxuKXt2YXIgcjtpZihlPT09dm9pZCAwJiYoZT1bXSksbj09PXZvaWQgMCYmKG49bnVsbCksdD09bnVsbCl7dmFyIGk7aWYoKGk9bikhPW51bGwmJmkuZXJyb3JzKXQ9bi5tYXRjaGVzO2Vsc2UgcmV0dXJuIG51bGx9bGV0IG89dCxsPShyPW4pPT1udWxsP3ZvaWQgMDpyLmVycm9ycztpZihsIT1udWxsKXtsZXQgcz1vLmZpbmRJbmRleChhPT5hLnJvdXRlLmlkJiYobD09bnVsbD92b2lkIDA6bFthLnJvdXRlLmlkXSkpO3M+PTB8fE9lKCExKSxvPW8uc2xpY2UoMCxNYXRoLm1pbihvLmxlbmd0aCxzKzEpKX1yZXR1cm4gby5yZWR1Y2VSaWdodCgocyxhLHUpPT57bGV0IGM9YS5yb3V0ZS5pZD9sPT1udWxsP3ZvaWQgMDpsW2Eucm91dGUuaWRdOm51bGwsZD1udWxsO24mJihkPWEucm91dGUuZXJyb3JFbGVtZW50fHxmRCk7bGV0IGY9ZS5jb25jYXQoby5zbGljZSgwLHUrMSkpLGg9KCk9PntsZXQgZztyZXR1cm4gYz9nPWQ6YS5yb3V0ZS5Db21wb25lbnQ/Zz1wLmNyZWF0ZUVsZW1lbnQoYS5yb3V0ZS5Db21wb25lbnQsbnVsbCk6YS5yb3V0ZS5lbGVtZW50P2c9YS5yb3V0ZS5lbGVtZW50Omc9cyxwLmNyZWF0ZUVsZW1lbnQocEQse21hdGNoOmEscm91dGVDb250ZXh0OntvdXRsZXQ6cyxtYXRjaGVzOmYsaXNEYXRhUm91dGU6biE9bnVsbH0sY2hpbGRyZW46Z30pfTtyZXR1cm4gbiYmKGEucm91dGUuRXJyb3JCb3VuZGFyeXx8YS5yb3V0ZS5lcnJvckVsZW1lbnR8fHU9PT0wKT9wLmNyZWF0ZUVsZW1lbnQoaEQse2xvY2F0aW9uOm4ubG9jYXRpb24scmV2YWxpZGF0aW9uOm4ucmV2YWxpZGF0aW9uLGNvbXBvbmVudDpkLGVycm9yOmMsY2hpbGRyZW46aCgpLHJvdXRlQ29udGV4dDp7b3V0bGV0Om51bGwsbWF0Y2hlczpmLGlzRGF0YVJvdXRlOiEwfX0pOmgoKX0sbnVsbCl9dmFyIEdrPWZ1bmN0aW9uKHQpe3JldHVybiB0LlVzZUJsb2NrZXI9InVzZUJsb2NrZXIiLHQuVXNlUmV2YWxpZGF0b3I9InVzZVJldmFsaWRhdG9yIix0LlVzZU5hdmlnYXRlU3RhYmxlPSJ1c2VOYXZpZ2F0ZSIsdH0oR2t8fHt9KSxuZj1mdW5jdGlvbih0KXtyZXR1cm4gdC5Vc2VCbG9ja2VyPSJ1c2VCbG9ja2VyIix0LlVzZUxvYWRlckRhdGE9InVzZUxvYWRlckRhdGEiLHQuVXNlQWN0aW9uRGF0YT0idXNlQWN0aW9uRGF0YSIsdC5Vc2VSb3V0ZUVycm9yPSJ1c2VSb3V0ZUVycm9yIix0LlVzZU5hdmlnYXRpb249InVzZU5hdmlnYXRpb24iLHQuVXNlUm91dGVMb2FkZXJEYXRhPSJ1c2VSb3V0ZUxvYWRlckRhdGEiLHQuVXNlTWF0Y2hlcz0idXNlTWF0Y2hlcyIsdC5Vc2VSZXZhbGlkYXRvcj0idXNlUmV2YWxpZGF0b3IiLHQuVXNlTmF2aWdhdGVTdGFibGU9InVzZU5hdmlnYXRlIix0LlVzZVJvdXRlSWQ9InVzZVJvdXRlSWQiLHR9KG5mfHx7fSk7ZnVuY3Rpb24gZ0QodCl7bGV0IGU9cC51c2VDb250ZXh0KFpmKTtyZXR1cm4gZXx8T2UoITEpLGV9ZnVuY3Rpb24gdkQodCl7bGV0IGU9cC51c2VDb250ZXh0KFZrKTtyZXR1cm4gZXx8T2UoITEpLGV9ZnVuY3Rpb24geUQodCl7bGV0IGU9cC51c2VDb250ZXh0KG1sKTtyZXR1cm4gZXx8T2UoITEpLGV9ZnVuY3Rpb24gWWsodCl7bGV0IGU9eUQoKSxuPWUubWF0Y2hlc1tlLm1hdGNoZXMubGVuZ3RoLTFdO3JldHVybiBuLnJvdXRlLmlkfHxPZSghMSksbi5yb3V0ZS5pZH1mdW5jdGlvbiB4RCgpe3ZhciB0O2xldCBlPXAudXNlQ29udGV4dChIayksbj12RChuZi5Vc2VSb3V0ZUVycm9yKSxyPVlrKG5mLlVzZVJvdXRlRXJyb3IpO3JldHVybiBlfHwoKHQ9bi5lcnJvcnMpPT1udWxsP3ZvaWQgMDp0W3JdKX1mdW5jdGlvbiBfRCgpe2xldHtyb3V0ZXI6dH09Z0QoR2suVXNlTmF2aWdhdGVTdGFibGUpLGU9WWsobmYuVXNlTmF2aWdhdGVTdGFibGUpLG49cC51c2VSZWYoITEpO3JldHVybiBaaygoKT0+e24uY3VycmVudD0hMH0pLHAudXNlQ2FsbGJhY2soZnVuY3Rpb24oaSxvKXtvPT09dm9pZCAwJiYobz17fSksbi5jdXJyZW50JiYodHlwZW9mIGk9PSJudW1iZXIiP3QubmF2aWdhdGUoaSk6dC5uYXZpZ2F0ZShpLHRmKHtmcm9tUm91dGVJZDplfSxvKSkpfSxbdCxlXSl9ZnVuY3Rpb24gd0QodCl7bGV0e2Jhc2VuYW1lOmU9Ii8iLGNoaWxkcmVuOm49bnVsbCxsb2NhdGlvbjpyLG5hdmlnYXRpb25UeXBlOmk9d3QuUG9wLG5hdmlnYXRvcjpvLHN0YXRpYzpsPSExfT10O1hmKCkmJk9lKCExKTtsZXQgcz1lLnJlcGxhY2UoL15cLyovLCIvIiksYT1wLnVzZU1lbW8oKCk9Pih7YmFzZW5hbWU6cyxuYXZpZ2F0b3I6byxzdGF0aWM6bH0pLFtzLG8sbF0pO3R5cGVvZiByPT0ic3RyaW5nIiYmKHI9TmkocikpO2xldHtwYXRobmFtZTp1PSIvIixzZWFyY2g6Yz0iIixoYXNoOmQ9IiIsc3RhdGU6Zj1udWxsLGtleTpoPSJkZWZhdWx0In09cixnPXAudXNlTWVtbygoKT0+e2xldCBtPVp1KHUscyk7cmV0dXJuIG09PW51bGw/bnVsbDp7bG9jYXRpb246e3BhdGhuYW1lOm0sc2VhcmNoOmMsaGFzaDpkLHN0YXRlOmYsa2V5Omh9LG5hdmlnYXRpb25UeXBlOml9fSxbcyx1LGMsZCxmLGgsaV0pO3JldHVybiBnPT1udWxsP251bGw6cC5jcmVhdGVFbGVtZW50KEdmLlByb3ZpZGVyLHt2YWx1ZTphfSxwLmNyZWF0ZUVsZW1lbnQoWWYuUHJvdmlkZXIse2NoaWxkcmVuOm4sdmFsdWU6Z30pKX1uZXcgUHJvbWlzZSgoKT0+e30pO2Z1bmN0aW9uIFNEKHQpe2xldCBlPXtoYXNFcnJvckJvdW5kYXJ5OnQuRXJyb3JCb3VuZGFyeSE9bnVsbHx8dC5lcnJvckVsZW1lbnQhPW51bGx9O3JldHVybiB0LkNvbXBvbmVudCYmT2JqZWN0LmFzc2lnbihlLHtlbGVtZW50OnAuY3JlYXRlRWxlbWVudCh0LkNvbXBvbmVudCksQ29tcG9uZW50OnZvaWQgMH0pLHQuRXJyb3JCb3VuZGFyeSYmT2JqZWN0LmFzc2lnbihlLHtlcnJvckVsZW1lbnQ6cC5jcmVhdGVFbGVtZW50KHQuRXJyb3JCb3VuZGFyeSksRXJyb3JCb3VuZGFyeTp2b2lkIDB9KSxlfWZ1bmN0aW9uIFZvKHtjaGlsZHJlbjp0fSl7Y29uc3QgZT10LnNwbGl0KCIvIikuZmlsdGVyKG49Pm4pO3JldHVybiBlLm1hcCgobixyKT0+ciE9PWUubGVuZ3RoLTE/eC5qc3hzKHAuRnJhZ21lbnQse2NoaWxkcmVuOlt4LmpzeCgic3BhbiIse2NoaWxkcmVuOm59KSx4LmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtWzJweF0gdGV4dC1tdXRlZCIsY2hpbGRyZW46Ii8ifSldfSxgJHt0fS8ke259YCk6eC5qc3goRUQse2NoaWxkcmVuOm59LHQpKX1mdW5jdGlvbiBFRCh7Y2hpbGRyZW46dH0pe2lmKHQuaW5jbHVkZXMoIi4iKSl7Y29uc3QgZT10LnNwbGl0KCIuIik7cmV0dXJuIGUubWFwKChuLHIpPT5yIT09ZS5sZW5ndGgtMT94LmpzeHMocC5GcmFnbWVudCx7Y2hpbGRyZW46W3guanN4KCJzcGFuIix7Y2hpbGRyZW46cj09PTA/bjpKU09OLnBhcnNlKG4pfSkseC5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LVsycHhdIHRleHQtbXV0ZWQiLGNoaWxkcmVuOiIuIn0pXX0sYCR7dH0uJHtufWApOnguanN4KCJzcGFuIix7Y2hpbGRyZW46cj09PTA/bjpKU09OLnBhcnNlKG4pfSx0KSl9cmV0dXJuIHguanN4KCJzcGFuIix7Y2hpbGRyZW46dH0pfWNvbnN0IFhrPXJlLmNyZWF0ZUNvbnRleHQobnVsbCksQ0Q9dD0+e3ZhciBzLGE7Y29uc3QgZT1yZS51c2VDb250ZXh0KFhrKSxbbixyXT1Pbi5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aCh0KSxpPShzPWU9PW51bGw/dm9pZCAwOmVbbl0pPT1udWxsP3ZvaWQgMDpzLnNvdXJjZSxvPShhPWU9PW51bGw/dm9pZCAwOmVbbl0pPT1udWxsP3ZvaWQgMDphLnNjaGVtYTtpZighaXx8IW8pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIG1vZHVsZTogIituKTtjb25zdCBsPU9uLnJlc29sdmVQYXRoKHIsaSxvKTtyZXR1cm57bW9kdWxlSWQ6bixtb2R1bGVTb3VyY2U6bC5zb3VyY2UsbW9kdWxlU2NoZW1hOmwuc2NoZW1hfX0sa0Q9KHthcGk6dH0pPT57dmFyIE4sQTtjb25zdHsiKiI6ZX09dUQoKSxbbixyXT1wLnVzZVN0YXRlKG51bGwpLFtpLG9dPXAudXNlU3RhdGUobnVsbCksW2wsc109cC51c2VTdGF0ZSgpLFthXT1sP09uLnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKGwpOlt2b2lkIDAsdm9pZCAwXSx1PWEmJigoTj1uPT1udWxsP3ZvaWQgMDpuW2FdKT09bnVsbD92b2lkIDA6Ti5zb3VyY2UpLGM9YSYmKChBPW49PW51bGw/dm9pZCAwOm5bYV0pPT1udWxsP3ZvaWQgMDpBLnNjaGVtYSksZD1PYmplY3QuZW50cmllcyhufHx7fSkuZmxhdE1hcCgoW2ssTV0pPT5NLmVycm9ycz9NLmVycm9ycy5mYXRhbD9NLmVycm9ycy5mYXRhbC5tYXAoRD0+KHtpZDprLC4uLkR9KSk6W106W10pLGY9T2JqZWN0LmVudHJpZXMobnx8e30pLmZsYXRNYXAoKFssa10pPT5rLmVycm9ycyYmay5lcnJvcnMudmFsaWRhdGlvbj9bay5lcnJvcnMudmFsaWRhdGlvbl06W10pO2lmKGQmJmQubGVuZ3RoPjApe2NvbnN0IGs9ZC5sZW5ndGg9PT0xP2RbMF0ubWVzc2FnZTpgTXVsdGlwbGUgZXJyb3JzIGRldGVjdGVkOgoke2QubWFwKChELGllKT0+YCR7aWUrMX0uIFske0QuaWR9XTogJHtELm1lc3NhZ2V9YCkuam9pbihgCmApfQoKU2hvd2luZyBzdGFjayB0cmFjZSBvZjogMS4gJHtkWzBdLm1lc3NhZ2V9YCxNPW5ldyBFcnJvcihrKTt0aHJvdyBNLnN0YWNrPWRbMF0uc3RhY2ssTX1mJiZmLmxlbmd0aD4wJiZjb25zb2xlLndhcm4oIlZhbCBlbmNvdW50ZXJlZCB2YWxpZGF0aW9uIGVycm9yczoiLGYpLHAudXNlRWZmZWN0KCgpPT57cyhlP2AvJHtlfWA6bCl9LFtlXSk7Y29uc3RbaCxnXT1wLnVzZVN0YXRlKG51bGwpO3AudXNlRWZmZWN0KCgpPT57dHJ5e25ldyBXZWJTb2NrZXQoYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbi5yZXBsYWNlKCJodHRwOi8vIiwid3M6Ly8iKX0vX25leHQvd2VicGFjay1obXJgKS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixNPT57bGV0IEQ7dHJ5e0Q9SlNPTi5wYXJzZShNLmRhdGEpfWNhdGNoe2NvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXJzZSBITVIiKX10eXBlb2YoRD09bnVsbD92b2lkIDA6RC5oYXNoKT09InN0cmluZyImJihEPT1udWxsP3ZvaWQgMDpELmFjdGlvbik9PT0iYnVpbHQiJiZnKEQuaGFzaCl9KX1jYXRjaChrKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBpbml0aWFsaXplIEhNUiIsayl9fSxbXSkscC51c2VFZmZlY3QoKCk9Pntjb25zb2xlLmxvZygiKFJlKS1mZXRjaGluZyBtb2R1bGVzIiksdC5nZXRUcmVlKHtwYXRjaDohMCxpbmNsdWRlU2NoZW1hOiEwLGluY2x1ZGVTb3VyY2U6ITB9KS50aGVuKGs9Pnt6by5pc09rKGspP3Ioay52YWx1ZS5tb2R1bGVzKToobygiQ291bGQgbm90IGxvYWQgbW9kdWxlczogIitrLmVycm9yLm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Ioay5lcnJvcikpfSl9LFtoXSk7Y29uc3QgbT1kNSh0KSx3PXF2KCksW3YseV09ZE0oKSx7cGF0Y2hlczpfLHNldFBhdGNoUmVzZXRJZDpTfT1jTShtLHQpLEU9cmUudXNlUmVmKG51bGwpLCQ9cC51c2VDYWxsYmFjayhrPT5hc3luYyBNPT57Y29uc3RbRCxpZV09T24uc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgoayksVj1hd2FpdCBNKE9uLmNyZWF0ZVBhdGNoSlNPTlBhdGgoaWUpKTtyZXR1cm4gdC5wb3N0UGF0Y2hlcyhELFYpLnRoZW4oSz0+e2lmKHpvLmlzRXJyKEspKXRocm93IEsuZXJyb3I7aWYoIWgpcmV0dXJuIFMoUj0+UisxKSx0LmdldFRyZWUoe3RyZWVQYXRoOkQscGF0Y2g6ITAsaW5jbHVkZVNjaGVtYTohMCxpbmNsdWRlU291cmNlOiEwfSkudGhlbihSPT57em8uaXNPayhSKT9yKFA9Pih7Li4uUCwuLi5SLnZhbHVlLm1vZHVsZXN9KSk6KG8oIkNvdWxkIG5vdCBsb2FkIG1vZHVsZXM6ICIrUi5lcnJvci5tZXNzYWdlKSxjb25zb2xlLmVycm9yKFIuZXJyb3IpKX0pfSkuY2F0Y2goSz0+e2NvbnNvbGUuZXJyb3IoSyl9KX0sW10pLEM9T2JqZWN0LmVudHJpZXMobnx8e30pLmZsYXRNYXAoKFtrLE1dKT0+TSE9bnVsbCYmTS5zY2hlbWEmJihNIT1udWxsJiZNLnNvdXJjZSk/W2tdOk0hPW51bGwmJk0uZXJyb3JzP1trXTpbXSk7cmV0dXJuIHguanN4KEVDLlByb3ZpZGVyLHt2YWx1ZTp7dGhlbWU6dixzZXRUaGVtZTp5LGFwaTp0LGVkaXRNb2RlOiJmdWxsIixzZXNzaW9uOm0saGlnaGxpZ2h0OiExLHNldEhpZ2hsaWdodDooKT0+e30sc2V0RWRpdE1vZGU6KCk9Pnt9LHNldFdpbmRvd1NpemU6KCk9Pnt9fSxjaGlsZHJlbjp4LmpzeHMoImRpdiIse2lkOiJ2YWwtZnVsbHNjcmVlbi1jb250YWluZXIiLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIGgtWzEwMF0gb3ZlcmZsb3ctaGlkZGVuIGZvbnQtc2VyaWYgYW50aWFsaWFzZWQgYmctYmFja2dyb3VuZCB0ZXh0LXByaW1hcnkiLCJkYXRhLW1vZGUiOnYsY2hpbGRyZW46W3guanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIC10cmFuc2xhdGUteS0xLzIgcmlnaHQtNCB0b3AtMS8yIHotb3ZlcmxheSIsY2hpbGRyZW46eC5qc3goYU0se2RpcmVjdGlvbjoidmVydGljYWwiLGFwaTp0LHBhdGNoZXM6XyxvbkNvbW1pdDooKT0+UyhrPT5rKzEpfSl9KSx4LmpzeCgiZGl2Iix7aWQ6InZhbC1mdWxsc2NyZWVuLWhvdmVyIixyZWY6RX0pLHguanN4KEprLlByb3ZpZGVyLHt2YWx1ZTp7aG92ZXJFbGVtOkU9PW51bGw/dm9pZCAwOkUuY3VycmVudH0sY2hpbGRyZW46eC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1wcmltYXJ5IixjaGlsZHJlbjp4LmpzeHMoVGEse2NoaWxkcmVuOlt4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJweC00IGgtWzUwcHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIixjaGlsZHJlbjp4LmpzeCgkayx7fSl9KSx4LmpzeCgkYSx7Y2xhc3NOYW1lOiJweC00IixjaGlsZHJlbjpuP3guanN4KE1ELHtzZWxlY3RlZFBhdGg6bCxwYXRoczpDLHNldFNlbGVjdGVkTW9kdWxlSWQ6az0+e3coayl9fSk6IWkmJnguanN4KCJkaXYiLHtjbGFzc05hbWU6InB5LTQiLGNoaWxkcmVuOiJMb2FkaW5nLi4uIn0pfSkseC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktc3RhcnQgaC1bNTBweF0gZ2FwLTIgZm9udC1zZXJpZiB0ZXh0LXhzIixjaGlsZHJlbjpbeC5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntoaXN0b3J5LmJhY2soKX0sY2hpbGRyZW46eC5qc3gob1Ise30pfSkseC5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLGRpcjoicnRsIix0aXRsZTpsLGNoaWxkcmVuOnguanN4KFZvLHtjaGlsZHJlbjpsfHwiLyJ9KX0pXX0pLHguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQiLGNoaWxkcmVuOltpJiZ4LmpzeHMoImRpdiIse2NsYXNzTmFtZToibWF4LXcteGwgcC00IHRleHQtbGcgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkVSUk9SOiAiLGldfSksbS5zdGF0dXM9PT0ic3VjY2VzcyImJm0uZGF0YS5tb2RlPT09InVuYXV0aG9yaXplZCImJnguanN4KCJkaXYiLHtjbGFzc05hbWU6Im1heC13LXhsIHAtNCB0ZXh0LWxnIGJnLWRlc3RydWN0aXZlIHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCIsY2hpbGRyZW46Ik5vdCBhdXRob3JpemVkIn0pLG0uc3RhdHVzPT09InN1Y2Nlc3MiJiZtLmRhdGEubW9kZSE9PSJ1bmF1dGhvcml6ZWQiJiZuJiZsJiZhJiZ1IT09dm9pZCAwJiZjIT09dm9pZCAwJiZ4LmpzeChYay5Qcm92aWRlcix7dmFsdWU6bixjaGlsZHJlbjp4LmpzeCgkRCx7cGF0aDpsLHNvdXJjZTp1LHNjaGVtYTpjLHNldFNlbGVjdGVkUGF0aDpzLGluaXRPblN1Ym1pdDokfSl9KV19KV19KX0pfSldfSl9KX0sSms9cmUuY3JlYXRlQ29udGV4dCh7aG92ZXJFbGVtOm51bGx9KSxiRD0oKT0+cmUudXNlQ29udGV4dChKayk7ZnVuY3Rpb24gJEQoe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6aX0pe2NvbnN0WyxvXT1Pbi5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aCh0KSxsPU9uLnJlc29sdmVQYXRoKG8sZSxuKTtpZighbCl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlc29sdmUgbW9kdWxlOiAiK3QpO3JldHVybiB4LmpzeChleSx7cGF0aDp0LHNvdXJjZTpsLnNvdXJjZSxzY2hlbWE6bC5zY2hlbWEsc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0OmksdG9wOiEwfSl9ZnVuY3Rpb24gZXkoe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixmaWVsZDppLGluaXRPblN1Ym1pdDpvLHRvcDpsfSl7aWYobi5vcHQpcmV0dXJuIHguanN4KFBELHtwYXRoOnQsc291cmNlOmUsc2NoZW1hOm4sZmllbGQ6aSxpbml0T25TdWJtaXQ6byxzZXRTZWxlY3RlZFBhdGg6cn0pO2lmKGU9PT1udWxsKXJldHVybiB4LmpzeChlYix7c291cmNlOmUsc2NoZW1hOm4scGF0aDp0LHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDpvfSk7aWYobi50eXBlPT09Im9iamVjdCIpcmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8S2woZSk/eC5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIkVSUk9SOiBleHBlY3RlZCBvYmplY3QsIGJ1dCBmb3VuZCAiLHR5cGVvZiBlXX0pOnguanN4KFFrLHtzb3VyY2U6ZSxwYXRoOnQsc2NoZW1hOm4saW5pdE9uU3VibWl0Om8sc2V0U2VsZWN0ZWRQYXRoOnIsdG9wOmx9KTtpZihuLnR5cGU9PT0iYXJyYXkiKXJldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fCFLbChlKT94LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIGFycmF5LCBidXQgZm91bmQgIix0eXBlb2YgZV19KTp4LmpzeHMoImRpdiIse2NoaWxkcmVuOltpP3guanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtbGVmdCIsY2hpbGRyZW46aX0pOnguanN4KCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIG1heC13LVszMDBweF0gdGV4dC1sZWZ0Iix0aXRsZTp0LGRpcjoicnRsIixjaGlsZHJlbjp4LmpzeChWbyx7Y2hpbGRyZW46dH0pfSkseC5qc3gocWsse3NvdXJjZTplLHBhdGg6dCxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pXX0pO2lmKG4udHlwZT09PSJyZWNvcmQiKXJldHVybiB0eXBlb2YgZSE9Im9iamVjdCI/eC5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIkVSUk9SOiBleHBlY3RlZCBvYmplY3QgZm9yICIsbi50eXBlLCIsIGJ1dCBmb3VuZCAiLHR5cGVvZiBlXX0pOktsKGUpP3guanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZGlkIG5vdCBleHBlY3QgYXJyYXkgZm9yICIsbi50eXBlXX0pOnguanN4cygiZGl2Iix7Y2hpbGRyZW46W2k/eC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjppfSk6eC5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOnQsZGlyOiJydGwiLGNoaWxkcmVuOnguanN4KFZvLHtjaGlsZHJlbjp0fSl9KSx4LmpzeChORCx7c291cmNlOmUscGF0aDp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSldfSk7aWYoKG49PW51bGw/dm9pZCAwOm4udHlwZSk9PT0idW5pb24iKXtpZihuLmtleSYmdHlwZW9mIGU9PSJvYmplY3QiJiYhS2woZSkpcmV0dXJuIHguanN4KFRELHtmaWVsZDppLHRhZzpuLmtleSxzb3VyY2U6ZSxwYXRoOnQsc2NoZW1hOm4saW5pdE9uU3VibWl0Om8sc2V0U2VsZWN0ZWRQYXRoOnIsdG9wOmx9KX1lbHNlIGlmKChuPT1udWxsP3ZvaWQgMDpuLnR5cGUpPT09ImxpdGVyYWwiKXJldHVybiB4LmpzeCh4LkZyYWdtZW50LHt9KTtyZXR1cm4geC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InB5LTIgZ2FwLXktNCIsY2hpbGRyZW46W2k/eC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjppfSk6eC5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOnQsZGlyOiJydGwiLGNoaWxkcmVuOnguanN4KFZvLHtjaGlsZHJlbjp0fSl9KSx4LmpzeChiayx7cGF0aDp0LGRpc2FibGVkOiExLHNvdXJjZTplLHNjaGVtYTpuLG9uU3VibWl0Om8odCl9KV19KX1mdW5jdGlvbiBURCh7dGFnOnQsZmllbGQ6ZSxwYXRoOm4sc291cmNlOnIsc2NoZW1hOmksc2V0U2VsZWN0ZWRQYXRoOm8saW5pdE9uU3VibWl0OmwsdG9wOnN9KXtjb25zdFthLHVdPXAudXNlU3RhdGUobnVsbCksW2MsZF09cC51c2VTdGF0ZShudWxsKSxmPWkuaXRlbXMuZmxhdE1hcChtPT57aWYobS50eXBlPT09Im9iamVjdCImJm0uaXRlbXNbdF0pe2NvbnN0IHc9bS5pdGVtc1t0XTtpZih3LnR5cGU9PT0ibGl0ZXJhbCIpcmV0dXJuW3cudmFsdWVdfXJldHVybltdfSk7cC51c2VFZmZlY3QoKCk9PntpZihhKXtjb25zdCBtPXJbdF0sdz1pLml0ZW1zLmZpbmQodj0+e2lmKHYudHlwZT09PSJvYmplY3QiJiZ2Lml0ZW1zW3RdKXtjb25zdCB5PXYuaXRlbXNbdF07cmV0dXJuIHkudHlwZT09PSJsaXRlcmFsIj95LnZhbHVlPT09YTohMX19KTttJiZ0eXBlb2YgbT09InN0cmluZyImJnc/ZCh7c291cmNlOnIsc2NoZW1hOnd9KTp3P2Qoe3NjaGVtYTp3fSk6KGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBmaW5kIHNvdXJjZSBvciBzY2hlbWEgb2Yga2V5IixhLHIsaSksZChudWxsKSl9ZWxzZXtjb25zdCBtPXI9PW51bGw/dm9pZCAwOnJbdF07bSYmdHlwZW9mIG09PSJzdHJpbmciJiZ1KG0pfX0sW2Escix0LGksZl0pLGYubGVuZ3RoIT09aS5pdGVtcy5sZW5ndGgmJmNvbnNvbGUud2FybigiTm90IGFsbCBpdGVtcyBoYXZlIHRhZzoiLHQpO2NvbnN0IGg9ITEsZz1sKG4pO3JldHVybiB4LmpzeHMocGwse2NsYXNzTmFtZTpQbigiZmxleCBmbGV4LWNvbCBnYXAteS00Iix7ImJvcmRlci1sLTIgYm9yZGVyLWJvcmRlciBwbC02Ijohc30pLGNoaWxkcmVuOltlP3guanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQtbGVmdCIsY2hpbGRyZW46ZX0pOnguanN4KCJkaXYiLHtjbGFzc05hbWU6InRydW5jYXRlIG1heC13LVszMDBweF0gdGV4dC1sZWZ0Iix0aXRsZTpuLGRpcjoicnRsIixjaGlsZHJlbjp4LmpzeChWbyx7Y2hpbGRyZW46bn0pfSkseC5qc3hzKENrLHt2YWx1ZTphPz92b2lkIDAsZGlzYWJsZWQ6aCxvblZhbHVlQ2hhbmdlOm09Pnt1KG0pfSxjaGlsZHJlbjpbeC5qc3goWnYse2NoaWxkcmVuOnguanN4KGtrLHtwbGFjZWhvbGRlcjoiU2VsZWN0IHR5cGUifSl9KSx4LmpzeChHdix7Y2hpbGRyZW46Zi5tYXAobT0+eC5qc3goWXYse3ZhbHVlOm0udG9TdHJpbmcoKSxjaGlsZHJlbjptLnRvU3RyaW5nKCl9LG0pKX0pXX0pLHguanN4KFVzLHtsb2FkaW5nOmgsZW5hYmxlZDohMSxvbkNsaWNrOigpPT5nKGFzeW5jKCk9PltdKX0pLGMmJnguanN4KGV5LHtwYXRoOm4sc291cmNlOmMuc291cmNlPz9udWxsLHNjaGVtYTpjLnNjaGVtYSxzZXRTZWxlY3RlZFBhdGg6byxpbml0T25TdWJtaXQ6bCx0b3A6c30pXX0sbil9ZnVuY3Rpb24gUWsoe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6aSx0b3A6b30pe3JldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOlBuKCJmbGV4IGZsZXgtY29sIGdhcC15LTEiLHsiYm9yZGVyLWwtMiBib3JkZXItYm9yZGVyIHBsLTYiOiFvfSksY2hpbGRyZW46T2JqZWN0LmVudHJpZXMobi5pdGVtcykubWFwKChbbCxzXSk9Pntjb25zdCBhPU51KHQsbCk7cmV0dXJuIHguanN4KGV5LHtwYXRoOmEsc291cmNlOihlPT1udWxsP3ZvaWQgMDplW2xdKT8/bnVsbCxzY2hlbWE6cyxzZXRTZWxlY3RlZFBhdGg6cixmaWVsZDpsLGluaXRPblN1Ym1pdDppfSxhKX0pfSx0KX1mdW5jdGlvbiBORCh7cGF0aDp0LHNvdXJjZTplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSl7Y29uc3QgaT1xdigpO3JldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC00IHAtMiIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXMoZSkubWFwKChbbyxsXSk9Pntjb25zdCBzPU51KHQsbyk7cmV0dXJuIHguanN4KCJidXR0b24iLHtvbkNsaWNrOigpPT57cihzKSxpKHMpfSxjaGlsZHJlbjp4LmpzeChSRCx7cmVjb3JkS2V5Om8scGF0aDpzLHNvdXJjZTpsLHNjaGVtYTpuLml0ZW19KX0scyl9KX0sdCl9Y29uc3QgWG09MTcwO2Z1bmN0aW9uIFJEKHtyZWNvcmRLZXk6dCxwYXRoOmUsc291cmNlOm4sc2NoZW1hOnJ9KXtjb25zdCBpPXJlLnVzZVJlZihudWxsKSxbbyxsXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntpLmN1cnJlbnQmJmkuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ+PVhtJiZsKCEwKX0sW10pLHguanN4cyhYdix7cmVmOmksY2xhc3NOYW1lOiJyZWxhdGl2ZSBweC00IHB0LTIgcGItNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGdhcC15LTIiLHN0eWxlOnttYXhIZWlnaHQ6WG19LGNoaWxkcmVuOlt4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwYi00IGZvbnQtc2VyaWYgdGV4dC1sZWZ0IHRleHQtYWNjZW50IixjaGlsZHJlbjp0fSkseC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC14cyIsY2hpbGRyZW46eC5qc3godHkse3BhdGg6ZSxzb3VyY2U6bixzY2hlbWE6cn0pfSksbyYmeC5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHctZnVsbCBoLVsyMHB4XSBiZy1ncmFkaWVudC10by1iIGZyb20tdHJhbnNwYXJlbnQgdG8tYmFja2dyb3VuZCJ9KV19LGUpfWZ1bmN0aW9uIHFrKHtwYXRoOnQsc291cmNlOmUsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KXtjb25zdCBpPXF2KCk7cmV0dXJuIHguanN4KHBsLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIHBiLTgiLGNoaWxkcmVuOmUubWFwKChvLGwpPT57Y29uc3Qgcz1OdSh0LGwpO3JldHVybiB4LmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e3IocyksaShzKX0sY2hpbGRyZW46eC5qc3goT0Qse2luZGV4OmwscGF0aDpzLHNvdXJjZTpvLHNjaGVtYTpuLml0ZW19LHMpfSxzKX0pfSx0KX1jb25zdCB3Xz1YbTtmdW5jdGlvbiBPRCh7aW5kZXg6dCxwYXRoOmUsc291cmNlOm4sc2NoZW1hOnJ9KXtjb25zdCBpPXJlLnVzZVJlZihudWxsKSxbbyxsXT1wLnVzZVN0YXRlKCExKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9PntpLmN1cnJlbnQmJmkuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ+PXdfJiZsKCEwKX0sW10pLHguanN4cyhYdix7cmVmOmksY2xhc3NOYW1lOiJyZWxhdGl2ZSBweC00IHB0LTIgcGItNCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyIGdhcC15LTIiLHN0eWxlOnttYXhIZWlnaHQ6d199LGNoaWxkcmVuOlt4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwYi00IGZvbnQtc2VyaWYgdGV4dC1sZWZ0IHVwcGVyY2FzZSB0ZXh0LWFjY2VudCIsY2hpbGRyZW46dCsxPDEwP2AwJHt0KzF9YDp0KzF9KSx4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIixjaGlsZHJlbjp4LmpzeCh0eSx7cGF0aDplLHNvdXJjZTpuLHNjaGVtYTpyfSl9KSxvJiZ4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgdy1mdWxsIGgtWzIwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS10cmFuc3BhcmVudCB0by1iYWNrZ3JvdW5kIn0pXX0pfWZ1bmN0aW9uIE51KHQsZSl7Y29uc3Qgbj1Pbi5jcmVhdGVWYWxQYXRoT2ZJdGVtKHQsZSk7aWYoIW4pdGhyb3cgRXJyb3IoYENvdWxkIG5vdCBjcmVhdGUgdmFsIHBhdGg6ICR7dH0gb2YgJHtlPT1udWxsP3ZvaWQgMDplLnRvU3RyaW5nKCl9YCk7cmV0dXJuIG59ZnVuY3Rpb24gdHkoe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bn0pe2NvbnN0W3IsaV09cC51c2VTdGF0ZShudWxsKSx7aG92ZXJFbGVtOm99PWJEKCk7aWYobi50eXBlPT09Im9iamVjdCIpcmV0dXJuIHguanN4KCJkaXYiLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVttaW4tY29udGVudF8xZnJdIGdhcC0yIHRleHQtbGVmdCIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXMobi5pdGVtcykubWFwKChbbF0pPT54LmpzeHMocC5GcmFnbWVudCx7Y2hpbGRyZW46W3guanN4cygic3BhbiIse2NsYXNzTmFtZToidGV4dC1tdXRlZCIsY2hpbGRyZW46W2wsIjoiXX0pLHguanN4KCJzcGFuIix7Y2hpbGRyZW46eC5qc3godHkse3NvdXJjZTooZT09bnVsbD92b2lkIDA6ZVtsXSk/P251bGwsc2NoZW1hOm4uaXRlbXNbbF0scGF0aDpOdSh0LGwpfSl9KV19LE51KHQsbCkpKX0sdCk7aWYobi50eXBlPT09ImFycmF5IilyZXR1cm4gZT09PW51bGw/eC5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSx0KTpBcnJheS5pc0FycmF5KGUpP3guanN4cygic3BhbiIse2NoaWxkcmVuOlt4LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOmUubGVuZ3RofSkseC5qc3goInNwYW4iLHtjaGlsZHJlbjplLmxlbmd0aD09PTE/IiBpdGVtIjoiIGl0ZW1zIn0pXX0sdCk6eC5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LTIgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiVW5rbm93biBsZW5ndGgifSx0KTtpZihuLnR5cGU9PT0icmljaHRleHQiKXJldHVybiBlPT09bnVsbD94LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LHQpOnR5cGVvZiBlIT0ib2JqZWN0Ij94LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46WyJFUlJPUjogIix0eXBlb2YgZSwiIG5vdCBhbiBvYmplY3QiXX0sdCk6IShubiBpbiBlKXx8ZVtubl0hPT0icmljaHRleHQiP3guanN4KCJkaXYiLHtjbGFzc05hbWU6InAtNCB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOiJFUlJPUjogb2JqZWN0IGlzIG5vdCByaWNodGV4dCJ9LHQpOnguanN4KExELHtjaGlsZHJlbjpERShlKX0sdCk7aWYobi50eXBlPT09InN0cmluZyIpcmV0dXJuIGU9PT1udWxsP3guanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sdCk6eC5qc3goInNwYW4iLHtjaGlsZHJlbjplfSk7aWYobi50eXBlPT09ImltYWdlIil7aWYoZT09PW51bGwpcmV0dXJuIHguanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sdCk7aWYodHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG5vdCBhbiBvYmplY3QifSx0KTtpZighKFJuIGluIGUpfHx0eXBlb2YgZVtSbl0hPSJzdHJpbmciKXJldHVybiB4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjoiRVJST1I6IG9iamVjdCBpcyBub3QgYW4gaW1hZ2UifSx0KTtjb25zdCBsPU9uLmNvbnZlcnRGaWxlU291cmNlKGUpLnVybDtyZXR1cm4geC5qc3hzKCJzcGFuIix7b25Nb3VzZU92ZXI6cz0+e2koe3g6cy5jbGllbnRYLHk6cy5jbGllbnRZfSl9LG9uTW91c2VMZWF2ZTooKT0+e2kobnVsbCl9LGNsYXNzTmFtZToicmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAtMSIsY2hpbGRyZW46W3guanN4KCJhIix7aHJlZjpsLGNsYXNzTmFtZToib3ZlcmZsb3ctaGlkZGVuIHVuZGVybGluZSB0cnVuY2F0ZSAiLGNoaWxkcmVuOmVbUm5dfSksciYmbyYmWXIuY3JlYXRlUG9ydGFsKHguanN4KCJpbWciLHtjbGFzc05hbWU6ImFic29sdXRlIHotWzVdIG1heC13LVsxMHZ3XSIsc3R5bGU6e2xlZnQ6ci54KzEwLHRvcDpyLnkrMTB9LHNyYzpsfSksbyldfSx0KX1lbHNle2lmKG4udHlwZT09PSJib29sZWFuIilyZXR1cm4gZT09PW51bGw/eC5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSx0KTp4LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOmU/InRydWUiOiJmYWxzZSJ9LHQpO2lmKG4udHlwZT09PSJudW1iZXIiKXJldHVybiBlPT09bnVsbD94LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LHQpOnguanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46ZS50b1N0cmluZygpfSk7aWYobi50eXBlPT09ImtleU9mIilyZXR1cm4gZT09PW51bGw/eC5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSx0KTp4LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOmUudG9TdHJpbmcoKX0sdCl9cmV0dXJuIHguanN4cygiZGl2Iix7Y2hpbGRyZW46WyJUT0RPOiAiLG4udHlwZV19LHQpfWZ1bmN0aW9uIFBEKHtwYXRoOnQsc291cmNlOmUsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0OmksZmllbGQ6b30pe2NvbnN0W2wsc109cC51c2VTdGF0ZShlIT09bnVsbCkse2VkaXRNb2RlOmF9PWpmKCk7cmV0dXJuIHguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGdhcC15LTIiLGNoaWxkcmVuOlt4LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBnYXAteC00IixjaGlsZHJlbjpbYT09PSJmdWxsIiYmeC5qc3goT2sse2NoZWNrZWQ6bCxvbkNsaWNrOigpPT57cyh1PT4hdSl9fSkseC5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOnQsZGlyOiJydGwiLGNoaWxkcmVuOm98fHguanN4KFZvLHtjaGlsZHJlbjp0fSl9KV19KSxsJiZ4LmpzeChlYix7c291cmNlOmUsc2NoZW1hOm4scGF0aDp0LHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDppfSldfSx0KX1mdW5jdGlvbiBlYih7c291cmNlOnQscGF0aDplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDppfSl7aWYobi50eXBlPT09ImFycmF5Iil7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiYodD09PW51bGx8fEtsKHQpKSlyZXR1cm4geC5qc3gocWsse3NvdXJjZTp0PT09bnVsbD9bXTp0LHBhdGg6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pfWVsc2UgaWYobi50eXBlPT09Im9iamVjdCIpe2lmKHR5cGVvZiB0PT0ib2JqZWN0IiYmKHQ9PT1udWxsfHwhS2wodCkpKXJldHVybiB4LmpzeChRayx7c291cmNlOnQscGF0aDplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDppfSl9ZWxzZSBpZihuLnR5cGU9PT0icmljaHRleHQifHxuLnR5cGU9PT0ic3RyaW5nInx8bi50eXBlPT09ImltYWdlInx8bi50eXBlPT09Im51bWJlciJ8fG4udHlwZT09PSJrZXlPZiIpcmV0dXJuIHguanN4KGJrLHtwYXRoOmUsZGlzYWJsZWQ6ITEsc291cmNlOnQsc2NoZW1hOm4sb25TdWJtaXQ6aShlKX0sZSk7cmV0dXJuIHguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjpbIkVSUk9SOiB1bmV4cGVjdGVkIHNvdXJjZSB0eXBlICIsdHlwZW9mIHQsIiBmb3Igc2NoZW1hIHR5cGUiLCIgIixuLnR5cGVdfSl9ZnVuY3Rpb24gS2wodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gQUQodCl7Y29uc3QgZT17fTtyZXR1cm4gdC5mb3JFYWNoKG49Pntjb25zdCByPW4uc3BsaXQoIi8iKS5maWx0ZXIoaT0+aSE9PSIiKTtpZihyLmxlbmd0aD09PTEpZVsiIl18fChlWyIiXT1bXSksZVsiIl0ucHVzaChyWzBdKTtlbHNlIGlmKHIubGVuZ3RoPjEpe2NvbnN0IGk9ci5zbGljZSgwLHIubGVuZ3RoLTEpLmpvaW4oIi8iKSxvPXIuc2xpY2UoLTEpWzBdO2VbaV18fChlW2ldPVtdKSxlW2ldLnB1c2gobyl9fSksZX1mdW5jdGlvbiBNRCh7c2VsZWN0ZWRQYXRoOnQscGF0aHM6ZSxzZXRTZWxlY3RlZE1vZHVsZUlkOm59KXtjb25zdCByPUFEKGUpLGk9dCYmT24uc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgodClbMF07cmV0dXJuIHguanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgdy1mdWxsIHB5LTIgdGV4dC14cyIsY2hpbGRyZW46T2JqZWN0LmVudHJpZXMocikubWFwKChbbyxsXSk9PnguanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJweC00IHB5LTIiLGNoaWxkcmVuOltvJiZ4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmb250LWJvbGQgdHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOm8sY2hpbGRyZW46eC5qc3goVm8se2NoaWxkcmVuOm99KX0pLHguanN4KCJkaXYiLHtjbGFzc05hbWU6UG4oeyJmbGV4IGZsZXgtY29sIHB5LTIganVzdGlmeS1zdGFydCBpdGVtcy1zdGFydCI6ISFvfSksY2hpbGRyZW46bC5tYXAocz0+e2NvbnN0IGE9YC8ke299LyR7c31gO3JldHVybiB4LmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOlBuKCJibG9jayBweC0yIHB5LTEgcm91bmRlZC1mdWxsIix7ImJnLWFjY2VudCB0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIjppPT09YX0pLG9uQ2xpY2s6KCk9PntuKGEpfSxjaGlsZHJlbjpzfSxhKX0pfSldfSxgLyR7b31gKSl9KX1jb25zdCBTXz17dGFnczp7aDE6ImZvbnQtYm9sZCIsaDI6ImZvbnQtYm9sZCIsaDM6ImZvbnQtYm9sZCIsaDQ6ImZvbnQtYm9sZCIsaDU6ImZvbnQtYm9sZCIsaDY6ImZvbnQtYm9sZCIscDoiIn0sY2xhc3Nlczp7Ym9sZDoiZm9udC1ib2xkIixpdGFsaWM6Iml0YWxpYyIsbGluZVRocm91Z2g6ImxpbmUtdGhyb3VnaCJ9fTtmdW5jdGlvbiBMRCh7Y2hpbGRyZW46dH0pe2NvbnN0IGU9dDtmdW5jdGlvbiBuKG8sbCl7Y29uc3Qgcz1TXy50YWdzW29dO3JldHVybiBzJiZsP1tsLHNdLmpvaW4oIiAiKTpzfHxsfWZ1bmN0aW9uIHIobyxsKXtjb25zdCBzPVNfLmNsYXNzZXNbb107cmV0dXJuIHMmJmw/W2wsc10uam9pbigiICIpOnN8fGx9ZnVuY3Rpb24gaShvLGwpe3ZhciB1LGM7aWYodHlwZW9mIG89PSJzdHJpbmciKXJldHVybiBvO2lmKG8udGFnPT09InAiKXJldHVybiB4LmpzeCgicCIse2NsYXNzTmFtZTpuKCJwIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImltZyIpcmV0dXJuIHguanN4KCJpbWciLHtjbGFzc05hbWU6bigiaW1nIiksc3JjOm8uc3JjfSxsKTtpZihvLnRhZz09PSJ1bCIpcmV0dXJuIHguanN4KCJ1bCIse2NsYXNzTmFtZTpuKCJ1bCIpLGNoaWxkcmVuOm8uY2hpbGRyZW4ubWFwKChkLGYpPT5pKGQsZikpfSxsKTtpZihvLnRhZz09PSJvbCIpcmV0dXJuIHguanN4KCJvbCIse2NsYXNzTmFtZTpuKCJvbCIpLGNoaWxkcmVuOm8uY2hpbGRyZW4ubWFwKChkLGYpPT5pKGQsZikpfSxsKTtpZihvLnRhZz09PSJsaSIpcmV0dXJuIHguanN4KCJsaSIse2NsYXNzTmFtZTpuKCJsaSIpLGNoaWxkcmVuOm8uY2hpbGRyZW4ubWFwKChkLGYpPT5pKGQsZikpfSxsKTtpZihvLnRhZz09PSJzcGFuIilyZXR1cm4geC5qc3goInNwYW4iLHtjbGFzc05hbWU6by5jbGFzc2VzLm1hcChkPT57c3dpdGNoKGQpe2Nhc2UiYm9sZCI6cmV0dXJuIHIoImJvbGQiKTtjYXNlImxpbmUtdGhyb3VnaCI6cmV0dXJuIHIoImxpbmVUaHJvdWdoIik7Y2FzZSJpdGFsaWMiOnJldHVybiByKCJpdGFsaWMiKX19KS5qb2luKCIgIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImgxIilyZXR1cm4geC5qc3goImgxIix7Y2xhc3NOYW1lOm4oImgxIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImgyIilyZXR1cm4geC5qc3goImgyIix7Y2xhc3NOYW1lOm4oImgyIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImgzIilyZXR1cm4geC5qc3goImgzIix7Y2xhc3NOYW1lOm4oImgzIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09Img0IilyZXR1cm4geC5qc3goImg0Iix7Y2xhc3NOYW1lOm4oImg0IiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09Img1IilyZXR1cm4geC5qc3goImg1Iix7Y2xhc3NOYW1lOm4oImg1IiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09Img2IilyZXR1cm4geC5qc3goImg2Iix7Y2xhc3NOYW1lOm4oImg2IiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImJyIilyZXR1cm4geC5qc3goImJyIix7fSxsKTtpZihvLnRhZz09PSJhIilyZXR1cm4geC5qc3goImEiLHtocmVmOm8uaHJlZixjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7Y29uc29sZS5lcnJvcigiVW5rbm93biB0YWciLG8udGFnKTtjb25zdCBhPW8udGFnO3JldHVybiBhIT1udWxsJiZhLnRhZz9yZS5jcmVhdGVFbGVtZW50KGEudGFnLHtrZXk6bCxjbGFzc05hbWU6KHU9YS5jbGFzcyk9PW51bGw/dm9pZCAwOnUuam9pbigiICIpLGNoaWxkcmVuOihjPWEuY2hpbGRyZW4pPT1udWxsP3ZvaWQgMDpjLm1hcChpKX0pOm51bGx9cmV0dXJuIHguanN4KCJzcGFuIix7ImRhdGEtdmFsLXBhdGgiOmUudmFsUGF0aCxjaGlsZHJlbjplLmNoaWxkcmVuLm1hcCgobyxsKT0+aShvLGwpKX0pfWNvbnN0IEREPXAuY3JlYXRlQ29udGV4dChudWxsKSxRaD17ZGlkQ2F0Y2g6ITEsZXJyb3I6bnVsbH07Y2xhc3MgSUQgZXh0ZW5kcyBwLkNvbXBvbmVudHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeT10aGlzLnJlc2V0RXJyb3JCb3VuZGFyeS5iaW5kKHRoaXMpLHRoaXMuc3RhdGU9UWh9c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtyZXR1cm57ZGlkQ2F0Y2g6ITAsZXJyb3I6ZX19cmVzZXRFcnJvckJvdW5kYXJ5KCl7Y29uc3R7ZXJyb3I6ZX09dGhpcy5zdGF0ZTtpZihlIT09bnVsbCl7Zm9yKHZhciBuLHIsaT1hcmd1bWVudHMubGVuZ3RoLG89bmV3IEFycmF5KGkpLGw9MDtsPGk7bCsrKW9bbF09YXJndW1lbnRzW2xdOyhuPShyPXRoaXMucHJvcHMpLm9uUmVzZXQpPT09bnVsbHx8bj09PXZvaWQgMHx8bi5jYWxsKHIse2FyZ3M6byxyZWFzb246ImltcGVyYXRpdmUtYXBpIn0pLHRoaXMuc2V0U3RhdGUoUWgpfX1jb21wb25lbnREaWRDYXRjaChlLG4pe3ZhciByLGk7KHI9KGk9dGhpcy5wcm9wcykub25FcnJvcik9PT1udWxsfHxyPT09dm9pZCAwfHxyLmNhbGwoaSxlLG4pfWNvbXBvbmVudERpZFVwZGF0ZShlLG4pe2NvbnN0e2RpZENhdGNoOnJ9PXRoaXMuc3RhdGUse3Jlc2V0S2V5czppfT10aGlzLnByb3BzO2lmKHImJm4uZXJyb3IhPT1udWxsJiZqRChlLnJlc2V0S2V5cyxpKSl7dmFyIG8sbDsobz0obD10aGlzLnByb3BzKS5vblJlc2V0KT09PW51bGx8fG89PT12b2lkIDB8fG8uY2FsbChsLHtuZXh0OmkscHJldjplLnJlc2V0S2V5cyxyZWFzb246ImtleXMifSksdGhpcy5zZXRTdGF0ZShRaCl9fXJlbmRlcigpe2NvbnN0e2NoaWxkcmVuOmUsZmFsbGJhY2tSZW5kZXI6bixGYWxsYmFja0NvbXBvbmVudDpyLGZhbGxiYWNrOml9PXRoaXMucHJvcHMse2RpZENhdGNoOm8sZXJyb3I6bH09dGhpcy5zdGF0ZTtsZXQgcz1lO2lmKG8pe2NvbnN0IGE9e2Vycm9yOmwscmVzZXRFcnJvckJvdW5kYXJ5OnRoaXMucmVzZXRFcnJvckJvdW5kYXJ5fTtpZihwLmlzVmFsaWRFbGVtZW50KGkpKXM9aTtlbHNlIGlmKHR5cGVvZiBuPT0iZnVuY3Rpb24iKXM9bihhKTtlbHNlIGlmKHIpcz1wLmNyZWF0ZUVsZW1lbnQocixhKTtlbHNlIHRocm93IGx9cmV0dXJuIHAuY3JlYXRlRWxlbWVudChERC5Qcm92aWRlcix7dmFsdWU6e2RpZENhdGNoOm8sZXJyb3I6bCxyZXNldEVycm9yQm91bmRhcnk6dGhpcy5yZXNldEVycm9yQm91bmRhcnl9fSxzKX19ZnVuY3Rpb24gakQoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJmFyZ3VtZW50c1swXSE9PXZvaWQgMD9hcmd1bWVudHNbMF06W10sZT1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06W107cmV0dXJuIHQubGVuZ3RoIT09ZS5sZW5ndGh8fHQuc29tZSgobixyKT0+IU9iamVjdC5pcyhuLGVbcl0pKX1jb25zdCB0Yj0iQ29sbGFwc2libGUiLFt6RCxuYl09YWwodGIpLFtGRCxueV09ekQodGIpLEJEPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVDb2xsYXBzaWJsZTpuLG9wZW46cixkZWZhdWx0T3BlbjppLGRpc2FibGVkOm8sb25PcGVuQ2hhbmdlOmwsLi4uc309dCxbYT0hMSx1XT1fcyh7cHJvcDpyLGRlZmF1bHRQcm9wOmksb25DaGFuZ2U6bH0pO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoRkQse3Njb3BlOm4sZGlzYWJsZWQ6byxjb250ZW50SWQ6RmYoKSxvcGVuOmEsb25PcGVuVG9nZ2xlOnAudXNlQ2FsbGJhY2soKCk9PnUoYz0+IWMpLFt1XSl9LHAuY3JlYXRlRWxlbWVudChLZS5kaXYsb2UoeyJkYXRhLXN0YXRlIjpyeShhKSwiZGF0YS1kaXNhYmxlZCI6bz8iIjp2b2lkIDB9LHMse3JlZjplfSkpKX0pLFVEPSJDb2xsYXBzaWJsZVRyaWdnZXIiLFdEPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVDb2xsYXBzaWJsZTpuLC4uLnJ9PXQsaT1ueShVRCxuKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KEtlLmJ1dHRvbixvZSh7dHlwZToiYnV0dG9uIiwiYXJpYS1jb250cm9scyI6aS5jb250ZW50SWQsImFyaWEtZXhwYW5kZWQiOmkub3Blbnx8ITEsImRhdGEtc3RhdGUiOnJ5KGkub3BlbiksImRhdGEtZGlzYWJsZWQiOmkuZGlzYWJsZWQ/IiI6dm9pZCAwLGRpc2FibGVkOmkuZGlzYWJsZWR9LHIse3JlZjplLG9uQ2xpY2s6bnQodC5vbkNsaWNrLGkub25PcGVuVG9nZ2xlKX0pKX0pLHJiPSJDb2xsYXBzaWJsZUNvbnRlbnQiLFZEPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT10LGk9bnkocmIsdC5fX3Njb3BlQ29sbGFwc2libGUpO3JldHVybiBwLmNyZWF0ZUVsZW1lbnQoYnMse3ByZXNlbnQ6bnx8aS5vcGVufSwoe3ByZXNlbnQ6b30pPT5wLmNyZWF0ZUVsZW1lbnQoSEQsb2Uoe30scix7cmVmOmUscHJlc2VudDpvfSkpKX0pLEhEPXAuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVDb2xsYXBzaWJsZTpuLHByZXNlbnQ6cixjaGlsZHJlbjppLC4uLm99PXQsbD1ueShyYixuKSxbcyxhXT1wLnVzZVN0YXRlKHIpLHU9cC51c2VSZWYobnVsbCksYz1zdChlLHUpLGQ9cC51c2VSZWYoMCksZj1kLmN1cnJlbnQsaD1wLnVzZVJlZigwKSxnPWguY3VycmVudCxtPWwub3Blbnx8cyx3PXAudXNlUmVmKG0pLHY9cC51c2VSZWYoKTtyZXR1cm4gcC51c2VFZmZlY3QoKCk9Pntjb25zdCB5PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dy5jdXJyZW50PSExKTtyZXR1cm4oKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUoeSl9LFtdKSxWbigoKT0+e2NvbnN0IHk9dS5jdXJyZW50O2lmKHkpe3YuY3VycmVudD12LmN1cnJlbnR8fHt0cmFuc2l0aW9uRHVyYXRpb246eS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24sYW5pbWF0aW9uTmFtZTp5LnN0eWxlLmFuaW1hdGlvbk5hbWV9LHkuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPSIwcyIseS5zdHlsZS5hbmltYXRpb25OYW1lPSJub25lIjtjb25zdCBfPXkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC5jdXJyZW50PV8uaGVpZ2h0LGguY3VycmVudD1fLndpZHRoLHcuY3VycmVudHx8KHkuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPXYuY3VycmVudC50cmFuc2l0aW9uRHVyYXRpb24seS5zdHlsZS5hbmltYXRpb25OYW1lPXYuY3VycmVudC5hbmltYXRpb25OYW1lKSxhKHIpfX0sW2wub3BlbixyXSkscC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImRhdGEtc3RhdGUiOnJ5KGwub3BlbiksImRhdGEtZGlzYWJsZWQiOmwuZGlzYWJsZWQ/IiI6dm9pZCAwLGlkOmwuY29udGVudElkLGhpZGRlbjohbX0sbyx7cmVmOmMsc3R5bGU6eyItLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtaGVpZ2h0IjpmP2Ake2Z9cHhgOnZvaWQgMCwiLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LXdpZHRoIjpnP2Ake2d9cHhgOnZvaWQgMCwuLi50LnN0eWxlfX0pLG0mJmkpfSk7ZnVuY3Rpb24gcnkodCl7cmV0dXJuIHQ/Im9wZW4iOiJjbG9zZWQifWNvbnN0IEtEPUJELFpEPVdELEdEPVZELEVvPSJBY2NvcmRpb24iLFlEPVsiSG9tZSIsIkVuZCIsIkFycm93RG93biIsIkFycm93VXAiLCJBcnJvd0xlZnQiLCJBcnJvd1JpZ2h0Il0sW2l5LFhELEpEXT1qQyhFbyksW0pmLEFJXT1hbChFbyxbSkQsbmJdKSxveT1uYigpLGliPXJlLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHt0eXBlOm4sLi4ucn09dCxpPXIsbz1yO3JldHVybiByZS5jcmVhdGVFbGVtZW50KGl5LlByb3ZpZGVyLHtzY29wZTp0Ll9fc2NvcGVBY2NvcmRpb259LG49PT0ibXVsdGlwbGUiP3JlLmNyZWF0ZUVsZW1lbnQodEksb2Uoe30sbyx7cmVmOmV9KSk6cmUuY3JlYXRlRWxlbWVudChlSSxvZSh7fSxpLHtyZWY6ZX0pKSl9KTtpYi5wcm9wVHlwZXM9e3R5cGUodCl7Y29uc3QgZT10LnZhbHVlfHx0LmRlZmF1bHRWYWx1ZTtyZXR1cm4gdC50eXBlJiYhWyJzaW5nbGUiLCJtdWx0aXBsZSJdLmluY2x1ZGVzKHQudHlwZSk/bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYHR5cGVgIHN1cHBsaWVkIHRvIGBBY2NvcmRpb25gLiBFeHBlY3RlZCBvbmUgb2YgYHNpbmdsZSB8IG11bHRpcGxlYC4iKTp0LnR5cGU9PT0ibXVsdGlwbGUiJiZ0eXBlb2YgZT09InN0cmluZyI/bmV3IEVycm9yKCJJbnZhbGlkIHByb3AgYHR5cGVgIHN1cHBsaWVkIHRvIGBBY2NvcmRpb25gLiBFeHBlY3RlZCBgc2luZ2xlYCB3aGVuIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgaXMgdHlwZSBgc3RyaW5nYC4iKTp0LnR5cGU9PT0ic2luZ2xlIiYmQXJyYXkuaXNBcnJheShlKT9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIGBtdWx0aXBsZWAgd2hlbiBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIGlzIHR5cGUgYHN0cmluZ1tdYC4iKTpudWxsfX07Y29uc3Rbb2IsUURdPUpmKEVvKSxbbGIscURdPUpmKEVvLHtjb2xsYXBzaWJsZTohMX0pLGVJPXJlLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHt2YWx1ZTpuLGRlZmF1bHRWYWx1ZTpyLG9uVmFsdWVDaGFuZ2U6aT0oKT0+e30sY29sbGFwc2libGU6bz0hMSwuLi5sfT10LFtzLGFdPV9zKHtwcm9wOm4sZGVmYXVsdFByb3A6cixvbkNoYW5nZTppfSk7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQob2Ise3Njb3BlOnQuX19zY29wZUFjY29yZGlvbix2YWx1ZTpzP1tzXTpbXSxvbkl0ZW1PcGVuOmEsb25JdGVtQ2xvc2U6cmUudXNlQ2FsbGJhY2soKCk9Pm8mJmEoIiIpLFtvLGFdKX0scmUuY3JlYXRlRWxlbWVudChsYix7c2NvcGU6dC5fX3Njb3BlQWNjb3JkaW9uLGNvbGxhcHNpYmxlOm99LHJlLmNyZWF0ZUVsZW1lbnQoc2Isb2Uoe30sbCx7cmVmOmV9KSkpKX0pLHRJPXJlLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHt2YWx1ZTpuLGRlZmF1bHRWYWx1ZTpyLG9uVmFsdWVDaGFuZ2U6aT0oKT0+e30sLi4ub309dCxbbD1bXSxzXT1fcyh7cHJvcDpuLGRlZmF1bHRQcm9wOnIsb25DaGFuZ2U6aX0pLGE9cmUudXNlQ2FsbGJhY2soYz0+cygoZD1bXSk9PlsuLi5kLGNdKSxbc10pLHU9cmUudXNlQ2FsbGJhY2soYz0+cygoZD1bXSk9PmQuZmlsdGVyKGY9PmYhPT1jKSksW3NdKTtyZXR1cm4gcmUuY3JlYXRlRWxlbWVudChvYix7c2NvcGU6dC5fX3Njb3BlQWNjb3JkaW9uLHZhbHVlOmwsb25JdGVtT3BlbjphLG9uSXRlbUNsb3NlOnV9LHJlLmNyZWF0ZUVsZW1lbnQobGIse3Njb3BlOnQuX19zY29wZUFjY29yZGlvbixjb2xsYXBzaWJsZTohMH0scmUuY3JlYXRlRWxlbWVudChzYixvZSh7fSxvLHtyZWY6ZX0pKSkpfSksW25JLFFmXT1KZihFbyksc2I9cmUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246bixkaXNhYmxlZDpyLGRpcjppLG9yaWVudGF0aW9uOm89InZlcnRpY2FsIiwuLi5sfT10LHM9cmUudXNlUmVmKG51bGwpLGE9c3QocyxlKSx1PVhEKG4pLGQ9WWcoaSk9PT0ibHRyIixmPW50KHQub25LZXlEb3duLGg9Pnt2YXIgZztpZighWUQuaW5jbHVkZXMoaC5rZXkpKXJldHVybjtjb25zdCBtPWgudGFyZ2V0LHc9dSgpLmZpbHRlcihBPT57dmFyIGs7cmV0dXJuISgoaz1BLnJlZi5jdXJyZW50KSE9PW51bGwmJmshPT12b2lkIDAmJmsuZGlzYWJsZWQpfSksdj13LmZpbmRJbmRleChBPT5BLnJlZi5jdXJyZW50PT09bSkseT13Lmxlbmd0aDtpZih2PT09LTEpcmV0dXJuO2gucHJldmVudERlZmF1bHQoKTtsZXQgXz12O2NvbnN0IFM9MCxFPXktMSwkPSgpPT57Xz12KzEsXz5FJiYoXz1TKX0sQz0oKT0+e189di0xLF88UyYmKF89RSl9O3N3aXRjaChoLmtleSl7Y2FzZSJIb21lIjpfPVM7YnJlYWs7Y2FzZSJFbmQiOl89RTticmVhaztjYXNlIkFycm93UmlnaHQiOm89PT0iaG9yaXpvbnRhbCImJihkPyQoKTpDKCkpO2JyZWFrO2Nhc2UiQXJyb3dEb3duIjpvPT09InZlcnRpY2FsIiYmJCgpO2JyZWFrO2Nhc2UiQXJyb3dMZWZ0IjpvPT09Imhvcml6b250YWwiJiYoZD9DKCk6JCgpKTticmVhaztjYXNlIkFycm93VXAiOm89PT0idmVydGljYWwiJiZDKCk7YnJlYWt9Y29uc3QgTj1fJXk7KGc9d1tOXS5yZWYuY3VycmVudCk9PT1udWxsfHxnPT09dm9pZCAwfHxnLmZvY3VzKCl9KTtyZXR1cm4gcmUuY3JlYXRlRWxlbWVudChuSSx7c2NvcGU6bixkaXNhYmxlZDpyLGRpcmVjdGlvbjppLG9yaWVudGF0aW9uOm99LHJlLmNyZWF0ZUVsZW1lbnQoaXkuU2xvdCx7c2NvcGU6bn0scmUuY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe30sbCx7ImRhdGEtb3JpZW50YXRpb24iOm8scmVmOmEsb25LZXlEb3duOnI/dm9pZCAwOmZ9KSkpKX0pLEptPSJBY2NvcmRpb25JdGVtIixbckksbHldPUpmKEptKSxpST1yZS5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLHZhbHVlOnIsLi4uaX09dCxvPVFmKEptLG4pLGw9UUQoSm0sbikscz1veShuKSxhPUZmKCksdT1yJiZsLnZhbHVlLmluY2x1ZGVzKHIpfHwhMSxjPW8uZGlzYWJsZWR8fHQuZGlzYWJsZWQ7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQockkse3Njb3BlOm4sb3Blbjp1LGRpc2FibGVkOmMsdHJpZ2dlcklkOmF9LHJlLmNyZWF0ZUVsZW1lbnQoS0Qsb2UoeyJkYXRhLW9yaWVudGF0aW9uIjpvLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjphYih1KX0scyxpLHtyZWY6ZSxkaXNhYmxlZDpjLG9wZW46dSxvbk9wZW5DaGFuZ2U6ZD0+e2Q/bC5vbkl0ZW1PcGVuKHIpOmwub25JdGVtQ2xvc2Uocil9fSkpKX0pLG9JPSJBY2NvcmRpb25IZWFkZXIiLGxJPXJlLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sLi4ucn09dCxpPVFmKEVvLG4pLG89bHkob0ksbik7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQoS2UuaDMsb2UoeyJkYXRhLW9yaWVudGF0aW9uIjppLm9yaWVudGF0aW9uLCJkYXRhLXN0YXRlIjphYihvLm9wZW4pLCJkYXRhLWRpc2FibGVkIjpvLmRpc2FibGVkPyIiOnZvaWQgMH0scix7cmVmOmV9KSl9KSxFXz0iQWNjb3JkaW9uVHJpZ2dlciIsc0k9cmUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT10LGk9UWYoRW8sbiksbz1seShFXyxuKSxsPXFEKEVfLG4pLHM9b3kobik7cmV0dXJuIHJlLmNyZWF0ZUVsZW1lbnQoaXkuSXRlbVNsb3Qse3Njb3BlOm59LHJlLmNyZWF0ZUVsZW1lbnQoWkQsb2UoeyJhcmlhLWRpc2FibGVkIjpvLm9wZW4mJiFsLmNvbGxhcHNpYmxlfHx2b2lkIDAsImRhdGEtb3JpZW50YXRpb24iOmkub3JpZW50YXRpb24saWQ6by50cmlnZ2VySWR9LHMscix7cmVmOmV9KSkpfSksYUk9IkFjY29yZGlvbkNvbnRlbnQiLHVJPXJlLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sLi4ucn09dCxpPVFmKEVvLG4pLG89bHkoYUksbiksbD1veShuKTtyZXR1cm4gcmUuY3JlYXRlRWxlbWVudChHRCxvZSh7cm9sZToicmVnaW9uIiwiYXJpYS1sYWJlbGxlZGJ5IjpvLnRyaWdnZXJJZCwiZGF0YS1vcmllbnRhdGlvbiI6aS5vcmllbnRhdGlvbn0sbCxyLHtyZWY6ZSxzdHlsZTp7Ii0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0IjoidmFyKC0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQpIiwiLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC13aWR0aCI6InZhcigtLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgpIiwuLi50LnN0eWxlfX0pKX0pO2Z1bmN0aW9uIGFiKHQpe3JldHVybiB0PyJvcGVuIjoiY2xvc2VkIn1jb25zdCBjST1pYixkST1pSSxmST1sSSx1Yj1zSSxjYj11SSxoST1jSSxkYj1wLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eC5qc3goZEkse3JlZjpuLGNsYXNzTmFtZTp4dCgiYm9yZGVyLWIiLHQpLC4uLmV9KSk7ZGIuZGlzcGxheU5hbWU9IkFjY29yZGlvbkl0ZW0iO2NvbnN0IGZiPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LGNoaWxkcmVuOmUsLi4ubn0scik9PnguanN4KGZJLHtjbGFzc05hbWU6ImZsZXgiLGNoaWxkcmVuOnguanN4cyh1Yix7cmVmOnIsY2xhc3NOYW1lOnh0KCJmbGV4IGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB5LTQgZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1hbGwgaG92ZXI6dW5kZXJsaW5lIFsmW2RhdGEtc3RhdGU9b3Blbl0+c3ZnXTpyb3RhdGUtMTgwIix0KSwuLi5uLGNoaWxkcmVuOltlLHguanN4KHdTLHtjbGFzc05hbWU6InctNCBoLTQgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMjAwIHNocmluay0wIn0pXX0pfSkpO2ZiLmRpc3BsYXlOYW1lPXViLmRpc3BsYXlOYW1lO2NvbnN0IGhiPXAuZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LGNoaWxkcmVuOmUsLi4ubn0scik9PnguanN4KGNiLHtyZWY6cixjbGFzc05hbWU6eHQoIm92ZXJmbG93LWhpZGRlbiB0ZXh0LXNtIHRyYW5zaXRpb24tYWxsIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1hY2NvcmRpb24tdXAgZGF0YS1bc3RhdGU9b3Blbl06YW5pbWF0ZS1hY2NvcmRpb24tZG93biIsdCksLi4ubixjaGlsZHJlbjp4LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJwdC0wIHBiLTQiLGNoaWxkcmVuOmV9KX0pKTtoYi5kaXNwbGF5TmFtZT1jYi5kaXNwbGF5TmFtZTsvKioKICogUmVhY3QgUm91dGVyIERPTSB2Ni4yMC4wCiAqCiAqIENvcHlyaWdodCAoYykgUmVtaXggU29mdHdhcmUgSW5jLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRS5tZCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKgogKiBAbGljZW5zZSBNSVQKICovZnVuY3Rpb24gcmYoKXtyZXR1cm4gcmY9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxyZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcEkodCxlKXtyZXR1cm4gWUwoe2Jhc2VuYW1lOmU9PW51bGw/dm9pZCAwOmUuYmFzZW5hbWUsZnV0dXJlOnJmKHt9LGU9PW51bGw/dm9pZCAwOmUuZnV0dXJlLHt2N19wcmVwZW5kQmFzZW5hbWU6ITB9KSxoaXN0b3J5OnZMKHt3aW5kb3c6ZT09bnVsbD92b2lkIDA6ZS53aW5kb3d9KSxoeWRyYXRpb25EYXRhOihlPT1udWxsP3ZvaWQgMDplLmh5ZHJhdGlvbkRhdGEpfHxtSSgpLHJvdXRlczp0LG1hcFJvdXRlUHJvcGVydGllczpTRCx3aW5kb3c6ZT09bnVsbD92b2lkIDA6ZS53aW5kb3d9KS5pbml0aWFsaXplKCl9ZnVuY3Rpb24gbUkoKXt2YXIgdDtsZXQgZT0odD13aW5kb3cpPT1udWxsP3ZvaWQgMDp0Ll9fc3RhdGljUm91dGVySHlkcmF0aW9uRGF0YTtyZXR1cm4gZSYmZS5lcnJvcnMmJihlPXJmKHt9LGUse2Vycm9yczpnSShlLmVycm9ycyl9KSksZX1mdW5jdGlvbiBnSSh0KXtpZighdClyZXR1cm4gbnVsbDtsZXQgZT1PYmplY3QuZW50cmllcyh0KSxuPXt9O2ZvcihsZXRbcixpXW9mIGUpaWYoaSYmaS5fX3R5cGU9PT0iUm91dGVFcnJvclJlc3BvbnNlIiluW3JdPW5ldyBKdihpLnN0YXR1cyxpLnN0YXR1c1RleHQsaS5kYXRhLGkuaW50ZXJuYWw9PT0hMCk7ZWxzZSBpZihpJiZpLl9fdHlwZT09PSJFcnJvciIpe2lmKGkuX19zdWJUeXBlKXtsZXQgbz13aW5kb3dbaS5fX3N1YlR5cGVdO2lmKHR5cGVvZiBvPT0iZnVuY3Rpb24iKXRyeXtsZXQgbD1uZXcgbyhpLm1lc3NhZ2UpO2wuc3RhY2s9IiIsbltyXT1sfWNhdGNoe319aWYobltyXT09bnVsbCl7bGV0IG89bmV3IEVycm9yKGkubWVzc2FnZSk7by5zdGFjaz0iIixuW3JdPW99fWVsc2UgbltyXT1pO3JldHVybiBufWNvbnN0IHZJPXAuY3JlYXRlQ29udGV4dCh7aXNUcmFuc2l0aW9uaW5nOiExfSkseUk9cC5jcmVhdGVDb250ZXh0KG5ldyBNYXApLHhJPSJzdGFydFRyYW5zaXRpb24iLENfPUlfW3hJXSxfST0iZmx1c2hTeW5jIixrXz1GVFtfSV07ZnVuY3Rpb24gd0kodCl7Q18/Q18odCk6dCgpfWZ1bmN0aW9uIHVhKHQpe2tfP2tfKHQpOnQoKX1jbGFzcyBTSXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdHVzPSJwZW5kaW5nIix0aGlzLnByb21pc2U9bmV3IFByb21pc2UoKGUsbik9Pnt0aGlzLnJlc29sdmU9cj0+e3RoaXMuc3RhdHVzPT09InBlbmRpbmciJiYodGhpcy5zdGF0dXM9InJlc29sdmVkIixlKHIpKX0sdGhpcy5yZWplY3Q9cj0+e3RoaXMuc3RhdHVzPT09InBlbmRpbmciJiYodGhpcy5zdGF0dXM9InJlamVjdGVkIixuKHIpKX19KX19ZnVuY3Rpb24gRUkodCl7bGV0e2ZhbGxiYWNrRWxlbWVudDplLHJvdXRlcjpuLGZ1dHVyZTpyfT10LFtpLG9dPXAudXNlU3RhdGUobi5zdGF0ZSksW2wsc109cC51c2VTdGF0ZSgpLFthLHVdPXAudXNlU3RhdGUoe2lzVHJhbnNpdGlvbmluZzohMX0pLFtjLGRdPXAudXNlU3RhdGUoKSxbZixoXT1wLnVzZVN0YXRlKCksW2csbV09cC51c2VTdGF0ZSgpLHc9cC51c2VSZWYobmV3IE1hcCkse3Y3X3N0YXJ0VHJhbnNpdGlvbjp2fT1yfHx7fSx5PXAudXNlQ2FsbGJhY2soQz0+e3Y/d0koQyk6QygpfSxbdl0pLF89cC51c2VDYWxsYmFjaygoQyxOKT0+e2xldHtkZWxldGVkRmV0Y2hlcnM6QSx1bnN0YWJsZV9mbHVzaFN5bmM6ayx1bnN0YWJsZV92aWV3VHJhbnNpdGlvbk9wdHM6TX09TjtBLmZvckVhY2goaWU9PncuY3VycmVudC5kZWxldGUoaWUpKSxDLmZldGNoZXJzLmZvckVhY2goKGllLFYpPT57aWUuZGF0YSE9PXZvaWQgMCYmdy5jdXJyZW50LnNldChWLGllLmRhdGEpfSk7bGV0IEQ9bi53aW5kb3c9PW51bGx8fHR5cGVvZiBuLndpbmRvdy5kb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uIT0iZnVuY3Rpb24iO2lmKCFNfHxEKXtrP3VhKCgpPT5vKEMpKTp5KCgpPT5vKEMpKTtyZXR1cm59aWYoayl7dWEoKCk9PntmJiYoYyYmYy5yZXNvbHZlKCksZi5za2lwVHJhbnNpdGlvbigpKSx1KHtpc1RyYW5zaXRpb25pbmc6ITAsZmx1c2hTeW5jOiEwLGN1cnJlbnRMb2NhdGlvbjpNLmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246TS5uZXh0TG9jYXRpb259KX0pO2xldCBpZT1uLndpbmRvdy5kb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKCgpPT57dWEoKCk9Pm8oQykpfSk7aWUuZmluaXNoZWQuZmluYWxseSgoKT0+e3VhKCgpPT57ZCh2b2lkIDApLGgodm9pZCAwKSxzKHZvaWQgMCksdSh7aXNUcmFuc2l0aW9uaW5nOiExfSl9KX0pLHVhKCgpPT5oKGllKSk7cmV0dXJufWY/KGMmJmMucmVzb2x2ZSgpLGYuc2tpcFRyYW5zaXRpb24oKSxtKHtzdGF0ZTpDLGN1cnJlbnRMb2NhdGlvbjpNLmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246TS5uZXh0TG9jYXRpb259KSk6KHMoQyksdSh7aXNUcmFuc2l0aW9uaW5nOiEwLGZsdXNoU3luYzohMSxjdXJyZW50TG9jYXRpb246TS5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOk0ubmV4dExvY2F0aW9ufSkpfSxbbi53aW5kb3csZixjLHcseV0pO3AudXNlTGF5b3V0RWZmZWN0KCgpPT5uLnN1YnNjcmliZShfKSxbbixfXSkscC51c2VFZmZlY3QoKCk9PnthLmlzVHJhbnNpdGlvbmluZyYmIWEuZmx1c2hTeW5jJiZkKG5ldyBTSSl9LFthXSkscC51c2VFZmZlY3QoKCk9PntpZihjJiZsJiZuLndpbmRvdyl7bGV0IEM9bCxOPWMucHJvbWlzZSxBPW4ud2luZG93LmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oYXN5bmMoKT0+e3koKCk9Pm8oQykpLGF3YWl0IE59KTtBLmZpbmlzaGVkLmZpbmFsbHkoKCk9PntkKHZvaWQgMCksaCh2b2lkIDApLHModm9pZCAwKSx1KHtpc1RyYW5zaXRpb25pbmc6ITF9KX0pLGgoQSl9fSxbeSxsLGMsbi53aW5kb3ddKSxwLnVzZUVmZmVjdCgoKT0+e2MmJmwmJmkubG9jYXRpb24ua2V5PT09bC5sb2NhdGlvbi5rZXkmJmMucmVzb2x2ZSgpfSxbYyxmLGkubG9jYXRpb24sbF0pLHAudXNlRWZmZWN0KCgpPT57IWEuaXNUcmFuc2l0aW9uaW5nJiZnJiYocyhnLnN0YXRlKSx1KHtpc1RyYW5zaXRpb25pbmc6ITAsZmx1c2hTeW5jOiExLGN1cnJlbnRMb2NhdGlvbjpnLmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246Zy5uZXh0TG9jYXRpb259KSxtKHZvaWQgMCkpfSxbYS5pc1RyYW5zaXRpb25pbmcsZ10pO2xldCBTPXAudXNlTWVtbygoKT0+KHtjcmVhdGVIcmVmOm4uY3JlYXRlSHJlZixlbmNvZGVMb2NhdGlvbjpuLmVuY29kZUxvY2F0aW9uLGdvOkM9Pm4ubmF2aWdhdGUoQykscHVzaDooQyxOLEEpPT5uLm5hdmlnYXRlKEMse3N0YXRlOk4scHJldmVudFNjcm9sbFJlc2V0OkE9PW51bGw/dm9pZCAwOkEucHJldmVudFNjcm9sbFJlc2V0fSkscmVwbGFjZTooQyxOLEEpPT5uLm5hdmlnYXRlKEMse3JlcGxhY2U6ITAsc3RhdGU6TixwcmV2ZW50U2Nyb2xsUmVzZXQ6QT09bnVsbD92b2lkIDA6QS5wcmV2ZW50U2Nyb2xsUmVzZXR9KX0pLFtuXSksRT1uLmJhc2VuYW1lfHwiLyIsJD1wLnVzZU1lbW8oKCk9Pih7cm91dGVyOm4sbmF2aWdhdG9yOlMsc3RhdGljOiExLGJhc2VuYW1lOkV9KSxbbixTLEVdKTtyZXR1cm4gcC5jcmVhdGVFbGVtZW50KHAuRnJhZ21lbnQsbnVsbCxwLmNyZWF0ZUVsZW1lbnQoWmYuUHJvdmlkZXIse3ZhbHVlOiR9LHAuY3JlYXRlRWxlbWVudChWay5Qcm92aWRlcix7dmFsdWU6aX0scC5jcmVhdGVFbGVtZW50KHlJLlByb3ZpZGVyLHt2YWx1ZTp3LmN1cnJlbnR9LHAuY3JlYXRlRWxlbWVudCh2SS5Qcm92aWRlcix7dmFsdWU6YX0scC5jcmVhdGVFbGVtZW50KHdELHtiYXNlbmFtZTpFLGxvY2F0aW9uOmkubG9jYXRpb24sbmF2aWdhdGlvblR5cGU6aS5oaXN0b3J5QWN0aW9uLG5hdmlnYXRvcjpTfSxpLmluaXRpYWxpemVkP3AuY3JlYXRlRWxlbWVudChDSSx7cm91dGVzOm4ucm91dGVzLHN0YXRlOml9KTplKSkpKSksbnVsbCl9ZnVuY3Rpb24gQ0kodCl7bGV0e3JvdXRlczplLHN0YXRlOm59PXQ7cmV0dXJuIGNEKGUsdm9pZCAwLG4pfXZhciBiXzsoZnVuY3Rpb24odCl7dC5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24iLHQuVXNlU3VibWl0PSJ1c2VTdWJtaXQiLHQuVXNlU3VibWl0RmV0Y2hlcj0idXNlU3VibWl0RmV0Y2hlciIsdC5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIix0LnVzZVZpZXdUcmFuc2l0aW9uU3RhdGU9InVzZVZpZXdUcmFuc2l0aW9uU3RhdGUifSkoYl98fChiXz17fSkpO3ZhciAkXzsoZnVuY3Rpb24odCl7dC5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIix0LlVzZUZldGNoZXJzPSJ1c2VGZXRjaGVycyIsdC5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24ifSkoJF98fCgkXz17fSkpO2Z1bmN0aW9uIGtJKHtlcnJvcjp0LHJlc2V0RXJyb3JCb3VuZGFyeTplfSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IodCkseC5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctc2NyZWVuIGgtc2NyZWVuIGJnLWNhcmQtZm9yZWdyb3VuZCIsY2hpbGRyZW46eC5qc3goImRpdiIse2NsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBwLTEwIixjaGlsZHJlbjp4LmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBwLTEwIGJnLWNhcmQgdGV4dC1wcmltYXJ5IixjaGlsZHJlbjpbeC5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W3guanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzAuNWVtXSB0ZXh0LWxnIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBweS0yIixjaGlsZHJlbjpbeC5qc3goJGsse30pLCIgZW5jb3VudGVyZWQgYW4gZXJyb3IiXX0pLHguanN4KCJidXR0b24iLHtvbkNsaWNrOmUsY2hpbGRyZW46eC5qc3gobVIse30pfSldfSkseC5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC00eGwgZm9udC1ub3JtYWwgIixjaGlsZHJlbjoiTWVzc2FnZToifSkseC5qc3goInByZSIse2NoaWxkcmVuOnQubWVzc2FnZX0pLHQuc3RhY2smJnguanN4KGhJLHt0eXBlOiJzaW5nbGUiLGNsYXNzTmFtZToiZm9udC1zZXJpZiIsY29sbGFwc2libGU6ITAsZGVmYXVsdFZhbHVlOiJlcnJvciIsY2hpbGRyZW46eC5qc3hzKGRiLHt2YWx1ZToiZXJyb3IiLGNoaWxkcmVuOlt4LmpzeChmYix7Y2hpbGRyZW46IlN0YWNrIHRyYWNlOiJ9KSx4LmpzeChoYix7Y2xhc3NOYW1lOiJwLTQgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCIsY2hpbGRyZW46dC5zdGFjayYmeC5qc3goInByZSIse2NoaWxkcmVuOnQuc3RhY2t9KX0pXX0pfSldfSl9KX0pfWZ1bmN0aW9uIGJJKCl7Y29uc3QgdD1wSShbe3BhdGg6Ii8qIixlbGVtZW50OnguanN4KElELHtmYWxsYmFja1JlbmRlcjprSSxjaGlsZHJlbjp4LmpzeChrRCx7YXBpOm5ldyBHTigiL2FwaS92YWwiKX0pfSl9XSx7YmFzZW5hbWU6Ii9hcGkvdmFsL3N0YXRpYy9lZGl0In0pO3JldHVybiB4LmpzeChFSSx7cm91dGVyOnR9KX1xaC5jcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihyZS5jcmVhdGVFbGVtZW50KHJlLlN0cmljdE1vZGUsbnVsbCxyZS5jcmVhdGVFbGVtZW50KGJJLG51bGwpKSk7Cg==","/index.html":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+VmFsPC90aXRsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hcGkvdmFsL3N0YXRpYy9hc3NldHMvaW5kZXgtUDN1Y0w5TWMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXBpL3ZhbC9zdGF0aWMvYXNzZXRzL2luZGV4LTdGZVViSGhtLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=="}`
|
|
20
|
+
`{"/assets/index-2l1Jwds9.css":"Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXdpZHRoOjA7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZTVlN2VifTpiZWZvcmUsOmFmdGVyey0tdHctY29udGVudDogIiJ9aHRtbHtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10YWItc2l6ZTo0Oy1vLXRhYi1zaXplOjQ7dGFiLXNpemU6NDtmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZjtmb250LWZlYXR1cmUtc2V0dGluZ3M6bm9ybWFsO2ZvbnQtdmFyaWF0aW9uLXNldHRpbmdzOm5vcm1hbH1ib2R5e21hcmdpbjowO2xpbmUtaGVpZ2h0OmluaGVyaXR9aHJ7aGVpZ2h0OjA7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wLXdpZHRoOjFweH1hYmJyOndoZXJlKFt0aXRsZV0pey13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdH1he2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXAscHJle2ZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSxTRk1vbm8tUmVndWxhcixNZW5sbyxNb25hY28sQ29uc29sYXMsTGliZXJhdGlvbiBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MWVtfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX10YWJsZXt0ZXh0LWluZGVudDowO2JvcmRlci1jb2xvcjppbmhlcml0O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1mZWF0dXJlLXNldHRpbmdzOmluaGVyaXQ7Zm9udC12YXJpYXRpb24tc2V0dGluZ3M6aW5oZXJpdDtmb250LXNpemU6MTAwJTtmb250LXdlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MDtwYWRkaW5nOjB9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6YXV0b306LW1vei11aS1pbnZhbGlke2JveC1zaGFkb3c6bm9uZX1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19YmxvY2txdW90ZSxkbCxkZCxoMSxoMixoMyxoNCxoNSxoNixocixmaWd1cmUscCxwcmV7bWFyZ2luOjB9ZmllbGRzZXR7bWFyZ2luOjA7cGFkZGluZzowfWxlZ2VuZHtwYWRkaW5nOjB9b2wsdWwsbWVudXtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowfWRpYWxvZ3twYWRkaW5nOjB9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWlucHV0OjotbW96LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVye29wYWNpdHk6MTtjb2xvcjojOWNhM2FmfWlucHV0OjpwbGFjZWhvbGRlcix0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7b3BhY2l0eToxO2NvbG9yOiM5Y2EzYWZ9YnV0dG9uLFtyb2xlPWJ1dHRvbl17Y3Vyc29yOnBvaW50ZXJ9OmRpc2FibGVke2N1cnNvcjpkZWZhdWx0fWltZyxzdmcsdmlkZW8sY2FudmFzLGF1ZGlvLGlmcmFtZSxlbWJlZCxvYmplY3R7ZGlzcGxheTpibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9aW1nLHZpZGVve21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX06aG9zdHstLWJhY2tncm91bmQ6IDAgMCUgMTAwJTstLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tY2FyZDogMCAwJSAxMDAlOy0tY2FyZC1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLXBvcG92ZXI6IDAgMCUgMTAwJTstLXBvcG92ZXItZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wcmltYXJ5OiAyMjIuMiA0Ny40JSAxMS4yJTstLXByaW1hcnktZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1zZWNvbmRhcnk6IDIxMCA0MCUgOTYuMSU7LS1zZWNvbmRhcnktZm9yZWdyb3VuZDogMjIyLjIgNDcuNCUgMTEuMiU7LS1tdXRlZDogMCAwJSA1Ny4zJTstLW11dGVkLWZvcmVncm91bmQ6IDIxNS40IDE2LjMlIDQ2LjklOy0tYWNjZW50OiAyNzMgNjAlIDUxJTstLWFjY2VudC1mb3JlZ3JvdW5kOiAxMTAgMTAlIDk0JTstLWRlc3RydWN0aXZlOiAwIDg0LjIlIDYwLjIlOy0tZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1ib3JkZXI6IDIxNC4zIDMxLjglIDkxLjQlOy0taW5wdXQ6IDIxNC4zIDMxLjglIDkxLjQlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfTpyb290ey0tYmFja2dyb3VuZDogMTEwIDEwJSA5NCU7LS1mb3JlZ3JvdW5kOiAyMjIuMiA4NCUgNC45JTstLWNhcmQ6IDAgMCUgMTAwJTstLWNhcmQtZm9yZWdyb3VuZDogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyOiAwIDAlIDEwMCU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIyMi4yIDg0JSA0LjklOy0tcHJpbWFyeTogMjIyLjIgNDcuNCUgMTEuMiU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tc2Vjb25kYXJ5OiAyMTAgNDAlIDk2LjElOy0tc2Vjb25kYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tbXV0ZWQ6IDAgMCUgNTcuMyU7LS1tdXRlZC1mb3JlZ3JvdW5kOiAyMTUuNCAxNi4zJSA0Ni45JTstLWFjY2VudDogMjczIDYwJSA1MSU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMTEwIDEwJSA5NCU7LS1kZXN0cnVjdGl2ZTogMCA4NC4yJSA2MC4yJTstLWRlc3RydWN0aXZlLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tYm9yZGVyOiAyMTQuMyAzMS44JSA5MS40JTstLWlucHV0OiAyMTIuNyA5LjElIDc2LjMlOy0tcmluZzogMjIyLjIgODQlIDQuOSU7LS1yYWRpdXM6IC41cmVtfSpbZGF0YS1tb2RlPWRhcmtdey0tYmFja2dyb3VuZDogMCAwJSA0JTstLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tY2FyZDogMjIyLjIgODQlIDQuOSU7LS1jYXJkLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcG9wb3ZlcjogMjIyLjIgODQlIDQuOSU7LS1wb3BvdmVyLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tcHJpbWFyeTogMjEwIDQwJSA5OCU7LS1wcmltYXJ5LWZvcmVncm91bmQ6IDIyMi4yIDQ3LjQlIDExLjIlOy0tc2Vjb25kYXJ5OiAyMTcuMiAzMi42JSAxNy41JTstLXNlY29uZGFyeS1mb3JlZ3JvdW5kOiAyMTAgNDAlIDk4JTstLW11dGVkOiAxNzggMjMlIDc2JTstLW11dGVkLWZvcmVncm91bmQ6IDIxNSAyMC4yJSA2NS4xJTstLWFjY2VudDogMTU5IDYwJSA1MSU7LS1hY2NlbnQtZm9yZWdyb3VuZDogMjEwIDQwJSA5OCU7LS1kZXN0cnVjdGl2ZTogMCA2Mi44JSAzMC42JTstLWRlc3RydWN0aXZlLWZvcmVncm91bmQ6IDIxMCA0MCUgOTglOy0tYm9yZGVyOiAyMTcuMiAzMi42JSAxNy41JTstLWlucHV0OiAyMTcuMiAzMi42JSAxNy41JTstLXJpbmc6IDIxMi43IDI2LjglIDgzLjklfSp7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1ib3JkZXIpKX1ib2R5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKTtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfSosOmJlZm9yZSw6YWZ0ZXJ7LS10dy1ib3JkZXItc3BhY2luZy14OiAwOy0tdHctYm9yZGVyLXNwYWNpbmcteTogMDstLXR3LXRyYW5zbGF0ZS14OiAwOy0tdHctdHJhbnNsYXRlLXk6IDA7LS10dy1yb3RhdGU6IDA7LS10dy1za2V3LXg6IDA7LS10dy1za2V3LXk6IDA7LS10dy1zY2FsZS14OiAxOy0tdHctc2NhbGUteTogMTstLXR3LXBhbi14OiA7LS10dy1wYW4teTogOy0tdHctcGluY2gtem9vbTogOy0tdHctc2Nyb2xsLXNuYXAtc3RyaWN0bmVzczogcHJveGltaXR5Oy0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdmlhLXBvc2l0aW9uOiA7LS10dy1ncmFkaWVudC10by1wb3NpdGlvbjogOy0tdHctb3JkaW5hbDogOy0tdHctc2xhc2hlZC16ZXJvOiA7LS10dy1udW1lcmljLWZpZ3VyZTogOy0tdHctbnVtZXJpYy1zcGFjaW5nOiA7LS10dy1udW1lcmljLWZyYWN0aW9uOiA7LS10dy1yaW5nLWluc2V0OiA7LS10dy1yaW5nLW9mZnNldC13aWR0aDogMHB4Oy0tdHctcmluZy1vZmZzZXQtY29sb3I6ICNmZmY7LS10dy1yaW5nLWNvbG9yOiByZ2IoNTkgMTMwIDI0NiAvIC41KTstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogMCAwICMwMDAwOy0tdHctcmluZy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdzogMCAwICMwMDAwOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMCAjMDAwMDstLXR3LWJsdXI6IDstLXR3LWJyaWdodG5lc3M6IDstLXR3LWNvbnRyYXN0OiA7LS10dy1ncmF5c2NhbGU6IDstLXR3LWh1ZS1yb3RhdGU6IDstLXR3LWludmVydDogOy0tdHctc2F0dXJhdGU6IDstLXR3LXNlcGlhOiA7LS10dy1kcm9wLXNoYWRvdzogOy0tdHctYmFja2Ryb3AtYmx1cjogOy0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzczogOy0tdHctYmFja2Ryb3AtY29udHJhc3Q6IDstLXR3LWJhY2tkcm9wLWdyYXlzY2FsZTogOy0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZTogOy0tdHctYmFja2Ryb3AtaW52ZXJ0OiA7LS10dy1iYWNrZHJvcC1vcGFjaXR5OiA7LS10dy1iYWNrZHJvcC1zYXR1cmF0ZTogOy0tdHctYmFja2Ryb3Atc2VwaWE6IH06OmJhY2tkcm9wey0tdHctYm9yZGVyLXNwYWNpbmcteDogMDstLXR3LWJvcmRlci1zcGFjaW5nLXk6IDA7LS10dy10cmFuc2xhdGUteDogMDstLXR3LXRyYW5zbGF0ZS15OiAwOy0tdHctcm90YXRlOiAwOy0tdHctc2tldy14OiAwOy0tdHctc2tldy15OiAwOy0tdHctc2NhbGUteDogMTstLXR3LXNjYWxlLXk6IDE7LS10dy1wYW4teDogOy0tdHctcGFuLXk6IDstLXR3LXBpbmNoLXpvb206IDstLXR3LXNjcm9sbC1zbmFwLXN0cmljdG5lc3M6IHByb3hpbWl0eTstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDstLXR3LWdyYWRpZW50LXZpYS1wb3NpdGlvbjogOy0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb246IDstLXR3LW9yZGluYWw6IDstLXR3LXNsYXNoZWQtemVybzogOy0tdHctbnVtZXJpYy1maWd1cmU6IDstLXR3LW51bWVyaWMtc3BhY2luZzogOy0tdHctbnVtZXJpYy1mcmFjdGlvbjogOy0tdHctcmluZy1pbnNldDogOy0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDBweDstLXR3LXJpbmctb2Zmc2V0LWNvbG9yOiAjZmZmOy0tdHctcmluZy1jb2xvcjogcmdiKDU5IDEzMCAyNDYgLyAuNSk7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXJpbmctc2hhZG93OiAwIDAgIzAwMDA7LS10dy1zaGFkb3c6IDAgMCAjMDAwMDstLXR3LXNoYWRvdy1jb2xvcmVkOiAwIDAgIzAwMDA7LS10dy1ibHVyOiA7LS10dy1icmlnaHRuZXNzOiA7LS10dy1jb250cmFzdDogOy0tdHctZ3JheXNjYWxlOiA7LS10dy1odWUtcm90YXRlOiA7LS10dy1pbnZlcnQ6IDstLXR3LXNhdHVyYXRlOiA7LS10dy1zZXBpYTogOy0tdHctZHJvcC1zaGFkb3c6IDstLXR3LWJhY2tkcm9wLWJsdXI6IDstLXR3LWJhY2tkcm9wLWJyaWdodG5lc3M6IDstLXR3LWJhY2tkcm9wLWNvbnRyYXN0OiA7LS10dy1iYWNrZHJvcC1ncmF5c2NhbGU6IDstLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGU6IDstLXR3LWJhY2tkcm9wLWludmVydDogOy0tdHctYmFja2Ryb3Atb3BhY2l0eTogOy0tdHctYmFja2Ryb3Atc2F0dXJhdGU6IDstLXR3LWJhY2tkcm9wLXNlcGlhOiB9LnNyLW9ubHl7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxcHg7cGFkZGluZzowO21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtjbGlwOnJlY3QoMCwwLDAsMCk7d2hpdGUtc3BhY2U6bm93cmFwO2JvcmRlci13aWR0aDowfS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0uc3RhdGlje3Bvc2l0aW9uOnN0YXRpY30uZml4ZWR7cG9zaXRpb246Zml4ZWR9LmFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uc3RpY2t5e3Bvc2l0aW9uOnN0aWNreX0uaW5zZXQtMHt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MH0uaW5zZXQteS0we3RvcDowO2JvdHRvbTowfS4tbGVmdC0ye2xlZnQ6LS41cmVtfS4tcmlnaHQtXFsxMHB4XF17cmlnaHQ6LTEwcHh9Li10b3AtXFsxMHB4XF17dG9wOi0xMHB4fS4tdG9wLVxbNHB4XF17dG9wOi00cHh9LmJvdHRvbS0we2JvdHRvbTowfS5sZWZ0LTB7bGVmdDowfS5sZWZ0LTF7bGVmdDouMjVyZW19LmxlZnQtMntsZWZ0Oi41cmVtfS5sZWZ0LVxbMTZweFxde2xlZnQ6MTZweH0ubGVmdC1cWzUwXCVcXXtsZWZ0OjUwJX0ucmlnaHQtMHtyaWdodDowfS5yaWdodC0xe3JpZ2h0Oi4yNXJlbX0ucmlnaHQtNHtyaWdodDoxcmVtfS5yaWdodC1cWzE2cHhcXXtyaWdodDoxNnB4fS50b3AtMHt0b3A6MH0udG9wLTFcLzJ7dG9wOjUwJX0udG9wLTR7dG9wOjFyZW19LnRvcC1cWzE2cHhcXXt0b3A6MTZweH0udG9wLVxbNTBcJVxde3RvcDo1MCV9LnotNXt6LWluZGV4OjV9LnotNTB7ei1pbmRleDo1MH0uei1cWzFcXXt6LWluZGV4OjF9LnotXFs1XF17ei1pbmRleDo1fS56LW92ZXJsYXl7ei1pbmRleDo0fS5tLTR7bWFyZ2luOjFyZW19Li1teC0xe21hcmdpbi1sZWZ0Oi0uMjVyZW07bWFyZ2luLXJpZ2h0Oi0uMjVyZW19Li1teS0ye21hcmdpbi10b3A6LS41cmVtO21hcmdpbi1ib3R0b206LS41cmVtfS4tbXktXFsxMDBweFxde21hcmdpbi10b3A6LTEwMHB4O21hcmdpbi1ib3R0b206LTEwMHB4fS5teC0ye21hcmdpbi1sZWZ0Oi41cmVtO21hcmdpbi1yaWdodDouNXJlbX0ubXktMXttYXJnaW4tdG9wOi4yNXJlbTttYXJnaW4tYm90dG9tOi4yNXJlbX0ubWItNHttYXJnaW4tYm90dG9tOjFyZW19Lm1sLTB7bWFyZ2luLWxlZnQ6MH0ubWwtMnttYXJnaW4tbGVmdDouNXJlbX0ubWwtXFsyMHB4XF17bWFyZ2luLWxlZnQ6MjBweH0ubWwtYXV0b3ttYXJnaW4tbGVmdDphdXRvfS5tci0ye21hcmdpbi1yaWdodDouNXJlbX0ubXQtMnttYXJnaW4tdG9wOi41cmVtfS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS50YWJsZXtkaXNwbGF5OnRhYmxlfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaGlkZGVue2Rpc3BsYXk6bm9uZX0uYXNwZWN0LXNxdWFyZXthc3BlY3QtcmF0aW86MSAvIDF9LmgtMTB7aGVpZ2h0OjIuNXJlbX0uaC0xMXtoZWlnaHQ6Mi43NXJlbX0uaC0ye2hlaWdodDouNXJlbX0uaC0yXC41e2hlaWdodDouNjI1cmVtfS5oLTN7aGVpZ2h0Oi43NXJlbX0uaC0zXC41e2hlaWdodDouODc1cmVtfS5oLTR7aGVpZ2h0OjFyZW19LmgtN3toZWlnaHQ6MS43NXJlbX0uaC05e2hlaWdodDoyLjI1cmVtfS5oLVxbMTAwXF17aGVpZ2h0OjEwMH0uaC1cWzEycHhcXXtoZWlnaHQ6MTJweH0uaC1cWzE0cHhcXXtoZWlnaHQ6MTRweH0uaC1cWzE4cHhcXXtoZWlnaHQ6MThweH0uaC1cWzFweFxde2hlaWdodDoxcHh9LmgtXFsyMHB4XF17aGVpZ2h0OjIwcHh9LmgtXFsyMnB4XF17aGVpZ2h0OjIycHh9LmgtXFsyNHB4XF17aGVpZ2h0OjI0cHh9LmgtXFszMnB4XF17aGVpZ2h0OjMycHh9LmgtXFs1MHB4XF17aGVpZ2h0OjUwcHh9LmgtXFs3NXB4XF17aGVpZ2h0Ojc1cHh9LmgtXFs5cHhcXXtoZWlnaHQ6OXB4fS5oLVxbY2FsY1woMTAwc3ZoLTMycHhcKVxde2hlaWdodDpjYWxjKDEwMHN2aCAtIDMycHgpfS5oLVxbdmFyXCgtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodFwpXF17aGVpZ2h0OnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCl9LmgtZnVsbHtoZWlnaHQ6MTAwJX0uaC1weHtoZWlnaHQ6MXB4fS5oLXNjcmVlbntoZWlnaHQ6MTAwdmh9Lm1heC1oLVxbMzAwcHhcXXttYXgtaGVpZ2h0OjMwMHB4fS5tYXgtaC1cWzUwMHB4XF17bWF4LWhlaWdodDo1MDBweH0ubWluLWgtXFsxMDBweFxde21pbi1oZWlnaHQ6MTAwcHh9Lm1pbi1oLVxbMjAwcHhcXXttaW4taGVpZ2h0OjIwMHB4fS5taW4taC1cWzMwMHB4XF17bWluLWhlaWdodDozMDBweH0ubWluLWgtc2NyZWVue21pbi1oZWlnaHQ6MTAwdmh9LnctMHt3aWR0aDowcHh9LnctMVwvM3t3aWR0aDozMy4zMzMzMzMlfS53LTEwe3dpZHRoOjIuNXJlbX0udy0ye3dpZHRoOi41cmVtfS53LTJcLjV7d2lkdGg6LjYyNXJlbX0udy0ze3dpZHRoOi43NXJlbX0udy0zXC41e3dpZHRoOi44NzVyZW19LnctNHt3aWR0aDoxcmVtfS53LTV7d2lkdGg6MS4yNXJlbX0udy03e3dpZHRoOjEuNzVyZW19LnctNzJ7d2lkdGg6MThyZW19LnctOXt3aWR0aDoyLjI1cmVtfS53LVxbMTJweFxde3dpZHRoOjEycHh9LnctXFsxNHB4XF17d2lkdGg6MTRweH0udy1cWzFweFxde3dpZHRoOjFweH0udy1cWzIwcHhcXXt3aWR0aDoyMHB4fS53LVxbMjRweFxde3dpZHRoOjI0cHh9LnctXFszMDBweFxde3dpZHRoOjMwMHB4fS53LVxbMzJweFxde3dpZHRoOjMycHh9LnctXFs0NHB4XF17d2lkdGg6NDRweH0udy1cWzlweFxde3dpZHRoOjlweH0udy1cW2NhbGNcKDEwMFwlLTMycHgtNTBweC0xNnB4XClcXXt3aWR0aDpjYWxjKDEwMCUgLSA5OHB4KX0udy1maXR7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH0udy1mdWxse3dpZHRoOjEwMCV9Lnctc2NyZWVue3dpZHRoOjEwMHZ3fS5taW4tdy0we21pbi13aWR0aDowcHh9Lm1pbi13LVxbMjAwcHhcXXttaW4td2lkdGg6MjAwcHh9Lm1pbi13LVxbMzIwcHhcXXttaW4td2lkdGg6MzIwcHh9Lm1pbi13LVxbNTAwcHhcXXttaW4td2lkdGg6NTAwcHh9Lm1pbi13LVxbOHJlbVxde21pbi13aWR0aDo4cmVtfS5taW4tdy1cW3ZhclwoLS1yYWRpeC1zZWxlY3QtdHJpZ2dlci13aWR0aFwpXF17bWluLXdpZHRoOnZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoKX0ubWF4LXctXFsxMDAwcHhcXXttYXgtd2lkdGg6MTAwMHB4fS5tYXgtdy1cWzEwdndcXXttYXgtd2lkdGg6MTB2d30ubWF4LXctXFszMDBweFxde21heC13aWR0aDozMDBweH0ubWF4LXctXFs5MHZ3XF17bWF4LXdpZHRoOjkwdnd9Lm1heC13LWxne21heC13aWR0aDozMnJlbX0ubWF4LXcteGx7bWF4LXdpZHRoOjM2cmVtfS5mbGV4LTF7ZmxleDoxIDEgMCV9LmZsZXgtYXV0b3tmbGV4OjEgMSBhdXRvfS5mbGV4LXNocmluay0wLC5zaHJpbmstMHtmbGV4LXNocmluazowfS5mbGV4LWdyb3d7ZmxleC1ncm93OjF9LmJvcmRlci1jb2xsYXBzZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9Li10cmFuc2xhdGUteS0xXC8yey0tdHctdHJhbnNsYXRlLXk6IC01MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LnRyYW5zbGF0ZS14LVxbLTUwXCVcXXstLXR3LXRyYW5zbGF0ZS14OiAtNTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS50cmFuc2xhdGUteS1cWy01MFwlXF17LS10dy10cmFuc2xhdGUteTogLTUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uLXJvdGF0ZS05MHstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtOTB7LS10dy1yb3RhdGU6IDkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFstOTBkZWdcXXstLXR3LXJvdGF0ZTogLTkwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5yb3RhdGUtXFs5MGRlZ1xdey0tdHctcm90YXRlOiA5MGRlZzt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0udHJhbnNmb3Jte3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5jdXJzb3ItY29sLXJlc2l6ZXtjdXJzb3I6Y29sLXJlc2l6ZX0uY3Vyc29yLWRlZmF1bHR7Y3Vyc29yOmRlZmF1bHR9LmN1cnNvci1ncmFie2N1cnNvcjpncmFifS5jdXJzb3ItcG9pbnRlcntjdXJzb3I6cG9pbnRlcn0uY3Vyc29yLXNlLXJlc2l6ZXtjdXJzb3I6c2UtcmVzaXplfS50b3VjaC1ub25le3RvdWNoLWFjdGlvbjpub25lfS5zZWxlY3Qtbm9uZXstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnJlc2l6ZS1ub25le3Jlc2l6ZTpub25lfS5yZXNpemV7cmVzaXplOmJvdGh9Lmxpc3QtZGVjaW1hbHtsaXN0LXN0eWxlLXR5cGU6ZGVjaW1hbH0ubGlzdC1kaXNje2xpc3Qtc3R5bGUtdHlwZTpkaXNjfS5ncmlkLWNvbHMtXFsxZnJfbWluLWNvbnRlbnRcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIG1pbi1jb250ZW50fS5ncmlkLWNvbHMtXFttaW4tY29udGVudF8xZnJcXXtncmlkLXRlbXBsYXRlLWNvbHVtbnM6bWluLWNvbnRlbnQgMWZyfS5ncmlkLXJvd3MtXFsxZnJcLF9taW4tY29udGVudFxde2dyaWQtdGVtcGxhdGUtcm93czoxZnIgbWluLWNvbnRlbnR9LmZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uZmxleC1jb2x7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5mbGV4LWNvbC1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfS5pdGVtcy1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyfS5qdXN0aWZ5LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5qdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9Lmp1c3RpZnktY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZ2FwLTF7Z2FwOi4yNXJlbX0uZ2FwLTJ7Z2FwOi41cmVtfS5nYXAtM3tnYXA6Ljc1cmVtfS5nYXAtNHtnYXA6MXJlbX0uZ2FwLTV7Z2FwOjEuMjVyZW19LmdhcC1cWzBcLjVlbVxde2dhcDouNWVtfS5nYXAtXFszNnB4XF17Z2FwOjM2cHh9LmdhcC14LTJ7LW1vei1jb2x1bW4tZ2FwOi41cmVtO2NvbHVtbi1nYXA6LjVyZW19LmdhcC14LTR7LW1vei1jb2x1bW4tZ2FwOjFyZW07Y29sdW1uLWdhcDoxcmVtfS5nYXAteC01ey1tb3otY29sdW1uLWdhcDoxLjI1cmVtO2NvbHVtbi1nYXA6MS4yNXJlbX0uZ2FwLXktMXtyb3ctZ2FwOi4yNXJlbX0uZ2FwLXktMntyb3ctZ2FwOi41cmVtfS5nYXAteS00e3Jvdy1nYXA6MXJlbX0uZ2FwLXktNXtyb3ctZ2FwOjEuMjVyZW19LnNwYWNlLXgtMT46bm90KFtoaWRkZW5dKX46bm90KFtoaWRkZW5dKXstLXR3LXNwYWNlLXgtcmV2ZXJzZTogMDttYXJnaW4tcmlnaHQ6Y2FsYyguMjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC4yNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXgtcmV2ZXJzZSkpKX0uc3BhY2UteS0xPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguMjVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4yNXJlbSAqIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpfS5zcGFjZS15LTFcLjU+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKC4zNzVyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC4zNzVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS0yPjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYyguNXJlbSAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS15LXJldmVyc2UpKX0uc3BhY2UteS00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteS1yZXZlcnNlOiAwO21hcmdpbi10b3A6Y2FsYygxcmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSkpO21hcmdpbi1ib3R0b206Y2FsYygxcmVtICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30ub3ZlcmZsb3ctaGlkZGVue292ZXJmbG93OmhpZGRlbn0ub3ZlcmZsb3ctY2xpcHtvdmVyZmxvdzpjbGlwfS5vdmVyZmxvdy1zY3JvbGx7b3ZlcmZsb3c6c2Nyb2xsfS5vdmVyZmxvdy15LWF1dG97b3ZlcmZsb3cteTphdXRvfS5vdmVyZmxvdy14LWhpZGRlbntvdmVyZmxvdy14OmhpZGRlbn0ub3ZlcmZsb3cteS1zY3JvbGx7b3ZlcmZsb3cteTpzY3JvbGx9LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0ud2hpdGVzcGFjZS1ub3dyYXB7d2hpdGUtc3BhY2U6bm93cmFwfS5yb3VuZGVke2JvcmRlci1yYWRpdXM6LjI1cmVtfS5yb3VuZGVkLVxbaW5oZXJpdFxde2JvcmRlci1yYWRpdXM6aW5oZXJpdH0ucm91bmRlZC1mdWxse2JvcmRlci1yYWRpdXM6OTk5OXB4fS5yb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0ucm91bmRlZC1tZHtib3JkZXItcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCl9LnJvdW5kZWQtc217Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5yb3VuZGVkLWItbm9uZXtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0ucm91bmRlZC1iLXNte2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDRweCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSA0cHgpfS5yb3VuZGVkLXQtbm9uZXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0uYm9yZGVye2JvcmRlci13aWR0aDoxcHh9LmJvcmRlci0yLC5ib3JkZXItXFsycHhcXXtib3JkZXItd2lkdGg6MnB4fS5ib3JkZXIteHtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweH0uYm9yZGVyLXl7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS13aWR0aDoxcHh9LmJvcmRlci1ie2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5ib3JkZXItYi0we2JvcmRlci1ib3R0b20td2lkdGg6MHB4fS5ib3JkZXItYi0ye2JvcmRlci1ib3R0b20td2lkdGg6MnB4fS5ib3JkZXItbHtib3JkZXItbGVmdC13aWR0aDoxcHh9LmJvcmRlci1sLTJ7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5ib3JkZXItcntib3JkZXItcmlnaHQtd2lkdGg6MXB4fS5ib3JkZXItdHtib3JkZXItdG9wLXdpZHRoOjFweH0uYm9yZGVyLXQtMHtib3JkZXItdG9wLXdpZHRoOjBweH0uYm9yZGVyLWFjY2VudHtib3JkZXItY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ib3JkZXItYm9yZGVye2JvcmRlci1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJvcmRlci1ncmF5LTQwMHstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMTU2IDE2MyAxNzUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfS5ib3JkZXItaW5wdXR7Ym9yZGVyLWNvbG9yOmhzbCh2YXIoLS1pbnB1dCkpfS5ib3JkZXItcHJpbWFyeXtib3JkZXItY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uYm9yZGVyLXRyYW5zcGFyZW50e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uYm9yZGVyLWwtdHJhbnNwYXJlbnR7Ym9yZGVyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnR9LmJvcmRlci10LXRyYW5zcGFyZW50e2JvcmRlci10b3AtY29sb3I6dHJhbnNwYXJlbnR9LmJnLWFjY2VudHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uYmctYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmJnLWJhY2tncm91bmRcLzgwe2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpIC8gLjgpfS5iZy1ib3JkZXJ7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYm9yZGVyKSl9LmJnLWNhcmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZCkpfS5iZy1jYXJkLWZvcmVncm91bmR7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tY2FyZC1mb3JlZ3JvdW5kKSl9LmJnLWRlc3RydWN0aXZle2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSl9LmJnLWdyYXktMzAwey0tdHctYmctb3BhY2l0eTogMTtiYWNrZ3JvdW5kLWNvbG9yOnJnYigyMDkgMjEzIDIxOSAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctZ3JheS01MDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDEwNyAxMTQgMTI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5iZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1tdXRlZCkpfS5iZy1wb3BvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXBvcG92ZXIpKX0uYmctcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmJnLXJlZC01MDB7LS10dy1iZy1vcGFjaXR5OiAxO2JhY2tncm91bmQtY29sb3I6cmdiKDIzOSA2OCA2OCAvIHZhcigtLXR3LWJnLW9wYWNpdHkpKX0uYmctc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXNlY29uZGFyeSkpfS5iZy10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5iZy13aGl0ZXstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1iZy1vcGFjaXR5KSl9LmJnLWdyYWRpZW50LXRvLWJ7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHZhcigtLXR3LWdyYWRpZW50LXN0b3BzKSl9LmJnLWdyYWRpZW50LXRvLWJye2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSByaWdodCx2YXIoLS10dy1ncmFkaWVudC1zdG9wcykpfS5mcm9tLWJhY2tncm91bmRcLzkwey0tdHctZ3JhZGllbnQtZnJvbTogaHNsKHZhcigtLWJhY2tncm91bmQpIC8gLjkpIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLWNhcmR7LS10dy1ncmFkaWVudC1mcm9tOiBoc2wodmFyKC0tY2FyZCkpIHZhcigtLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1jYXJkKSAvIDApIHZhcigtLXR3LWdyYWRpZW50LXRvLXBvc2l0aW9uKTstLXR3LWdyYWRpZW50LXN0b3BzOiB2YXIoLS10dy1ncmFkaWVudC1mcm9tKSwgdmFyKC0tdHctZ3JhZGllbnQtdG8pfS5mcm9tLXRyYW5zcGFyZW50ey0tdHctZ3JhZGllbnQtZnJvbTogdHJhbnNwYXJlbnQgdmFyKC0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbik7LS10dy1ncmFkaWVudC10bzogcmdiKDAgMCAwIC8gMCkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pOy0tdHctZ3JhZGllbnQtc3RvcHM6IHZhcigtLXR3LWdyYWRpZW50LWZyb20pLCB2YXIoLS10dy1ncmFkaWVudC10byl9LmZyb20tNDBcJXstLXR3LWdyYWRpZW50LWZyb20tcG9zaXRpb246IDQwJX0uZnJvbS01MFwley0tdHctZ3JhZGllbnQtZnJvbS1wb3NpdGlvbjogNTAlfS50by1iYWNrZ3JvdW5key0tdHctZ3JhZGllbnQtdG86IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSkgdmFyKC0tdHctZ3JhZGllbnQtdG8tcG9zaXRpb24pfS5maWxsLWN1cnJlbnR7ZmlsbDpjdXJyZW50Q29sb3J9LmZpbGwtd2hpdGV7ZmlsbDojZmZmfS5zdHJva2UtXFsycHhcXXtzdHJva2Utd2lkdGg6MnB4fS5zdHJva2UtXFszcHhcXXtzdHJva2Utd2lkdGg6M3B4fS5vYmplY3QtY29udGFpbnstby1vYmplY3QtZml0OmNvbnRhaW47b2JqZWN0LWZpdDpjb250YWlufS5wLTB7cGFkZGluZzowfS5wLTF7cGFkZGluZzouMjVyZW19LnAtMTB7cGFkZGluZzoyLjVyZW19LnAtMntwYWRkaW5nOi41cmVtfS5wLTN7cGFkZGluZzouNzVyZW19LnAtNHtwYWRkaW5nOjFyZW19LnAtNntwYWRkaW5nOjEuNXJlbX0ucC04e3BhZGRpbmc6MnJlbX0ucC1cWzFweFxde3BhZGRpbmc6MXB4fS5weC0xe3BhZGRpbmctbGVmdDouMjVyZW07cGFkZGluZy1yaWdodDouMjVyZW19LnB4LTJ7cGFkZGluZy1sZWZ0Oi41cmVtO3BhZGRpbmctcmlnaHQ6LjVyZW19LnB4LTJcLjV7cGFkZGluZy1sZWZ0Oi42MjVyZW07cGFkZGluZy1yaWdodDouNjI1cmVtfS5weC0ze3BhZGRpbmctbGVmdDouNzVyZW07cGFkZGluZy1yaWdodDouNzVyZW19LnB4LTR7cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5weC01e3BhZGRpbmctbGVmdDoxLjI1cmVtO3BhZGRpbmctcmlnaHQ6MS4yNXJlbX0ucHgtOHtwYWRkaW5nLWxlZnQ6MnJlbTtwYWRkaW5nLXJpZ2h0OjJyZW19LnB4LVxbMjRweFxde3BhZGRpbmctbGVmdDoyNHB4O3BhZGRpbmctcmlnaHQ6MjRweH0ucHgtXFsycHhcXXtwYWRkaW5nLWxlZnQ6MnB4O3BhZGRpbmctcmlnaHQ6MnB4fS5weS0xe3BhZGRpbmctdG9wOi4yNXJlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LnB5LTFcLjV7cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5weS0ye3BhZGRpbmctdG9wOi41cmVtO3BhZGRpbmctYm90dG9tOi41cmVtfS5weS0ze3BhZGRpbmctdG9wOi43NXJlbTtwYWRkaW5nLWJvdHRvbTouNzVyZW19LnB5LTR7cGFkZGluZy10b3A6MXJlbTtwYWRkaW5nLWJvdHRvbToxcmVtfS5weS02e3BhZGRpbmctdG9wOjEuNXJlbTtwYWRkaW5nLWJvdHRvbToxLjVyZW19LnB5LTd7cGFkZGluZy10b3A6MS43NXJlbTtwYWRkaW5nLWJvdHRvbToxLjc1cmVtfS5weS1cWzJweFxde3BhZGRpbmctdG9wOjJweDtwYWRkaW5nLWJvdHRvbToycHh9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItMjB7cGFkZGluZy1ib3R0b206NXJlbX0ucGItNHtwYWRkaW5nLWJvdHRvbToxcmVtfS5wYi04e3BhZGRpbmctYm90dG9tOjJyZW19LnBsLTB7cGFkZGluZy1sZWZ0OjB9LnBsLTZ7cGFkZGluZy1sZWZ0OjEuNXJlbX0ucGwtOHtwYWRkaW5nLWxlZnQ6MnJlbX0ucGwtXFszMDBweFxde3BhZGRpbmctbGVmdDozMDBweH0ucHItMntwYWRkaW5nLXJpZ2h0Oi41cmVtfS5wdC0we3BhZGRpbmctdG9wOjB9LnB0LTF7cGFkZGluZy10b3A6LjI1cmVtfS5wdC0ye3BhZGRpbmctdG9wOi41cmVtfS5wdC00e3BhZGRpbmctdG9wOjFyZW19LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS50ZXh0LXN0YXJ0e3RleHQtYWxpZ246c3RhcnR9LmZvbnQtc2Fuc3tmb250LWZhbWlseTpSb2JvdG8sc2Fucy1zZXJpZn0uZm9udC1zZXJpZntmb250LWZhbWlseTpTcGFjZSBNb25vLG1vbm9zcGFjZX0udGV4dC0yeGx7Zm9udC1zaXplOjEuNXJlbTtsaW5lLWhlaWdodDoycmVtfS50ZXh0LTN4bHtmb250LXNpemU6MS44NzVyZW07bGluZS1oZWlnaHQ6Mi4yNXJlbX0udGV4dC00eGx7Zm9udC1zaXplOjIuMjVyZW07bGluZS1oZWlnaHQ6Mi41cmVtfS50ZXh0LVxbMFwuOHJlbVxde2ZvbnQtc2l6ZTouOHJlbX0udGV4dC1cWzEycHhcXXtmb250LXNpemU6MTJweH0udGV4dC1sZ3tmb250LXNpemU6MS4xMjVyZW07bGluZS1oZWlnaHQ6MS43NXJlbX0udGV4dC1zbXtmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS50ZXh0LXhse2ZvbnQtc2l6ZToxLjI1cmVtO2xpbmUtaGVpZ2h0OjEuNzVyZW19LnRleHQteHN7Zm9udC1zaXplOi43NXJlbTtsaW5lLWhlaWdodDoxcmVtfS5mb250LVxbMTJweFxde2ZvbnQtd2VpZ2h0OjEycHh9LmZvbnQtXFs0MDBcXXtmb250LXdlaWdodDo0MDB9LmZvbnQtXFs1MDBcXXtmb250LXdlaWdodDo1MDB9LmZvbnQtXFs1NTBcXXtmb250LXdlaWdodDo1NTB9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZvbnQtZXh0cmFib2xke2ZvbnQtd2VpZ2h0OjgwMH0uZm9udC1tZWRpdW17Zm9udC13ZWlnaHQ6NTAwfS5mb250LW5vcm1hbHtmb250LXdlaWdodDo0MDB9LmZvbnQtc2VtaWJvbGR7Zm9udC13ZWlnaHQ6NjAwfS51cHBlcmNhc2V7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5pdGFsaWN7Zm9udC1zdHlsZTppdGFsaWN9LmxlYWRpbmctNHtsaW5lLWhlaWdodDoxcmVtfS5sZWFkaW5nLW5vbmV7bGluZS1oZWlnaHQ6MX0udHJhY2tpbmctXFswXC4wNGVtXF17bGV0dGVyLXNwYWNpbmc6LjA0ZW19LnRyYWNraW5nLXRpZ2h0e2xldHRlci1zcGFjaW5nOi0uMDI1ZW19LnRyYWNraW5nLXdpZGVye2xldHRlci1zcGFjaW5nOi4wNWVtfS50cmFja2luZy13aWRlc3R7bGV0dGVyLXNwYWNpbmc6LjFlbX0udGV4dC1hY2NlbnR7Y29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS50ZXh0LWFjY2VudC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1hY2NlbnQtZm9yZWdyb3VuZCkpfS50ZXh0LWJhY2tncm91bmR7Y29sb3I6aHNsKHZhcigtLWJhY2tncm91bmQpKX0udGV4dC1jYXJkLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWNhcmQtZm9yZWdyb3VuZCkpfS50ZXh0LWN1cnJlbnR7Y29sb3I6Y3VycmVudENvbG9yfS50ZXh0LWRlc3RydWN0aXZle2NvbG9yOmhzbCh2YXIoLS1kZXN0cnVjdGl2ZSkpfS50ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlLWZvcmVncm91bmQpKX0udGV4dC1mb3JlZ3JvdW5ke2NvbG9yOmhzbCh2YXIoLS1mb3JlZ3JvdW5kKSl9LnRleHQtbXV0ZWR7Y29sb3I6aHNsKHZhcigtLW11dGVkKSl9LnRleHQtbXV0ZWQtZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS50ZXh0LXBvcG92ZXItZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcG9wb3Zlci1mb3JlZ3JvdW5kKSl9LnRleHQtcHJpbWFyeXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeSkpfS50ZXh0LXByaW1hcnktZm9yZWdyb3VuZHtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LnRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmR7Y29sb3I6aHNsKHZhcigtLXNlY29uZGFyeS1mb3JlZ3JvdW5kKSl9LnRleHQtd2hpdGV7LS10dy10ZXh0LW9wYWNpdHk6IDE7Y29sb3I6cmdiKDI1NSAyNTUgMjU1IC8gdmFyKC0tdHctdGV4dC1vcGFjaXR5KSl9LnVuZGVybGluZXt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmxpbmUtdGhyb3VnaHt0ZXh0LWRlY29yYXRpb24tbGluZTpsaW5lLXRocm91Z2h9LnVuZGVybGluZS1vZmZzZXQtNHt0ZXh0LXVuZGVybGluZS1vZmZzZXQ6NHB4fS5hbnRpYWxpYXNlZHstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0ub3BhY2l0eS0we29wYWNpdHk6MH0ub3BhY2l0eS0xMDB7b3BhY2l0eToxfS5vcGFjaXR5LTUwe29wYWNpdHk6LjV9Lm9wYWNpdHktNjB7b3BhY2l0eTouNn0ub3BhY2l0eS03MHtvcGFjaXR5Oi43fS5vcGFjaXR5LTc1e29wYWNpdHk6Ljc1fS5taXgtYmxlbmQtZGlmZmVyZW5jZXttaXgtYmxlbmQtbW9kZTpkaWZmZXJlbmNlfS5zaGFkb3d7LS10dy1zaGFkb3c6IDAgMXB4IDNweCAwIHJnYigwIDAgMCAvIC4xKSwgMCAxcHggMnB4IC0xcHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDNweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMXB4IDJweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LWxney0tdHctc2hhZG93OiAwIDEwcHggMTVweCAtM3B4IHJnYigwIDAgMCAvIC4xKSwgMCA0cHggNnB4IC00cHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMTBweCAxNXB4IC0zcHggdmFyKC0tdHctc2hhZG93LWNvbG9yKSwgMCA0cHggNnB4IC00cHggdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5zaGFkb3ctbWR7LS10dy1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IHJnYigwIDAgMCAvIC4xKSwgMCAycHggNHB4IC0ycHggcmdiKDAgMCAwIC8gLjEpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgNHB4IDZweCAtMXB4IHZhcigtLXR3LXNoYWRvdy1jb2xvciksIDAgMnB4IDRweCAtMnB4IHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0uc2hhZG93LXNtey0tdHctc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAuMDUpOy0tdHctc2hhZG93LWNvbG9yZWQ6IDAgMXB4IDJweCAwIHZhcigtLXR3LXNoYWRvdy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctcmluZy1zaGFkb3csIDAgMCAjMDAwMCksdmFyKC0tdHctc2hhZG93KX0ub3V0bGluZS1ub25le291dGxpbmU6MnB4IHNvbGlkIHRyYW5zcGFyZW50O291dGxpbmUtb2Zmc2V0OjJweH0ub3V0bGluZXtvdXRsaW5lLXN0eWxlOnNvbGlkfS5yaW5nLTB7LS10dy1yaW5nLW9mZnNldC1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSB2YXIoLS10dy1yaW5nLW9mZnNldC1jb2xvcik7LS10dy1yaW5nLXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgY2FsYygwcHggKyB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkpIHZhcigtLXR3LXJpbmctY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tdHctcmluZy1vZmZzZXQtc2hhZG93KSx2YXIoLS10dy1yaW5nLXNoYWRvdyksdmFyKC0tdHctc2hhZG93LCAwIDAgIzAwMDApfS5yaW5nLW9mZnNldC1iYWNrZ3JvdW5key0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRyb3Atc2hhZG93LTJ4bHstLXR3LWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdygwIDI1cHggMjVweCByZ2IoMCAwIDAgLyAuMTUpKTtmaWx0ZXI6dmFyKC0tdHctYmx1cikgdmFyKC0tdHctYnJpZ2h0bmVzcykgdmFyKC0tdHctY29udHJhc3QpIHZhcigtLXR3LWdyYXlzY2FsZSkgdmFyKC0tdHctaHVlLXJvdGF0ZSkgdmFyKC0tdHctaW52ZXJ0KSB2YXIoLS10dy1zYXR1cmF0ZSkgdmFyKC0tdHctc2VwaWEpIHZhcigtLXR3LWRyb3Atc2hhZG93KX0uZHJvcC1zaGFkb3ctXFswcHhfMHB4XzEycHhfaHNsXCh2YXJcKC0tYWNjZW50XClcKVxdey0tdHctZHJvcC1zaGFkb3c6IGRyb3Atc2hhZG93KDBweCAwcHggMTJweCBoc2wodmFyKC0tYWNjZW50KSkpO2ZpbHRlcjp2YXIoLS10dy1ibHVyKSB2YXIoLS10dy1icmlnaHRuZXNzKSB2YXIoLS10dy1jb250cmFzdCkgdmFyKC0tdHctZ3JheXNjYWxlKSB2YXIoLS10dy1odWUtcm90YXRlKSB2YXIoLS10dy1pbnZlcnQpIHZhcigtLXR3LXNhdHVyYXRlKSB2YXIoLS10dy1zZXBpYSkgdmFyKC0tdHctZHJvcC1zaGFkb3cpfS5maWx0ZXJ7ZmlsdGVyOnZhcigtLXR3LWJsdXIpIHZhcigtLXR3LWJyaWdodG5lc3MpIHZhcigtLXR3LWNvbnRyYXN0KSB2YXIoLS10dy1ncmF5c2NhbGUpIHZhcigtLXR3LWh1ZS1yb3RhdGUpIHZhcigtLXR3LWludmVydCkgdmFyKC0tdHctc2F0dXJhdGUpIHZhcigtLXR3LXNlcGlhKSB2YXIoLS10dy1kcm9wLXNoYWRvdyl9LmJhY2tkcm9wLWJsdXItbGd7LS10dy1iYWNrZHJvcC1ibHVyOiBibHVyKDE2cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1cikgdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcykgdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QpIHZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkgdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSkgdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0KSB2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSB2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSkgdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEpfS5iYWNrZHJvcC1ibHVyLXNtey0tdHctYmFja2Ryb3AtYmx1cjogYmx1cig0cHgpOy13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOnZhcigtLXR3LWJhY2tkcm9wLWJsdXIpIHZhcigtLXR3LWJhY2tkcm9wLWJyaWdodG5lc3MpIHZhcigtLXR3LWJhY2tkcm9wLWNvbnRyYXN0KSB2YXIoLS10dy1iYWNrZHJvcC1ncmF5c2NhbGUpIHZhcigtLXR3LWJhY2tkcm9wLWh1ZS1yb3RhdGUpIHZhcigtLXR3LWJhY2tkcm9wLWludmVydCkgdmFyKC0tdHctYmFja2Ryb3Atb3BhY2l0eSkgdmFyKC0tdHctYmFja2Ryb3Atc2F0dXJhdGUpIHZhcigtLXR3LWJhY2tkcm9wLXNlcGlhKTtiYWNrZHJvcC1maWx0ZXI6dmFyKC0tdHctYmFja2Ryb3AtYmx1cikgdmFyKC0tdHctYmFja2Ryb3AtYnJpZ2h0bmVzcykgdmFyKC0tdHctYmFja2Ryb3AtY29udHJhc3QpIHZhcigtLXR3LWJhY2tkcm9wLWdyYXlzY2FsZSkgdmFyKC0tdHctYmFja2Ryb3AtaHVlLXJvdGF0ZSkgdmFyKC0tdHctYmFja2Ryb3AtaW52ZXJ0KSB2YXIoLS10dy1iYWNrZHJvcC1vcGFjaXR5KSB2YXIoLS10dy1iYWNrZHJvcC1zYXR1cmF0ZSkgdmFyKC0tdHctYmFja2Ryb3Atc2VwaWEpfS50cmFuc2l0aW9uLWFsbHt0cmFuc2l0aW9uLXByb3BlcnR5OmFsbDt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tY29sb3Jze3RyYW5zaXRpb24tcHJvcGVydHk6Y29sb3IsYmFja2dyb3VuZC1jb2xvcixib3JkZXItY29sb3IsdGV4dC1kZWNvcmF0aW9uLWNvbG9yLGZpbGwsc3Ryb2tlO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30udHJhbnNpdGlvbi1vcGFjaXR5e3RyYW5zaXRpb24tcHJvcGVydHk6b3BhY2l0eTt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXN9LnRyYW5zaXRpb24tdHJhbnNmb3Jte3RyYW5zaXRpb24tcHJvcGVydHk6dHJhbnNmb3JtO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNCwwLC4yLDEpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMTUwe3RyYW5zaXRpb24tZHVyYXRpb246LjE1c30uZHVyYXRpb24tMjAwe3RyYW5zaXRpb24tZHVyYXRpb246LjJzfS5lYXNlLWluLW91dHt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX1Aa2V5ZnJhbWVzIGVudGVyezAle29wYWNpdHk6dmFyKC0tdHctZW50ZXItb3BhY2l0eSwgMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKHZhcigtLXR3LWVudGVyLXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1lbnRlci10cmFuc2xhdGUteSwgMCksMCkgc2NhbGUzZCh2YXIoLS10dy1lbnRlci1zY2FsZSwgMSksdmFyKC0tdHctZW50ZXItc2NhbGUsIDEpLHZhcigtLXR3LWVudGVyLXNjYWxlLCAxKSkgcm90YXRlKHZhcigtLXR3LWVudGVyLXJvdGF0ZSwgMCkpfX1Aa2V5ZnJhbWVzIGV4aXR7dG97b3BhY2l0eTp2YXIoLS10dy1leGl0LW9wYWNpdHksIDEpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCh2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS14LCAwKSx2YXIoLS10dy1leGl0LXRyYW5zbGF0ZS15LCAwKSwwKSBzY2FsZTNkKHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpLHZhcigtLXR3LWV4aXQtc2NhbGUsIDEpKSByb3RhdGUodmFyKC0tdHctZXhpdC1yb3RhdGUsIDApKX19LmFuaW1hdGUtaW57YW5pbWF0aW9uLW5hbWU6ZW50ZXI7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1lbnRlci1vcGFjaXR5OiBpbml0aWFsOy0tdHctZW50ZXItc2NhbGU6IGluaXRpYWw7LS10dy1lbnRlci1yb3RhdGU6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteDogaW5pdGlhbDstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiBpbml0aWFsfS5mYWRlLWluLTB7LS10dy1lbnRlci1vcGFjaXR5OiAwfS56b29tLWluLTk1ey0tdHctZW50ZXItc2NhbGU6IC45NX0uZHVyYXRpb24tMTUwe2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzfS5kdXJhdGlvbi0yMDB7YW5pbWF0aW9uLWR1cmF0aW9uOi4yc30uZWFzZS1pbi1vdXR7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoLjQsMCwuMiwxKX0uZmlsZVw6Ym9yZGVyLTA6OmZpbGUtc2VsZWN0b3ItYnV0dG9ue2JvcmRlci13aWR0aDowcHh9LmZpbGVcOmJnLXRyYW5zcGFyZW50OjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5maWxlXDp0ZXh0LXNtOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbntmb250LXNpemU6Ljg3NXJlbTtsaW5lLWhlaWdodDoxLjI1cmVtfS5maWxlXDpmb250LW1lZGl1bTo6ZmlsZS1zZWxlY3Rvci1idXR0b257Zm9udC13ZWlnaHQ6NTAwfS5wbGFjZWhvbGRlclw6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LnBsYWNlaG9sZGVyXDp0ZXh0LW11dGVkLWZvcmVncm91bmQ6OnBsYWNlaG9sZGVye2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmZvY3VzLXdpdGhpblw6cmVsYXRpdmU6Zm9jdXMtd2l0aGlue3Bvc2l0aW9uOnJlbGF0aXZlfS5ob3Zlclw6dy1cWzJweFxdOmhvdmVye3dpZHRoOjJweH0uaG92ZXJcOnctXFszcHhcXTpob3Zlcnt3aWR0aDozcHh9LmhvdmVyXDpjdXJzb3ItcG9pbnRlcjpob3ZlcntjdXJzb3I6cG9pbnRlcn0uaG92ZXJcOnJvdW5kZWQtbGc6aG92ZXJ7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMpfS5ob3Zlclw6YmctYWNjZW50OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5ob3Zlclw6YmctYm9yZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWJvcmRlcikpfS5ob3Zlclw6YmctZGVzdHJ1Y3RpdmVcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLWRlc3RydWN0aXZlKSAvIC45KX0uaG92ZXJcOmJnLW11dGVkOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLW11dGVkKSl9LmhvdmVyXDpiZy1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uaG92ZXJcOmJnLXByaW1hcnlcLzkwOmhvdmVye2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpIC8gLjkpfS5ob3Zlclw6YmctcmVkLTcwMDpob3ZlcnstLXR3LWJnLW9wYWNpdHk6IDE7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMTg1IDI4IDI4IC8gdmFyKC0tdHctYmctb3BhY2l0eSkpfS5ob3Zlclw6Ymctc2Vjb25kYXJ5XC84MDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1zZWNvbmRhcnkpIC8gLjgpfS5ob3Zlclw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uaG92ZXJcOnRleHQtbXV0ZWQtZm9yZWdyb3VuZDpob3Zlcntjb2xvcjpoc2wodmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQ6aG92ZXJ7Y29sb3I6aHNsKHZhcigtLXByaW1hcnktZm9yZWdyb3VuZCkpfS5ob3Zlclw6dGV4dC13aGl0ZTpob3ZlcnstLXR3LXRleHQtb3BhY2l0eTogMTtjb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy10ZXh0LW9wYWNpdHkpKX0uaG92ZXJcOnVuZGVybGluZTpob3Zlcnt0ZXh0LWRlY29yYXRpb24tbGluZTp1bmRlcmxpbmV9LmhvdmVyXDpvcGFjaXR5LTEwMDpob3ZlcntvcGFjaXR5OjF9LmZvY3VzXDpiZy1hY2NlbnQ6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmZvY3VzXDpiZy1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZm9jdXNcOnRleHQtYWNjZW50LWZvcmVncm91bmQ6Zm9jdXN7Y29sb3I6aHNsKHZhcigtLWFjY2VudC1mb3JlZ3JvdW5kKSl9LmZvY3VzXDp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZDpmb2N1c3tjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmZvY3VzXDpvdXRsaW5lLW5vbmU6Zm9jdXN7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1c1w6cmluZy0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCB2YXIoLS10dy1yaW5nLW9mZnNldC13aWR0aCkgdmFyKC0tdHctcmluZy1vZmZzZXQtY29sb3IpOy0tdHctcmluZy1zaGFkb3c6IHZhcigtLXR3LXJpbmctaW5zZXQpIDAgMCAwIGNhbGMoMnB4ICsgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpKSB2YXIoLS10dy1yaW5nLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdyksdmFyKC0tdHctcmluZy1zaGFkb3cpLHZhcigtLXR3LXNoYWRvdywgMCAwICMwMDAwKX0uZm9jdXNcOnJpbmctcmluZzpmb2N1c3stLXR3LXJpbmctY29sb3I6IGhzbCh2YXIoLS1yaW5nKSl9LmZvY3VzXDpyaW5nLW9mZnNldC0yOmZvY3Vzey0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6b3V0bGluZS1ub25lOmZvY3VzLXZpc2libGV7b3V0bGluZToycHggc29saWQgdHJhbnNwYXJlbnQ7b3V0bGluZS1vZmZzZXQ6MnB4fS5mb2N1cy12aXNpYmxlXDpvdXRsaW5lLWFjY2VudDpmb2N1cy12aXNpYmxle291dGxpbmUtY29sb3I6aHNsKHZhcigtLWFjY2VudCkpfS5mb2N1cy12aXNpYmxlXDpyaW5nLTI6Zm9jdXMtdmlzaWJsZXstLXR3LXJpbmctb2Zmc2V0LXNoYWRvdzogdmFyKC0tdHctcmluZy1pbnNldCkgMCAwIDAgdmFyKC0tdHctcmluZy1vZmZzZXQtd2lkdGgpIHZhcigtLXR3LXJpbmctb2Zmc2V0LWNvbG9yKTstLXR3LXJpbmctc2hhZG93OiB2YXIoLS10dy1yaW5nLWluc2V0KSAwIDAgMCBjYWxjKDJweCArIHZhcigtLXR3LXJpbmctb2Zmc2V0LXdpZHRoKSkgdmFyKC0tdHctcmluZy1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS10dy1yaW5nLW9mZnNldC1zaGFkb3cpLHZhcigtLXR3LXJpbmctc2hhZG93KSx2YXIoLS10dy1zaGFkb3csIDAgMCAjMDAwMCl9LmZvY3VzLXZpc2libGVcOnJpbmctcmluZzpmb2N1cy12aXNpYmxley0tdHctcmluZy1jb2xvcjogaHNsKHZhcigtLXJpbmcpKX0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtMjpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtd2lkdGg6IDJweH0uZm9jdXMtdmlzaWJsZVw6cmluZy1vZmZzZXQtYmFja2dyb3VuZDpmb2N1cy12aXNpYmxley0tdHctcmluZy1vZmZzZXQtY29sb3I6IGhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpwb2ludGVyLWV2ZW50cy1ub25lOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LmRpc2FibGVkXDpjdXJzb3Itbm90LWFsbG93ZWQ6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5kaXNhYmxlZFw6dGV4dC1iYWNrZ3JvdW5kOmRpc2FibGVke2NvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRpc2FibGVkXDpvcGFjaXR5LTUwOmRpc2FibGVke29wYWNpdHk6LjV9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOmN1cnNvci1ub3QtYWxsb3dlZHtjdXJzb3I6bm90LWFsbG93ZWR9LnBlZXI6ZGlzYWJsZWR+LnBlZXItZGlzYWJsZWRcOm9wYWNpdHktNzB7b3BhY2l0eTouN30uYXJpYS1zZWxlY3RlZFw6YmctYWNjZW50W2FyaWEtc2VsZWN0ZWQ9dHJ1ZV17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmFyaWEtc2VsZWN0ZWRcOnRleHQtYWNjZW50LWZvcmVncm91bmRbYXJpYS1zZWxlY3RlZD10cnVlXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uYXJpYS1zZWxlY3RlZFw6b3BhY2l0eS0xMDBbYXJpYS1zZWxlY3RlZD10cnVlXXtvcGFjaXR5OjF9LmRhdGEtXFtkaXNhYmxlZFxdXDpwb2ludGVyLWV2ZW50cy1ub25lW2RhdGEtZGlzYWJsZWRde3BvaW50ZXItZXZlbnRzOm5vbmV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6dHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9Ym90dG9tXXstLXR3LXRyYW5zbGF0ZS15OiAuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOi10cmFuc2xhdGUteC0xW2RhdGEtc2lkZT1sZWZ0XXstLXR3LXRyYW5zbGF0ZS14OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc2lkZVw9cmlnaHRcXVw6dHJhbnNsYXRlLXgtMVtkYXRhLXNpZGU9cmlnaHRdey0tdHctdHJhbnNsYXRlLXg6IC4yNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX0uZGF0YS1cW3NpZGVcPXRvcFxdXDotdHJhbnNsYXRlLXktMVtkYXRhLXNpZGU9dG9wXXstLXR3LXRyYW5zbGF0ZS15OiAtLjI1cmVtO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dHJhbnNsYXRlLXgtNVtkYXRhLXN0YXRlPWNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDEuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSh2YXIoLS10dy10cmFuc2xhdGUteCksdmFyKC0tdHctdHJhbnNsYXRlLXkpKSByb3RhdGUodmFyKC0tdHctcm90YXRlKSkgc2tldyh2YXIoLS10dy1za2V3LXgpKSBza2V3WSh2YXIoLS10dy1za2V3LXkpKSBzY2FsZVgodmFyKC0tdHctc2NhbGUteCkpIHNjYWxlWSh2YXIoLS10dy1zY2FsZS15KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOnRyYW5zbGF0ZS14LTBbZGF0YS1zdGF0ZT11bmNoZWNrZWRdey0tdHctdHJhbnNsYXRlLXg6IDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKHZhcigtLXR3LXRyYW5zbGF0ZS14KSx2YXIoLS10dy10cmFuc2xhdGUteSkpIHJvdGF0ZSh2YXIoLS10dy1yb3RhdGUpKSBza2V3KHZhcigtLXR3LXNrZXcteCkpIHNrZXdZKHZhcigtLXR3LXNrZXcteSkpIHNjYWxlWCh2YXIoLS10dy1zY2FsZS14KSkgc2NhbGVZKHZhcigtLXR3LXNjYWxlLXkpKX1Aa2V5ZnJhbWVzIGFjY29yZGlvbi11cHswJXtoZWlnaHQ6dmFyKC0tcmFkaXgtYWNjb3JkaW9uLWNvbnRlbnQtaGVpZ2h0KX10b3toZWlnaHQ6MH19LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOmFuaW1hdGUtYWNjb3JkaW9uLXVwW2RhdGEtc3RhdGU9Y2xvc2VkXXthbmltYXRpb246YWNjb3JkaW9uLXVwIC4ycyBlYXNlLW91dH1Aa2V5ZnJhbWVzIGFjY29yZGlvbi1kb3duezAle2hlaWdodDowfXRve2hlaWdodDp2YXIoLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQpfX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOmFuaW1hdGUtYWNjb3JkaW9uLWRvd25bZGF0YS1zdGF0ZT1vcGVuXXthbmltYXRpb246YWNjb3JkaW9uLWRvd24gLjJzIGVhc2Utb3V0fS5kYXRhLVxbc3RhdGVcPWFjdGl2ZVxdXDpiZy1iYWNrZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1iYWNrZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9Y2hlY2tlZFxdXDpiZy1hY2NlbnRbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZGF0YS1cW3N0YXRlXD1jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT1jaGVja2VkXXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1wcmltYXJ5KSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b25dLC5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YmctYWNjZW50W2RhdGEtc3RhdGU9b3Blbl17YmFja2dyb3VuZC1jb2xvcjpoc2wodmFyKC0tYWNjZW50KSl9LmRhdGEtXFtzdGF0ZVw9dW5jaGVja2VkXF1cOmJnLXByaW1hcnlbZGF0YS1zdGF0ZT11bmNoZWNrZWRde2JhY2tncm91bmQtY29sb3I6aHNsKHZhcigtLXByaW1hcnkpKX0uZGF0YS1cW3N0YXRlXD1hY3RpdmVcXVw6dGV4dC1mb3JlZ3JvdW5kW2RhdGEtc3RhdGU9YWN0aXZlXXtjb2xvcjpoc2wodmFyKC0tZm9yZWdyb3VuZCkpfS5kYXRhLVxbc3RhdGVcPWNoZWNrZWRcXVw6dGV4dC1wcmltYXJ5LWZvcmVncm91bmRbZGF0YS1zdGF0ZT1jaGVja2VkXXtjb2xvcjpoc2wodmFyKC0tcHJpbWFyeS1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtzdGF0ZVw9b25cXVw6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9uXXtjb2xvcjpoc2wodmFyKC0tYWNjZW50LWZvcmVncm91bmQpKX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnRleHQtbXV0ZWQtZm9yZWdyb3VuZFtkYXRhLXN0YXRlPW9wZW5de2NvbG9yOmhzbCh2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kKSl9LmRhdGEtXFtkaXNhYmxlZFxdXDpvcGFjaXR5LTUwW2RhdGEtZGlzYWJsZWRde29wYWNpdHk6LjV9LmRhdGEtXFtzdGF0ZVw9YWN0aXZlXF1cOnNoYWRvdy1zbVtkYXRhLXN0YXRlPWFjdGl2ZV17LS10dy1zaGFkb3c6IDAgMXB4IDJweCAwIHJnYigwIDAgMCAvIC4wNSk7LS10dy1zaGFkb3ctY29sb3JlZDogMCAxcHggMnB4IDAgdmFyKC0tdHctc2hhZG93LWNvbG9yKTtib3gtc2hhZG93OnZhcigtLXR3LXJpbmctb2Zmc2V0LXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1yaW5nLXNoYWRvdywgMCAwICMwMDAwKSx2YXIoLS10dy1zaGFkb3cpfS5kYXRhLVxbc3RhdGVcPW9wZW5cXVw6YW5pbWF0ZS1pbltkYXRhLXN0YXRlPW9wZW5de2FuaW1hdGlvbi1uYW1lOmVudGVyO2FuaW1hdGlvbi1kdXJhdGlvbjouMTVzOy0tdHctZW50ZXItb3BhY2l0eTogaW5pdGlhbDstLXR3LWVudGVyLXNjYWxlOiBpbml0aWFsOy0tdHctZW50ZXItcm90YXRlOiBpbml0aWFsOy0tdHctZW50ZXItdHJhbnNsYXRlLXg6IGluaXRpYWw7LS10dy1lbnRlci10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6YW5pbWF0ZS1vdXRbZGF0YS1zdGF0ZT1jbG9zZWRde2FuaW1hdGlvbi1uYW1lOmV4aXQ7YW5pbWF0aW9uLWR1cmF0aW9uOi4xNXM7LS10dy1leGl0LW9wYWNpdHk6IGluaXRpYWw7LS10dy1leGl0LXNjYWxlOiBpbml0aWFsOy0tdHctZXhpdC1yb3RhdGU6IGluaXRpYWw7LS10dy1leGl0LXRyYW5zbGF0ZS14OiBpbml0aWFsOy0tdHctZXhpdC10cmFuc2xhdGUteTogaW5pdGlhbH0uZGF0YS1cW3N0YXRlXD1jbG9zZWRcXVw6ZmFkZS1vdXQtMFtkYXRhLXN0YXRlPWNsb3NlZF17LS10dy1leGl0LW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9b3BlblxdXDpmYWRlLWluLTBbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLW9wYWNpdHk6IDB9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnpvb20tb3V0LTk1W2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtc2NhbGU6IC45NX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnpvb20taW4tOTVbZGF0YS1zdGF0ZT1vcGVuXXstLXR3LWVudGVyLXNjYWxlOiAuOTV9LmRhdGEtXFtzaWRlXD1ib3R0b21cXVw6c2xpZGUtaW4tZnJvbS10b3AtMltkYXRhLXNpZGU9Ym90dG9tXXstLXR3LWVudGVyLXRyYW5zbGF0ZS15OiAtLjVyZW19LmRhdGEtXFtzaWRlXD1sZWZ0XF1cOnNsaWRlLWluLWZyb20tcmlnaHQtMltkYXRhLXNpZGU9bGVmdF17LS10dy1lbnRlci10cmFuc2xhdGUteDogLjVyZW19LmRhdGEtXFtzaWRlXD1yaWdodFxdXDpzbGlkZS1pbi1mcm9tLWxlZnQtMltkYXRhLXNpZGU9cmlnaHRdey0tdHctZW50ZXItdHJhbnNsYXRlLXg6IC0uNXJlbX0uZGF0YS1cW3NpZGVcPXRvcFxdXDpzbGlkZS1pbi1mcm9tLWJvdHRvbS0yW2RhdGEtc2lkZT10b3Bdey0tdHctZW50ZXItdHJhbnNsYXRlLXk6IC41cmVtfS5kYXRhLVxbc3RhdGVcPWNsb3NlZFxdXDpzbGlkZS1vdXQtdG8tbGVmdC0xXC8yW2RhdGEtc3RhdGU9Y2xvc2VkXXstLXR3LWV4aXQtdHJhbnNsYXRlLXg6IC01MCV9LmRhdGEtXFtzdGF0ZVw9Y2xvc2VkXF1cOnNsaWRlLW91dC10by10b3AtXFs0OFwlXF1bZGF0YS1zdGF0ZT1jbG9zZWRdey0tdHctZXhpdC10cmFuc2xhdGUteTogLTQ4JX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tbGVmdC0xXC8yW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteDogLTUwJX0uZGF0YS1cW3N0YXRlXD1vcGVuXF1cOnNsaWRlLWluLWZyb20tdG9wLVxbNDhcJVxdW2RhdGEtc3RhdGU9b3Blbl17LS10dy1lbnRlci10cmFuc2xhdGUteTogLTQ4JX06aXMoW2RhdGEtbW9kZT1kYXJrXSAuZGFya1w6Ym9yZGVyLXdoaXRlKXstLXR3LWJvcmRlci1vcGFjaXR5OiAxO2JvcmRlci1jb2xvcjpyZ2IoMjU1IDI1NSAyNTUgLyB2YXIoLS10dy1ib3JkZXItb3BhY2l0eSkpfUBtZWRpYSAobWluLXdpZHRoOiA2NDBweCl7LnNtXDptdC0we21hcmdpbi10b3A6MH0uc21cOmJsb2Nre2Rpc3BsYXk6YmxvY2t9LnNtXDpmbGV4LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3d9LnNtXDpqdXN0aWZ5LWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnNtXDpzcGFjZS14LTI+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS14LXJldmVyc2U6IDA7bWFyZ2luLXJpZ2h0OmNhbGMoLjVyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKC41cmVtICogY2FsYygxIC0gdmFyKC0tdHctc3BhY2UteC1yZXZlcnNlKSkpfS5zbVw6c3BhY2UteC00Pjpub3QoW2hpZGRlbl0pfjpub3QoW2hpZGRlbl0pey0tdHctc3BhY2UteC1yZXZlcnNlOiAwO21hcmdpbi1yaWdodDpjYWxjKDFyZW0gKiB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKTttYXJnaW4tbGVmdDpjYWxjKDFyZW0gKiBjYWxjKDEgLSB2YXIoLS10dy1zcGFjZS14LXJldmVyc2UpKSl9LnNtXDpzcGFjZS15LTA+Om5vdChbaGlkZGVuXSl+Om5vdChbaGlkZGVuXSl7LS10dy1zcGFjZS15LXJldmVyc2U6IDA7bWFyZ2luLXRvcDpjYWxjKDBweCAqIGNhbGMoMSAtIHZhcigtLXR3LXNwYWNlLXktcmV2ZXJzZSkpKTttYXJnaW4tYm90dG9tOmNhbGMoMHB4ICogdmFyKC0tdHctc3BhY2UteS1yZXZlcnNlKSl9LnNtXDpyb3VuZGVkLWxne2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKX0uc21cOnAtMHtwYWRkaW5nOjB9LnNtXDp0ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0fX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5tZFw6cmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9Lm1kXDpmbGV4e2Rpc3BsYXk6ZmxleH0ubWRcOmhpZGRlbntkaXNwbGF5Om5vbmV9Lm1kXDp3LVxbMzAwcHhcXXt3aWR0aDozMDBweH0ubWRcOnctZnVsbHt3aWR0aDoxMDAlfS5tZFw6cHgtNHtwYWRkaW5nLWxlZnQ6MXJlbTtwYWRkaW5nLXJpZ2h0OjFyZW19Lm1kXDpwbC0we3BhZGRpbmctbGVmdDowfX0uXFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOmJnLWFjY2VudDpoYXMoW2FyaWEtc2VsZWN0ZWRdKXtiYWNrZ3JvdW5kLWNvbG9yOmhzbCh2YXIoLS1hY2NlbnQpKX0uZmlyc3RcOlxbXCZcOmhhc1woXFthcmlhLXNlbGVjdGVkXF1cKVxdXDpyb3VuZGVkLWwtbWQ6aGFzKFthcmlhLXNlbGVjdGVkXSk6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0ubGFzdFw6XFtcJlw6aGFzXChcW2FyaWEtc2VsZWN0ZWRcXVwpXF1cOnJvdW5kZWQtci1tZDpoYXMoW2FyaWEtc2VsZWN0ZWRdKTpsYXN0LWNoaWxke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOmNhbGModmFyKC0tcmFkaXVzKSAtIDJweCk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6Y2FsYyh2YXIoLS1yYWRpdXMpIC0gMnB4KX0uXFtcJlxbZGF0YS1zdGF0ZVw9b3BlblxdXD5zdmdcXVw6cm90YXRlLTE4MFtkYXRhLXN0YXRlPW9wZW5dPnN2Z3stLXR3LXJvdGF0ZTogMTgwZGVnO3RyYW5zZm9ybTp0cmFuc2xhdGUodmFyKC0tdHctdHJhbnNsYXRlLXgpLHZhcigtLXR3LXRyYW5zbGF0ZS15KSkgcm90YXRlKHZhcigtLXR3LXJvdGF0ZSkpIHNrZXcodmFyKC0tdHctc2tldy14KSkgc2tld1kodmFyKC0tdHctc2tldy15KSkgc2NhbGVYKHZhcigtLXR3LXNjYWxlLXgpKSBzY2FsZVkodmFyKC0tdHctc2NhbGUteSkpfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6cHgtMiBbY21kay1ncm91cC1oZWFkaW5nXXtwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0uXFtcJl9cW2NtZGstZ3JvdXAtaGVhZGluZ1xdXF1cOnB5LTFcLjUgW2NtZGstZ3JvdXAtaGVhZGluZ117cGFkZGluZy10b3A6LjM3NXJlbTtwYWRkaW5nLWJvdHRvbTouMzc1cmVtfS5cW1wmX1xbY21kay1ncm91cC1oZWFkaW5nXF1cXVw6dGV4dC14cyBbY21kay1ncm91cC1oZWFkaW5nXXtmb250LXNpemU6Ljc1cmVtO2xpbmUtaGVpZ2h0OjFyZW19LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDpmb250LW1lZGl1bSBbY21kay1ncm91cC1oZWFkaW5nXXtmb250LXdlaWdodDo1MDB9LlxbXCZfXFtjbWRrLWdyb3VwLWhlYWRpbmdcXVxdXDp0ZXh0LW11dGVkLWZvcmVncm91bmQgW2NtZGstZ3JvdXAtaGVhZGluZ117Y29sb3I6aHNsKHZhcigtLW11dGVkLWZvcmVncm91bmQpKX0uXFtcJl9cW2NtZGstZ3JvdXBcXVw6bm90XChcW2hpZGRlblxdXClfXH5cW2NtZGstZ3JvdXBcXVxdXDpwdC0wIFtjbWRrLWdyb3VwXTpub3QoW2hpZGRlbl0pfltjbWRrLWdyb3VwXXtwYWRkaW5nLXRvcDowfS5cW1wmX1xbY21kay1ncm91cFxdXF1cOnB4LTIgW2NtZGstZ3JvdXBde3BhZGRpbmctbGVmdDouNXJlbTtwYWRkaW5nLXJpZ2h0Oi41cmVtfS5cW1wmX1xbY21kay1pbnB1dC13cmFwcGVyXF1fc3ZnXF1cOmgtNSBbY21kay1pbnB1dC13cmFwcGVyXSBzdmd7aGVpZ2h0OjEuMjVyZW19LlxbXCZfXFtjbWRrLWlucHV0LXdyYXBwZXJcXV9zdmdcXVw6dy01IFtjbWRrLWlucHV0LXdyYXBwZXJdIHN2Z3t3aWR0aDoxLjI1cmVtfS5cW1wmX1xbY21kay1pbnB1dFxdXF1cOmgtMTIgW2NtZGstaW5wdXRde2hlaWdodDozcmVtfS5cW1wmX1xbY21kay1pdGVtXF1cXVw6cHgtMiBbY21kay1pdGVtXXtwYWRkaW5nLWxlZnQ6LjVyZW07cGFkZGluZy1yaWdodDouNXJlbX0uXFtcJl9cW2NtZGstaXRlbVxdXF1cOnB5LTMgW2NtZGstaXRlbV17cGFkZGluZy10b3A6Ljc1cmVtO3BhZGRpbmctYm90dG9tOi43NXJlbX0uXFtcJl9cW2NtZGstaXRlbVxdX3N2Z1xdXDpoLTUgW2NtZGstaXRlbV0gc3Zne2hlaWdodDoxLjI1cmVtfS5cW1wmX1xbY21kay1pdGVtXF1fc3ZnXF1cOnctNSBbY21kay1pdGVtXSBzdmd7d2lkdGg6MS4yNXJlbX0K","/assets/index-URUxEXUs.js":"dmFyIGtrPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJGs9KHQsZSxuKT0+ZSBpbiB0P2trKHQsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bn0pOnRbZV09bjt2YXIgUWU9KHQsZSxuKT0+KCRrKHQsdHlwZW9mIGUhPSJzeW1ib2wiP2UrIiI6ZSxuKSxuKSxUaz0odCxlLG4pPT57aWYoIWUuaGFzKHQpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90ICIrbil9O3ZhciB1cD0odCxlLG4pPT57aWYoZS5oYXModCkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgYWRkIHRoZSBzYW1lIHByaXZhdGUgbWVtYmVyIG1vcmUgdGhhbiBvbmNlIik7ZSBpbnN0YW5jZW9mIFdlYWtTZXQ/ZS5hZGQodCk6ZS5zZXQodCxuKX07dmFyIFhjPSh0LGUsbik9PihUayh0LGUsImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLG4pO2Z1bmN0aW9uIEwxKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZVtuXTtpZih0eXBlb2YgciE9InN0cmluZyImJiFBcnJheS5pc0FycmF5KHIpKXtmb3IoY29uc3QgaSBpbiByKWlmKGkhPT0iZGVmYXVsdCImJiEoaSBpbiB0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsaSk7byYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsaSxvLmdldD9vOntlbnVtZXJhYmxlOiEwLGdldDooKT0+cltpXX0pfX19cmV0dXJuIE9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKX0oZnVuY3Rpb24oKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKS5yZWxMaXN0O2lmKGUmJmUuc3VwcG9ydHMmJmUuc3VwcG9ydHMoIm1vZHVsZXByZWxvYWQiKSlyZXR1cm47Zm9yKGNvbnN0IGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGlua1tyZWw9Im1vZHVsZXByZWxvYWQiXScpKXIoaSk7bmV3IE11dGF0aW9uT2JzZXJ2ZXIoaT0+e2Zvcihjb25zdCBvIG9mIGkpaWYoby50eXBlPT09ImNoaWxkTGlzdCIpZm9yKGNvbnN0IGwgb2Ygby5hZGRlZE5vZGVzKWwudGFnTmFtZT09PSJMSU5LIiYmbC5yZWw9PT0ibW9kdWxlcHJlbG9hZCImJnIobCl9KS5vYnNlcnZlKGRvY3VtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMH0pO2Z1bmN0aW9uIG4oaSl7Y29uc3Qgbz17fTtyZXR1cm4gaS5pbnRlZ3JpdHkmJihvLmludGVncml0eT1pLmludGVncml0eSksaS5yZWZlcnJlclBvbGljeSYmKG8ucmVmZXJyZXJQb2xpY3k9aS5yZWZlcnJlclBvbGljeSksaS5jcm9zc09yaWdpbj09PSJ1c2UtY3JlZGVudGlhbHMiP28uY3JlZGVudGlhbHM9ImluY2x1ZGUiOmkuY3Jvc3NPcmlnaW49PT0iYW5vbnltb3VzIj9vLmNyZWRlbnRpYWxzPSJvbWl0IjpvLmNyZWRlbnRpYWxzPSJzYW1lLW9yaWdpbiIsb31mdW5jdGlvbiByKGkpe2lmKGkuZXApcmV0dXJuO2kuZXA9ITA7Y29uc3Qgbz1uKGkpO2ZldGNoKGkuaHJlZixvKX19KSgpO2Z1bmN0aW9uIE9jKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJkZWZhdWx0Iik/dC5kZWZhdWx0OnR9dmFyIEQxPXtleHBvcnRzOnt9fSxQZT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogcmVhY3QucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBQYz1TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50IiksTms9U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIiksUms9U3ltYm9sLmZvcigicmVhY3QuZnJhZ21lbnQiKSxPaz1TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpLFBrPVN5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIiksQWs9U3ltYm9sLmZvcigicmVhY3QucHJvdmlkZXIiKSxNaz1TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0IiksTGs9U3ltYm9sLmZvcigicmVhY3QuZm9yd2FyZF9yZWYiKSxEaz1TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpLElrPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxqaz1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksX3k9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIHprKHQpe3JldHVybiB0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiP251bGw6KHQ9X3kmJnRbX3ldfHx0WyJAQGl0ZXJhdG9yIl0sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsKX12YXIgSTE9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGoxPU9iamVjdC5hc3NpZ24sejE9e307ZnVuY3Rpb24gRXModCxlLG4pe3RoaXMucHJvcHM9dCx0aGlzLmNvbnRleHQ9ZSx0aGlzLnJlZnM9ejEsdGhpcy51cGRhdGVyPW58fEkxfUVzLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXt9O0VzLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT0ib2JqZWN0IiYmdHlwZW9mIHQhPSJmdW5jdGlvbiImJnQhPW51bGwpdGhyb3cgRXJyb3IoInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLiIpO3RoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyx0LGUsInNldFN0YXRlIil9O0VzLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsdCwiZm9yY2VVcGRhdGUiKX07ZnVuY3Rpb24gRjEoKXt9RjEucHJvdG90eXBlPUVzLnByb3RvdHlwZTtmdW5jdGlvbiBhZyh0LGUsbil7dGhpcy5wcm9wcz10LHRoaXMuY29udGV4dD1lLHRoaXMucmVmcz16MSx0aGlzLnVwZGF0ZXI9bnx8STF9dmFyIGNnPWFnLnByb3RvdHlwZT1uZXcgRjE7Y2cuY29uc3RydWN0b3I9YWc7ajEoY2csRXMucHJvdG90eXBlKTtjZy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgd3k9QXJyYXkuaXNBcnJheSxCMT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHVnPXtjdXJyZW50Om51bGx9LFUxPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gVzEodCxlLG4pe3ZhciByLGk9e30sbz1udWxsLGw9bnVsbDtpZihlIT1udWxsKWZvcihyIGluIGUucmVmIT09dm9pZCAwJiYobD1lLnJlZiksZS5rZXkhPT12b2lkIDAmJihvPSIiK2Uua2V5KSxlKUIxLmNhbGwoZSxyKSYmIVUxLmhhc093blByb3BlcnR5KHIpJiYoaVtyXT1lW3JdKTt2YXIgcz1hcmd1bWVudHMubGVuZ3RoLTI7aWYocz09PTEpaS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxzKXtmb3IodmFyIGE9QXJyYXkocyksYz0wO2M8cztjKyspYVtjXT1hcmd1bWVudHNbYysyXTtpLmNoaWxkcmVuPWF9aWYodCYmdC5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gcz10LmRlZmF1bHRQcm9wcyxzKWlbcl09PT12b2lkIDAmJihpW3JdPXNbcl0pO3JldHVybnskJHR5cGVvZjpQYyx0eXBlOnQsa2V5Om8scmVmOmwscHJvcHM6aSxfb3duZXI6dWcuY3VycmVudH19ZnVuY3Rpb24gRmsodCxlKXtyZXR1cm57JCR0eXBlb2Y6UGMsdHlwZTp0LnR5cGUsa2V5OmUscmVmOnQucmVmLHByb3BzOnQucHJvcHMsX293bmVyOnQuX293bmVyfX1mdW5jdGlvbiBkZyh0KXtyZXR1cm4gdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmdC4kJHR5cGVvZj09PVBjfWZ1bmN0aW9uIEJrKHQpe3ZhciBlPXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiK3QucmVwbGFjZSgvWz06XS9nLGZ1bmN0aW9uKG4pe3JldHVybiBlW25dfSl9dmFyIFN5PS9cLysvZztmdW5jdGlvbiBkcCh0LGUpe3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZ0LmtleSE9bnVsbD9CaygiIit0LmtleSk6ZS50b1N0cmluZygzNil9ZnVuY3Rpb24gUnUodCxlLG4scixpKXt2YXIgbz10eXBlb2YgdDsobz09PSJ1bmRlZmluZWQifHxvPT09ImJvb2xlYW4iKSYmKHQ9bnVsbCk7dmFyIGw9ITE7aWYodD09PW51bGwpbD0hMDtlbHNlIHN3aXRjaChvKXtjYXNlInN0cmluZyI6Y2FzZSJudW1iZXIiOmw9ITA7YnJlYWs7Y2FzZSJvYmplY3QiOnN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIFBjOmNhc2UgTms6bD0hMH19aWYobClyZXR1cm4gbD10LGk9aShsKSx0PXI9PT0iIj8iLiIrZHAobCwwKTpyLHd5KGkpPyhuPSIiLHQhPW51bGwmJihuPXQucmVwbGFjZShTeSwiJCYvIikrIi8iKSxSdShpLGUsbiwiIixmdW5jdGlvbihjKXtyZXR1cm4gY30pKTppIT1udWxsJiYoZGcoaSkmJihpPUZrKGksbisoIWkua2V5fHxsJiZsLmtleT09PWkua2V5PyIiOigiIitpLmtleSkucmVwbGFjZShTeSwiJCYvIikrIi8iKSt0KSksZS5wdXNoKGkpKSwxO2lmKGw9MCxyPXI9PT0iIj8iLiI6cisiOiIsd3kodCkpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe289dFtzXTt2YXIgYT1yK2RwKG8scyk7bCs9UnUobyxlLG4sYSxpKX1lbHNlIGlmKGE9emsodCksdHlwZW9mIGE9PSJmdW5jdGlvbiIpZm9yKHQ9YS5jYWxsKHQpLHM9MDshKG89dC5uZXh0KCkpLmRvbmU7KW89by52YWx1ZSxhPXIrZHAobyxzKyspLGwrPVJ1KG8sZSxuLGEsaSk7ZWxzZSBpZihvPT09Im9iamVjdCIpdGhyb3cgZT1TdHJpbmcodCksRXJyb3IoIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogIisoZT09PSJbb2JqZWN0IE9iamVjdF0iPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOmUpKyIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuIik7cmV0dXJuIGx9ZnVuY3Rpb24gSmModCxlLG4pe2lmKHQ9PW51bGwpcmV0dXJuIHQ7dmFyIHI9W10saT0wO3JldHVybiBSdSh0LHIsIiIsIiIsZnVuY3Rpb24obyl7cmV0dXJuIGUuY2FsbChuLG8saSsrKX0pLHJ9ZnVuY3Rpb24gVWsodCl7aWYodC5fc3RhdHVzPT09LTEpe3ZhciBlPXQuX3Jlc3VsdDtlPWUoKSxlLnRoZW4oZnVuY3Rpb24obil7KHQuX3N0YXR1cz09PTB8fHQuX3N0YXR1cz09PS0xKSYmKHQuX3N0YXR1cz0xLHQuX3Jlc3VsdD1uKX0sZnVuY3Rpb24obil7KHQuX3N0YXR1cz09PTB8fHQuX3N0YXR1cz09PS0xKSYmKHQuX3N0YXR1cz0yLHQuX3Jlc3VsdD1uKX0pLHQuX3N0YXR1cz09PS0xJiYodC5fc3RhdHVzPTAsdC5fcmVzdWx0PWUpfWlmKHQuX3N0YXR1cz09PTEpcmV0dXJuIHQuX3Jlc3VsdC5kZWZhdWx0O3Rocm93IHQuX3Jlc3VsdH12YXIgd249e2N1cnJlbnQ6bnVsbH0sT3U9e3RyYW5zaXRpb246bnVsbH0sV2s9e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6d24sUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6T3UsUmVhY3RDdXJyZW50T3duZXI6dWd9O1BlLkNoaWxkcmVuPXttYXA6SmMsZm9yRWFjaDpmdW5jdGlvbih0LGUsbil7SmModCxmdW5jdGlvbigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxuKX0sY291bnQ6ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gSmModCxmdW5jdGlvbigpe2UrK30pLGV9LHRvQXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIEpjKHQsZnVuY3Rpb24oZSl7cmV0dXJuIGV9KXx8W119LG9ubHk6ZnVuY3Rpb24odCl7aWYoIWRnKHQpKXRocm93IEVycm9yKCJSZWFjdC5DaGlsZHJlbi5vbmx5IGV4cGVjdGVkIHRvIHJlY2VpdmUgYSBzaW5nbGUgUmVhY3QgZWxlbWVudCBjaGlsZC4iKTtyZXR1cm4gdH19O1BlLkNvbXBvbmVudD1FcztQZS5GcmFnbWVudD1SaztQZS5Qcm9maWxlcj1QaztQZS5QdXJlQ29tcG9uZW50PWFnO1BlLlN0cmljdE1vZGU9T2s7UGUuU3VzcGVuc2U9RGs7UGUuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9V2s7UGUuY2xvbmVFbGVtZW50PWZ1bmN0aW9uKHQsZSxuKXtpZih0PT1udWxsKXRocm93IEVycm9yKCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCAiK3QrIi4iKTt2YXIgcj1qMSh7fSx0LnByb3BzKSxpPXQua2V5LG89dC5yZWYsbD10Ll9vd25lcjtpZihlIT1udWxsKXtpZihlLnJlZiE9PXZvaWQgMCYmKG89ZS5yZWYsbD11Zy5jdXJyZW50KSxlLmtleSE9PXZvaWQgMCYmKGk9IiIrZS5rZXkpLHQudHlwZSYmdC50eXBlLmRlZmF1bHRQcm9wcyl2YXIgcz10LnR5cGUuZGVmYXVsdFByb3BzO2ZvcihhIGluIGUpQjEuY2FsbChlLGEpJiYhVTEuaGFzT3duUHJvcGVydHkoYSkmJihyW2FdPWVbYV09PT12b2lkIDAmJnMhPT12b2lkIDA/c1thXTplW2FdKX12YXIgYT1hcmd1bWVudHMubGVuZ3RoLTI7aWYoYT09PTEpci5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxhKXtzPUFycmF5KGEpO2Zvcih2YXIgYz0wO2M8YTtjKyspc1tjXT1hcmd1bWVudHNbYysyXTtyLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOlBjLHR5cGU6dC50eXBlLGtleTppLHJlZjpvLHByb3BzOnIsX293bmVyOmx9fTtQZS5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXskJHR5cGVvZjpNayxfY3VycmVudFZhbHVlOnQsX2N1cnJlbnRWYWx1ZTI6dCxfdGhyZWFkQ291bnQ6MCxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGwsX2RlZmF1bHRWYWx1ZTpudWxsLF9nbG9iYWxOYW1lOm51bGx9LHQuUHJvdmlkZXI9eyQkdHlwZW9mOkFrLF9jb250ZXh0OnR9LHQuQ29uc3VtZXI9dH07UGUuY3JlYXRlRWxlbWVudD1XMTtQZS5jcmVhdGVGYWN0b3J5PWZ1bmN0aW9uKHQpe3ZhciBlPVcxLmJpbmQobnVsbCx0KTtyZXR1cm4gZS50eXBlPXQsZX07UGUuY3JlYXRlUmVmPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbH19O1BlLmZvcndhcmRSZWY9ZnVuY3Rpb24odCl7cmV0dXJueyQkdHlwZW9mOkxrLHJlbmRlcjp0fX07UGUuaXNWYWxpZEVsZW1lbnQ9ZGc7UGUubGF6eT1mdW5jdGlvbih0KXtyZXR1cm57JCR0eXBlb2Y6amssX3BheWxvYWQ6e19zdGF0dXM6LTEsX3Jlc3VsdDp0fSxfaW5pdDpVa319O1BlLm1lbW89ZnVuY3Rpb24odCxlKXtyZXR1cm57JCR0eXBlb2Y6SWssdHlwZTp0LGNvbXBhcmU6ZT09PXZvaWQgMD9udWxsOmV9fTtQZS5zdGFydFRyYW5zaXRpb249ZnVuY3Rpb24odCl7dmFyIGU9T3UudHJhbnNpdGlvbjtPdS50cmFuc2l0aW9uPXt9O3RyeXt0KCl9ZmluYWxseXtPdS50cmFuc2l0aW9uPWV9fTtQZS51bnN0YWJsZV9hY3Q9ZnVuY3Rpb24oKXt0aHJvdyBFcnJvcigiYWN0KC4uLikgaXMgbm90IHN1cHBvcnRlZCBpbiBwcm9kdWN0aW9uIGJ1aWxkcyBvZiBSZWFjdC4iKX07UGUudXNlQ2FsbGJhY2s9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd24uY3VycmVudC51c2VDYWxsYmFjayh0LGUpfTtQZS51c2VDb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB3bi5jdXJyZW50LnVzZUNvbnRleHQodCl9O1BlLnVzZURlYnVnVmFsdWU9ZnVuY3Rpb24oKXt9O1BlLnVzZURlZmVycmVkVmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHduLmN1cnJlbnQudXNlRGVmZXJyZWRWYWx1ZSh0KX07UGUudXNlRWZmZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHduLmN1cnJlbnQudXNlRWZmZWN0KHQsZSl9O1BlLnVzZUlkPWZ1bmN0aW9uKCl7cmV0dXJuIHduLmN1cnJlbnQudXNlSWQoKX07UGUudXNlSW1wZXJhdGl2ZUhhbmRsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHduLmN1cnJlbnQudXNlSW1wZXJhdGl2ZUhhbmRsZSh0LGUsbil9O1BlLnVzZUluc2VydGlvbkVmZmVjdD1mdW5jdGlvbih0LGUpe3JldHVybiB3bi5jdXJyZW50LnVzZUluc2VydGlvbkVmZmVjdCh0LGUpfTtQZS51c2VMYXlvdXRFZmZlY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gd24uY3VycmVudC51c2VMYXlvdXRFZmZlY3QodCxlKX07UGUudXNlTWVtbz1mdW5jdGlvbih0LGUpe3JldHVybiB3bi5jdXJyZW50LnVzZU1lbW8odCxlKX07UGUudXNlUmVkdWNlcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHduLmN1cnJlbnQudXNlUmVkdWNlcih0LGUsbil9O1BlLnVzZVJlZj1mdW5jdGlvbih0KXtyZXR1cm4gd24uY3VycmVudC51c2VSZWYodCl9O1BlLnVzZVN0YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB3bi5jdXJyZW50LnVzZVN0YXRlKHQpfTtQZS51c2VTeW5jRXh0ZXJuYWxTdG9yZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHduLmN1cnJlbnQudXNlU3luY0V4dGVybmFsU3RvcmUodCxlLG4pfTtQZS51c2VUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHduLmN1cnJlbnQudXNlVHJhbnNpdGlvbigpfTtQZS52ZXJzaW9uPSIxOC4yLjAiO0QxLmV4cG9ydHM9UGU7dmFyIGg9RDEuZXhwb3J0cztjb25zdCBpZT1PYyhoKSxIMT1MMSh7X19wcm90b19fOm51bGwsZGVmYXVsdDppZX0sW2hdKTt2YXIgb2g9e30sVjE9e2V4cG9ydHM6e319LEtuPXt9LEsxPXtleHBvcnRzOnt9fSxaMT17fTsvKioKICogQGxpY2Vuc2UgUmVhY3QKICogc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi8oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShiLGope3ZhciB6PWIubGVuZ3RoO2IucHVzaChqKTtlOmZvcig7MDx6Oyl7dmFyIEc9ei0xPj4+MSxyZT1iW0ddO2lmKDA8aShyZSxqKSliW0ddPWosYlt6XT1yZSx6PUc7ZWxzZSBicmVhayBlfX1mdW5jdGlvbiBuKGIpe3JldHVybiBiLmxlbmd0aD09PTA/bnVsbDpiWzBdfWZ1bmN0aW9uIHIoYil7aWYoYi5sZW5ndGg9PT0wKXJldHVybiBudWxsO3ZhciBqPWJbMF0sej1iLnBvcCgpO2lmKHohPT1qKXtiWzBdPXo7ZTpmb3IodmFyIEc9MCxyZT1iLmxlbmd0aCxiZT1yZT4+PjE7RzxiZTspe3ZhciB5ZT0yKihHKzEpLTEsV2U9Ylt5ZV0sRmU9eWUrMSxuZT1iW0ZlXTtpZigwPmkoV2UseikpRmU8cmUmJjA+aShuZSxXZSk/KGJbR109bmUsYltGZV09eixHPUZlKTooYltHXT1XZSxiW3llXT16LEc9eWUpO2Vsc2UgaWYoRmU8cmUmJjA+aShuZSx6KSliW0ddPW5lLGJbRmVdPXosRz1GZTtlbHNlIGJyZWFrIGV9fXJldHVybiBqfWZ1bmN0aW9uIGkoYixqKXt2YXIgej1iLnNvcnRJbmRleC1qLnNvcnRJbmRleDtyZXR1cm4geiE9PTA/ejpiLmlkLWouaWR9aWYodHlwZW9mIHBlcmZvcm1hbmNlPT0ib2JqZWN0IiYmdHlwZW9mIHBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIil7dmFyIG89cGVyZm9ybWFuY2U7dC51bnN0YWJsZV9ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gby5ub3coKX19ZWxzZXt2YXIgbD1EYXRlLHM9bC5ub3coKTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBsLm5vdygpLXN9fXZhciBhPVtdLGM9W10sdT0xLGQ9bnVsbCxmPTMscD0hMSxnPSExLG09ITEsdz10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0Om51bGwsdj10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDpudWxsLHg9dHlwZW9mIHNldEltbWVkaWF0ZTwidSI/c2V0SW1tZWRpYXRlOm51bGw7dHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zY2hlZHVsaW5nIT09dm9pZCAwJiZuYXZpZ2F0b3Iuc2NoZWR1bGluZy5pc0lucHV0UGVuZGluZyE9PXZvaWQgMCYmbmF2aWdhdG9yLnNjaGVkdWxpbmcuaXNJbnB1dFBlbmRpbmcuYmluZChuYXZpZ2F0b3Iuc2NoZWR1bGluZyk7ZnVuY3Rpb24gXyhiKXtmb3IodmFyIGo9bihjKTtqIT09bnVsbDspe2lmKGouY2FsbGJhY2s9PT1udWxsKXIoYyk7ZWxzZSBpZihqLnN0YXJ0VGltZTw9YilyKGMpLGouc29ydEluZGV4PWouZXhwaXJhdGlvblRpbWUsZShhLGopO2Vsc2UgYnJlYWs7aj1uKGMpfX1mdW5jdGlvbiBTKGIpe2lmKG09ITEsXyhiKSwhZylpZihuKGEpIT09bnVsbClnPSEwLFIoRSk7ZWxzZXt2YXIgaj1uKGMpO2ohPT1udWxsJiZQKFMsai5zdGFydFRpbWUtYil9fWZ1bmN0aW9uIEUoYixqKXtnPSExLG0mJihtPSExLHYoTiksTj0tMSkscD0hMDt2YXIgej1mO3RyeXtmb3IoXyhqKSxkPW4oYSk7ZCE9PW51bGwmJighKGQuZXhwaXJhdGlvblRpbWU+ail8fGImJiFEKCkpOyl7dmFyIEc9ZC5jYWxsYmFjaztpZih0eXBlb2YgRz09ImZ1bmN0aW9uIil7ZC5jYWxsYmFjaz1udWxsLGY9ZC5wcmlvcml0eUxldmVsO3ZhciByZT1HKGQuZXhwaXJhdGlvblRpbWU8PWopO2o9dC51bnN0YWJsZV9ub3coKSx0eXBlb2YgcmU9PSJmdW5jdGlvbiI/ZC5jYWxsYmFjaz1yZTpkPT09bihhKSYmcihhKSxfKGopfWVsc2UgcihhKTtkPW4oYSl9aWYoZCE9PW51bGwpdmFyIGJlPSEwO2Vsc2V7dmFyIHllPW4oYyk7eWUhPT1udWxsJiZQKFMseWUuc3RhcnRUaW1lLWopLGJlPSExfXJldHVybiBiZX1maW5hbGx5e2Q9bnVsbCxmPXoscD0hMX19dmFyIGs9ITEsQz1udWxsLE49LTEsQT01LFQ9LTE7ZnVuY3Rpb24gRCgpe3JldHVybiEodC51bnN0YWJsZV9ub3coKS1UPEEpfWZ1bmN0aW9uIEwoKXtpZihDIT09bnVsbCl7dmFyIGI9dC51bnN0YWJsZV9ub3coKTtUPWI7dmFyIGo9ITA7dHJ5e2o9QyghMCxiKX1maW5hbGx5e2o/SygpOihrPSExLEM9bnVsbCl9fWVsc2Ugaz0hMX12YXIgSztpZih0eXBlb2YgeD09ImZ1bmN0aW9uIilLPWZ1bmN0aW9uKCl7eChMKX07ZWxzZSBpZih0eXBlb2YgTWVzc2FnZUNoYW5uZWw8InUiKXt2YXIgQj1uZXcgTWVzc2FnZUNoYW5uZWwsWj1CLnBvcnQyO0IucG9ydDEub25tZXNzYWdlPUwsSz1mdW5jdGlvbigpe1oucG9zdE1lc3NhZ2UobnVsbCl9fWVsc2UgSz1mdW5jdGlvbigpe3coTCwwKX07ZnVuY3Rpb24gUihiKXtDPWIsa3x8KGs9ITAsSygpKX1mdW5jdGlvbiBQKGIsail7Tj13KGZ1bmN0aW9uKCl7Yih0LnVuc3RhYmxlX25vdygpKX0sail9dC51bnN0YWJsZV9JZGxlUHJpb3JpdHk9NSx0LnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5PTEsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfTm9ybWFsUHJpb3JpdHk9Myx0LnVuc3RhYmxlX1Byb2ZpbGluZz1udWxsLHQudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHk9Mix0LnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrPWZ1bmN0aW9uKGIpe2IuY2FsbGJhY2s9bnVsbH0sdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2d8fHB8fChnPSEwLFIoRSkpfSx0LnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGIpezA+Ynx8MTI1PGI/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkIik6QT0wPGI/TWF0aC5mbG9vcigxZTMvYik6NX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBmfSx0LnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIG4oYSl9LHQudW5zdGFibGVfbmV4dD1mdW5jdGlvbihiKXtzd2l0Y2goZil7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6dmFyIGo9MzticmVhaztkZWZhdWx0Omo9Zn12YXIgej1mO2Y9ajt0cnl7cmV0dXJuIGIoKX1maW5hbGx5e2Y9en19LHQudW5zdGFibGVfcGF1c2VFeGVjdXRpb249ZnVuY3Rpb24oKXt9LHQudW5zdGFibGVfcmVxdWVzdFBhaW50PWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eT1mdW5jdGlvbihiLGope3N3aXRjaChiKXtjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmJyZWFrO2RlZmF1bHQ6Yj0zfXZhciB6PWY7Zj1iO3RyeXtyZXR1cm4gaigpfWZpbmFsbHl7Zj16fX0sdC51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrPWZ1bmN0aW9uKGIsaix6KXt2YXIgRz10LnVuc3RhYmxlX25vdygpO3N3aXRjaCh0eXBlb2Ygej09Im9iamVjdCImJnohPT1udWxsPyh6PXouZGVsYXksej10eXBlb2Ygej09Im51bWJlciImJjA8ej9HK3o6Ryk6ej1HLGIpe2Nhc2UgMTp2YXIgcmU9LTE7YnJlYWs7Y2FzZSAyOnJlPTI1MDticmVhaztjYXNlIDU6cmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDQ6cmU9MWU0O2JyZWFrO2RlZmF1bHQ6cmU9NWUzfXJldHVybiByZT16K3JlLGI9e2lkOnUrKyxjYWxsYmFjazpqLHByaW9yaXR5TGV2ZWw6YixzdGFydFRpbWU6eixleHBpcmF0aW9uVGltZTpyZSxzb3J0SW5kZXg6LTF9LHo+Rz8oYi5zb3J0SW5kZXg9eixlKGMsYiksbihhKT09PW51bGwmJmI9PT1uKGMpJiYobT8odihOKSxOPS0xKTptPSEwLFAoUyx6LUcpKSk6KGIuc29ydEluZGV4PXJlLGUoYSxiKSxnfHxwfHwoZz0hMCxSKEUpKSksYn0sdC51bnN0YWJsZV9zaG91bGRZaWVsZD1ELHQudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGIpe3ZhciBqPWY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHo9ZjtmPWo7dHJ5e3JldHVybiBiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e2Y9en19fX0pKFoxKTtLMS5leHBvcnRzPVoxO3ZhciBIaz1LMS5leHBvcnRzOy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBHMT1oLFduPUhrO2Z1bmN0aW9uIFcodCl7Zm9yKHZhciBlPSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK3Qsbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZSs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW25dKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrdCsiOyB2aXNpdCAiK2UrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn12YXIgWTE9bmV3IFNldCxGYT17fTtmdW5jdGlvbiBzbCh0LGUpe2xzKHQsZSksbHModCsiQ2FwdHVyZSIsZSl9ZnVuY3Rpb24gbHModCxlKXtmb3IoRmFbdF09ZSx0PTA7dDxlLmxlbmd0aDt0KyspWTEuYWRkKGVbdF0pfXZhciBmaT0hKHR5cGVvZiB3aW5kb3c+InUifHx0eXBlb2Ygd2luZG93LmRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PiJ1IiksbGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxWaz0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLEV5PXt9LEN5PXt9O2Z1bmN0aW9uIEtrKHQpe3JldHVybiBsaC5jYWxsKEN5LHQpPyEwOmxoLmNhbGwoRXksdCk/ITE6VmsudGVzdCh0KT9DeVt0XT0hMDooRXlbdF09ITAsITEpfWZ1bmN0aW9uIFprKHQsZSxuLHIpe2lmKG4hPT1udWxsJiZuLnR5cGU9PT0wKXJldHVybiExO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnJldHVybiEwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIHI/ITE6biE9PW51bGw/IW4uYWNjZXB0c0Jvb2xlYW5zOih0PXQudG9Mb3dlckNhc2UoKS5zbGljZSgwLDUpLHQhPT0iZGF0YS0iJiZ0IT09ImFyaWEtIik7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gR2sodCxlLG4scil7aWYoZT09PW51bGx8fHR5cGVvZiBlPiJ1Inx8WmsodCxlLG4scikpcmV0dXJuITA7aWYocilyZXR1cm4hMTtpZihuIT09bnVsbClzd2l0Y2gobi50eXBlKXtjYXNlIDM6cmV0dXJuIWU7Y2FzZSA0OnJldHVybiBlPT09ITE7Y2FzZSA1OnJldHVybiBpc05hTihlKTtjYXNlIDY6cmV0dXJuIGlzTmFOKGUpfHwxPmV9cmV0dXJuITF9ZnVuY3Rpb24gU24odCxlLG4scixpLG8sbCl7dGhpcy5hY2NlcHRzQm9vbGVhbnM9ZT09PTJ8fGU9PT0zfHxlPT09NCx0aGlzLmF0dHJpYnV0ZU5hbWU9cix0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1pLHRoaXMubXVzdFVzZVByb3BlcnR5PW4sdGhpcy5wcm9wZXJ0eU5hbWU9dCx0aGlzLnR5cGU9ZSx0aGlzLnNhbml0aXplVVJMPW8sdGhpcy5yZW1vdmVFbXB0eVN0cmluZz1sfXZhciBHdD17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IFNuKHQsMCwhMSx0LG51bGwsITEsITEpfSk7W1siYWNjZXB0Q2hhcnNldCIsImFjY2VwdC1jaGFyc2V0Il0sWyJjbGFzc05hbWUiLCJjbGFzcyJdLFsiaHRtbEZvciIsImZvciJdLFsiaHR0cEVxdWl2IiwiaHR0cC1lcXVpdiJdXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF07R3RbZV09bmV3IFNuKGUsMSwhMSx0WzFdLG51bGwsITEsITEpfSk7WyJjb250ZW50RWRpdGFibGUiLCJkcmFnZ2FibGUiLCJzcGVsbENoZWNrIiwidmFsdWUiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0d0W3RdPW5ldyBTbih0LDIsITEsdC50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgU24odCwyLCExLHQsbnVsbCwhMSwhMSl9KTsiYWxsb3dGdWxsU2NyZWVuIGFzeW5jIGF1dG9Gb2N1cyBhdXRvUGxheSBjb250cm9scyBkZWZhdWx0IGRlZmVyIGRpc2FibGVkIGRpc2FibGVQaWN0dXJlSW5QaWN0dXJlIGRpc2FibGVSZW1vdGVQbGF5YmFjayBmb3JtTm9WYWxpZGF0ZSBoaWRkZW4gbG9vcCBub01vZHVsZSBub1ZhbGlkYXRlIG9wZW4gcGxheXNJbmxpbmUgcmVhZE9ubHkgcmVxdWlyZWQgcmV2ZXJzZWQgc2NvcGVkIHNlYW1sZXNzIGl0ZW1TY29wZSIuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe0d0W3RdPW5ldyBTbih0LDMsITEsdC50b0xvd2VyQ2FzZSgpLG51bGwsITEsITEpfSk7WyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgU24odCwzLCEwLHQsbnVsbCwhMSwhMSl9KTtbImNhcHR1cmUiLCJkb3dubG9hZCJdLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IFNuKHQsNCwhMSx0LG51bGwsITEsITEpfSk7WyJjb2xzIiwicm93cyIsInNpemUiLCJzcGFuIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgU24odCw2LCExLHQsbnVsbCwhMSwhMSl9KTtbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goZnVuY3Rpb24odCl7R3RbdF09bmV3IFNuKHQsNSwhMSx0LnRvTG93ZXJDYXNlKCksbnVsbCwhMSwhMSl9KTt2YXIgZmc9L1tcLTpdKFthLXpdKS9nO2Z1bmN0aW9uIHBnKHQpe3JldHVybiB0WzFdLnRvVXBwZXJDYXNlKCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGZnLHBnKTtHdFtlXT1uZXcgU24oZSwxLCExLHQsbnVsbCwhMSwhMSl9KTsieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOnJvbGUgeGxpbms6c2hvdyB4bGluazp0aXRsZSB4bGluazp0eXBlIi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGZnLHBnKTtHdFtlXT1uZXcgU24oZSwxLCExLHQsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExLCExKX0pO1sieG1sOmJhc2UiLCJ4bWw6bGFuZyIsInhtbDpzcGFjZSJdLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGZnLHBnKTtHdFtlXT1uZXcgU24oZSwxLCExLHQsImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsITEsITEpfSk7WyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgU24odCwxLCExLHQudG9Mb3dlckNhc2UoKSxudWxsLCExLCExKX0pO0d0LnhsaW5rSHJlZj1uZXcgU24oInhsaW5rSHJlZiIsMSwhMSwieGxpbms6aHJlZiIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCEwLCExKTtbInNyYyIsImhyZWYiLCJhY3Rpb24iLCJmb3JtQWN0aW9uIl0uZm9yRWFjaChmdW5jdGlvbih0KXtHdFt0XT1uZXcgU24odCwxLCExLHQudG9Mb3dlckNhc2UoKSxudWxsLCEwLCEwKX0pO2Z1bmN0aW9uIGhnKHQsZSxuLHIpe3ZhciBpPUd0Lmhhc093blByb3BlcnR5KGUpP0d0W2VdOm51bGw7KGkhPT1udWxsP2kudHlwZSE9PTA6cnx8ISgyPGUubGVuZ3RoKXx8ZVswXSE9PSJvIiYmZVswXSE9PSJPInx8ZVsxXSE9PSJuIiYmZVsxXSE9PSJOIikmJihHayhlLG4saSxyKSYmKG49bnVsbCkscnx8aT09PW51bGw/S2soZSkmJihuPT09bnVsbD90LnJlbW92ZUF0dHJpYnV0ZShlKTp0LnNldEF0dHJpYnV0ZShlLCIiK24pKTppLm11c3RVc2VQcm9wZXJ0eT90W2kucHJvcGVydHlOYW1lXT1uPT09bnVsbD9pLnR5cGU9PT0zPyExOiIiOm46KGU9aS5hdHRyaWJ1dGVOYW1lLHI9aS5hdHRyaWJ1dGVOYW1lc3BhY2Usbj09PW51bGw/dC5yZW1vdmVBdHRyaWJ1dGUoZSk6KGk9aS50eXBlLG49aT09PTN8fGk9PT00JiZuPT09ITA/IiI6IiIrbixyP3Quc2V0QXR0cmlidXRlTlMocixlLG4pOnQuc2V0QXR0cmlidXRlKGUsbikpKSl9dmFyIF9pPUcxLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVELFFjPVN5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKSxPbD1TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKSxQbD1TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpLG1nPVN5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIiksc2g9U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKSxYMT1TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpLEoxPVN5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKSxnZz1TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpLGFoPVN5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIiksY2g9U3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpLHZnPVN5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKSxJaT1TeW1ib2wuZm9yKCJyZWFjdC5sYXp5IiksUTE9U3ltYm9sLmZvcigicmVhY3Qub2Zmc2NyZWVuIiksYnk9U3ltYm9sLml0ZXJhdG9yO2Z1bmN0aW9uIFZzKHQpe3JldHVybiB0PT09bnVsbHx8dHlwZW9mIHQhPSJvYmplY3QiP251bGw6KHQ9YnkmJnRbYnldfHx0WyJAQGl0ZXJhdG9yIl0sdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDpudWxsKX12YXIgbXQ9T2JqZWN0LmFzc2lnbixmcDtmdW5jdGlvbiB1YSh0KXtpZihmcD09PXZvaWQgMCl0cnl7dGhyb3cgRXJyb3IoKX1jYXRjaChuKXt2YXIgZT1uLnN0YWNrLnRyaW0oKS5tYXRjaCgvXG4oICooYXQgKT8pLyk7ZnA9ZSYmZVsxXXx8IiJ9cmV0dXJuYApgK2ZwK3R9dmFyIHBwPSExO2Z1bmN0aW9uIGhwKHQsZSl7aWYoIXR8fHBwKXJldHVybiIiO3BwPSEwO3ZhciBuPUVycm9yLnByZXBhcmVTdGFja1RyYWNlO0Vycm9yLnByZXBhcmVTdGFja1RyYWNlPXZvaWQgMDt0cnl7aWYoZSlpZihlPWZ1bmN0aW9uKCl7dGhyb3cgRXJyb3IoKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUucHJvdG90eXBlLCJwcm9wcyIse3NldDpmdW5jdGlvbigpe3Rocm93IEVycm9yKCl9fSksdHlwZW9mIFJlZmxlY3Q9PSJvYmplY3QiJiZSZWZsZWN0LmNvbnN0cnVjdCl7dHJ5e1JlZmxlY3QuY29uc3RydWN0KGUsW10pfWNhdGNoKGMpe3ZhciByPWN9UmVmbGVjdC5jb25zdHJ1Y3QodCxbXSxlKX1lbHNle3RyeXtlLmNhbGwoKX1jYXRjaChjKXtyPWN9dC5jYWxsKGUucHJvdG90eXBlKX1lbHNle3RyeXt0aHJvdyBFcnJvcigpfWNhdGNoKGMpe3I9Y310KCl9fWNhdGNoKGMpe2lmKGMmJnImJnR5cGVvZiBjLnN0YWNrPT0ic3RyaW5nIil7Zm9yKHZhciBpPWMuc3RhY2suc3BsaXQoYApgKSxvPXIuc3RhY2suc3BsaXQoYApgKSxsPWkubGVuZ3RoLTEscz1vLmxlbmd0aC0xOzE8PWwmJjA8PXMmJmlbbF0hPT1vW3NdOylzLS07Zm9yKDsxPD1sJiYwPD1zO2wtLSxzLS0paWYoaVtsXSE9PW9bc10pe2lmKGwhPT0xfHxzIT09MSlkbyBpZihsLS0scy0tLDA+c3x8aVtsXSE9PW9bc10pe3ZhciBhPWAKYCtpW2xdLnJlcGxhY2UoIiBhdCBuZXcgIiwiIGF0ICIpO3JldHVybiB0LmRpc3BsYXlOYW1lJiZhLmluY2x1ZGVzKCI8YW5vbnltb3VzPiIpJiYoYT1hLnJlcGxhY2UoIjxhbm9ueW1vdXM+Iix0LmRpc3BsYXlOYW1lKSksYX13aGlsZSgxPD1sJiYwPD1zKTticmVha319fWZpbmFsbHl7cHA9ITEsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9bn1yZXR1cm4odD10P3QuZGlzcGxheU5hbWV8fHQubmFtZToiIik/dWEodCk6IiJ9ZnVuY3Rpb24gWWsodCl7c3dpdGNoKHQudGFnKXtjYXNlIDU6cmV0dXJuIHVhKHQudHlwZSk7Y2FzZSAxNjpyZXR1cm4gdWEoIkxhenkiKTtjYXNlIDEzOnJldHVybiB1YSgiU3VzcGVuc2UiKTtjYXNlIDE5OnJldHVybiB1YSgiU3VzcGVuc2VMaXN0Iik7Y2FzZSAwOmNhc2UgMjpjYXNlIDE1OnJldHVybiB0PWhwKHQudHlwZSwhMSksdDtjYXNlIDExOnJldHVybiB0PWhwKHQudHlwZS5yZW5kZXIsITEpLHQ7Y2FzZSAxOnJldHVybiB0PWhwKHQudHlwZSwhMCksdDtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiB1aCh0KXtpZih0PT1udWxsKXJldHVybiBudWxsO2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXJldHVybiB0LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fG51bGw7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlIFBsOnJldHVybiJGcmFnbWVudCI7Y2FzZSBPbDpyZXR1cm4iUG9ydGFsIjtjYXNlIHNoOnJldHVybiJQcm9maWxlciI7Y2FzZSBtZzpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBhaDpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgY2g6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYodHlwZW9mIHQ9PSJvYmplY3QiKXN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIEoxOnJldHVybih0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuQ29uc3VtZXIiO2Nhc2UgWDE6cmV0dXJuKHQuX2NvbnRleHQuZGlzcGxheU5hbWV8fCJDb250ZXh0IikrIi5Qcm92aWRlciI7Y2FzZSBnZzp2YXIgZT10LnJlbmRlcjtyZXR1cm4gdD10LmRpc3BsYXlOYW1lLHR8fCh0PWUuZGlzcGxheU5hbWV8fGUubmFtZXx8IiIsdD10IT09IiI/IkZvcndhcmRSZWYoIit0KyIpIjoiRm9yd2FyZFJlZiIpLHQ7Y2FzZSB2ZzpyZXR1cm4gZT10LmRpc3BsYXlOYW1lfHxudWxsLGUhPT1udWxsP2U6dWgodC50eXBlKXx8Ik1lbW8iO2Nhc2UgSWk6ZT10Ll9wYXlsb2FkLHQ9dC5faW5pdDt0cnl7cmV0dXJuIHVoKHQoZSkpfWNhdGNoe319cmV0dXJuIG51bGx9ZnVuY3Rpb24gWGsodCl7dmFyIGU9dC50eXBlO3N3aXRjaCh0LnRhZyl7Y2FzZSAyNDpyZXR1cm4iQ2FjaGUiO2Nhc2UgOTpyZXR1cm4oZS5kaXNwbGF5TmFtZXx8IkNvbnRleHQiKSsiLkNvbnN1bWVyIjtjYXNlIDEwOnJldHVybihlLl9jb250ZXh0LmRpc3BsYXlOYW1lfHwiQ29udGV4dCIpKyIuUHJvdmlkZXIiO2Nhc2UgMTg6cmV0dXJuIkRlaHlkcmF0ZWRGcmFnbWVudCI7Y2FzZSAxMTpyZXR1cm4gdD1lLnJlbmRlcix0PXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZS5kaXNwbGF5TmFtZXx8KHQhPT0iIj8iRm9yd2FyZFJlZigiK3QrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSA3OnJldHVybiJGcmFnbWVudCI7Y2FzZSA1OnJldHVybiBlO2Nhc2UgNDpyZXR1cm4iUG9ydGFsIjtjYXNlIDM6cmV0dXJuIlJvb3QiO2Nhc2UgNjpyZXR1cm4iVGV4dCI7Y2FzZSAxNjpyZXR1cm4gdWgoZSk7Y2FzZSA4OnJldHVybiBlPT09bWc/IlN0cmljdE1vZGUiOiJNb2RlIjtjYXNlIDIyOnJldHVybiJPZmZzY3JlZW4iO2Nhc2UgMTI6cmV0dXJuIlByb2ZpbGVyIjtjYXNlIDIxOnJldHVybiJTY29wZSI7Y2FzZSAxMzpyZXR1cm4iU3VzcGVuc2UiO2Nhc2UgMTk6cmV0dXJuIlN1c3BlbnNlTGlzdCI7Y2FzZSAyNTpyZXR1cm4iVHJhY2luZ01hcmtlciI7Y2FzZSAxOmNhc2UgMDpjYXNlIDE3OmNhc2UgMjpjYXNlIDE0OmNhc2UgMTU6aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpcmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8bnVsbDtpZih0eXBlb2YgZT09InN0cmluZyIpcmV0dXJuIGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gb28odCl7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImJvb2xlYW4iOmNhc2UibnVtYmVyIjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiB0O2Nhc2Uib2JqZWN0IjpyZXR1cm4gdDtkZWZhdWx0OnJldHVybiIifX1mdW5jdGlvbiBxMSh0KXt2YXIgZT10LnR5cGU7cmV0dXJuKHQ9dC5ub2RlTmFtZSkmJnQudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihlPT09ImNoZWNrYm94Inx8ZT09PSJyYWRpbyIpfWZ1bmN0aW9uIEprKHQpe3ZhciBlPXExKHQpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxlKSxyPSIiK3RbZV07aWYoIXQuaGFzT3duUHJvcGVydHkoZSkmJnR5cGVvZiBuPCJ1IiYmdHlwZW9mIG4uZ2V0PT0iZnVuY3Rpb24iJiZ0eXBlb2Ygbi5zZXQ9PSJmdW5jdGlvbiIpe3ZhciBpPW4uZ2V0LG89bi5zZXQ7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5jYWxsKHRoaXMpfSxzZXQ6ZnVuY3Rpb24obCl7cj0iIitsLG8uY2FsbCh0aGlzLGwpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2VudW1lcmFibGU6bi5lbnVtZXJhYmxlfSkse2dldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LHNldFZhbHVlOmZ1bmN0aW9uKGwpe3I9IiIrbH0sc3RvcFRyYWNraW5nOmZ1bmN0aW9uKCl7dC5fdmFsdWVUcmFja2VyPW51bGwsZGVsZXRlIHRbZV19fX19ZnVuY3Rpb24gcWModCl7dC5fdmFsdWVUcmFja2VyfHwodC5fdmFsdWVUcmFja2VyPUprKHQpKX1mdW5jdGlvbiBlXyh0KXtpZighdClyZXR1cm4hMTt2YXIgZT10Ll92YWx1ZVRyYWNrZXI7aWYoIWUpcmV0dXJuITA7dmFyIG49ZS5nZXRWYWx1ZSgpLHI9IiI7cmV0dXJuIHQmJihyPXExKHQpP3QuY2hlY2tlZD8idHJ1ZSI6ImZhbHNlIjp0LnZhbHVlKSx0PXIsdCE9PW4/KGUuc2V0VmFsdWUodCksITApOiExfWZ1bmN0aW9uIEp1KHQpe2lmKHQ9dHx8KHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQ6dm9pZCAwKSx0eXBlb2YgdD4idSIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiB0LmFjdGl2ZUVsZW1lbnR8fHQuYm9keX1jYXRjaHtyZXR1cm4gdC5ib2R5fX1mdW5jdGlvbiBkaCh0LGUpe3ZhciBuPWUuY2hlY2tlZDtyZXR1cm4gbXQoe30sZSx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bj8/dC5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkfSl9ZnVuY3Rpb24ga3kodCxlKXt2YXIgbj1lLmRlZmF1bHRWYWx1ZT09bnVsbD8iIjplLmRlZmF1bHRWYWx1ZSxyPWUuY2hlY2tlZCE9bnVsbD9lLmNoZWNrZWQ6ZS5kZWZhdWx0Q2hlY2tlZDtuPW9vKGUudmFsdWUhPW51bGw/ZS52YWx1ZTpuKSx0Ll93cmFwcGVyU3RhdGU9e2luaXRpYWxDaGVja2VkOnIsaW5pdGlhbFZhbHVlOm4sY29udHJvbGxlZDplLnR5cGU9PT0iY2hlY2tib3gifHxlLnR5cGU9PT0icmFkaW8iP2UuY2hlY2tlZCE9bnVsbDplLnZhbHVlIT1udWxsfX1mdW5jdGlvbiB0Xyh0LGUpe2U9ZS5jaGVja2VkLGUhPW51bGwmJmhnKHQsImNoZWNrZWQiLGUsITEpfWZ1bmN0aW9uIGZoKHQsZSl7dF8odCxlKTt2YXIgbj1vbyhlLnZhbHVlKSxyPWUudHlwZTtpZihuIT1udWxsKXI9PT0ibnVtYmVyIj8obj09PTAmJnQudmFsdWU9PT0iInx8dC52YWx1ZSE9bikmJih0LnZhbHVlPSIiK24pOnQudmFsdWUhPT0iIituJiYodC52YWx1ZT0iIituKTtlbHNlIGlmKHI9PT0ic3VibWl0Inx8cj09PSJyZXNldCIpe3QucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3JldHVybn1lLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpP3BoKHQsZS50eXBlLG4pOmUuaGFzT3duUHJvcGVydHkoImRlZmF1bHRWYWx1ZSIpJiZwaCh0LGUudHlwZSxvbyhlLmRlZmF1bHRWYWx1ZSkpLGUuY2hlY2tlZD09bnVsbCYmZS5kZWZhdWx0Q2hlY2tlZCE9bnVsbCYmKHQuZGVmYXVsdENoZWNrZWQ9ISFlLmRlZmF1bHRDaGVja2VkKX1mdW5jdGlvbiAkeSh0LGUsbil7aWYoZS5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKXx8ZS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikpe3ZhciByPWUudHlwZTtpZighKHIhPT0ic3VibWl0IiYmciE9PSJyZXNldCJ8fGUudmFsdWUhPT12b2lkIDAmJmUudmFsdWUhPT1udWxsKSlyZXR1cm47ZT0iIit0Ll93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlLG58fGU9PT10LnZhbHVlfHwodC52YWx1ZT1lKSx0LmRlZmF1bHRWYWx1ZT1lfW49dC5uYW1lLG4hPT0iIiYmKHQubmFtZT0iIiksdC5kZWZhdWx0Q2hlY2tlZD0hIXQuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZCxuIT09IiImJih0Lm5hbWU9bil9ZnVuY3Rpb24gcGgodCxlLG4peyhlIT09Im51bWJlciJ8fEp1KHQub3duZXJEb2N1bWVudCkhPT10KSYmKG49PW51bGw/dC5kZWZhdWx0VmFsdWU9IiIrdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTp0LmRlZmF1bHRWYWx1ZSE9PSIiK24mJih0LmRlZmF1bHRWYWx1ZT0iIituKSl9dmFyIGRhPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gR2wodCxlLG4scil7aWYodD10Lm9wdGlvbnMsZSl7ZT17fTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyllWyIkIituW2ldXT0hMDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWk9ZS5oYXNPd25Qcm9wZXJ0eSgiJCIrdFtuXS52YWx1ZSksdFtuXS5zZWxlY3RlZCE9PWkmJih0W25dLnNlbGVjdGVkPWkpLGkmJnImJih0W25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitvbyhuKSxlPW51bGwsaT0wO2k8dC5sZW5ndGg7aSsrKXtpZih0W2ldLnZhbHVlPT09bil7dFtpXS5zZWxlY3RlZD0hMCxyJiYodFtpXS5kZWZhdWx0U2VsZWN0ZWQ9ITApO3JldHVybn1lIT09bnVsbHx8dFtpXS5kaXNhYmxlZHx8KGU9dFtpXSl9ZSE9PW51bGwmJihlLnNlbGVjdGVkPSEwKX19ZnVuY3Rpb24gaGgodCxlKXtpZihlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT1udWxsKXRocm93IEVycm9yKFcoOTEpKTtyZXR1cm4gbXQoe30sZSx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIFR5KHQsZSl7dmFyIG49ZS52YWx1ZTtpZihuPT1udWxsKXtpZihuPWUuY2hpbGRyZW4sZT1lLmRlZmF1bHRWYWx1ZSxuIT1udWxsKXtpZihlIT1udWxsKXRocm93IEVycm9yKFcoOTIpKTtpZihkYShuKSl7aWYoMTxuLmxlbmd0aCl0aHJvdyBFcnJvcihXKDkzKSk7bj1uWzBdfWU9bn1lPT1udWxsJiYoZT0iIiksbj1lfXQuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOm9vKG4pfX1mdW5jdGlvbiBuXyh0LGUpe3ZhciBuPW9vKGUudmFsdWUpLHI9b28oZS5kZWZhdWx0VmFsdWUpO24hPW51bGwmJihuPSIiK24sbiE9PXQudmFsdWUmJih0LnZhbHVlPW4pLGUuZGVmYXVsdFZhbHVlPT1udWxsJiZ0LmRlZmF1bHRWYWx1ZSE9PW4mJih0LmRlZmF1bHRWYWx1ZT1uKSksciE9bnVsbCYmKHQuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIE55KHQpe3ZhciBlPXQudGV4dENvbnRlbnQ7ZT09PXQuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJmUhPT0iIiYmZSE9PW51bGwmJih0LnZhbHVlPWUpfWZ1bmN0aW9uIHJfKHQpe3N3aXRjaCh0KXtjYXNlInN2ZyI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtjYXNlIm1hdGgiOnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIjtkZWZhdWx0OnJldHVybiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIn19ZnVuY3Rpb24gbWgodCxlKXtyZXR1cm4gdD09bnVsbHx8dD09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj9yXyhlKTp0PT09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiYmZT09PSJmb3JlaWduT2JqZWN0Ij8iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6dH12YXIgZXUsaV89ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiBNU0FwcDwidSImJk1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uP2Z1bmN0aW9uKGUsbixyLGkpe01TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxuLHIsaSl9KX06dH0oZnVuY3Rpb24odCxlKXtpZih0Lm5hbWVzcGFjZVVSSSE9PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ8fCJpbm5lckhUTUwiaW4gdCl0LmlubmVySFRNTD1lO2Vsc2V7Zm9yKGV1PWV1fHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxldS5pbm5lckhUTUw9Ijxzdmc+IitlLnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLGU9ZXUuZmlyc3RDaGlsZDt0LmZpcnN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5maXJzdENoaWxkKTtmb3IoO2UuZmlyc3RDaGlsZDspdC5hcHBlbmRDaGlsZChlLmZpcnN0Q2hpbGQpfX0pO2Z1bmN0aW9uIEJhKHQsZSl7aWYoZSl7dmFyIG49dC5maXJzdENoaWxkO2lmKG4mJm49PT10Lmxhc3RDaGlsZCYmbi5ub2RlVHlwZT09PTMpe24ubm9kZVZhbHVlPWU7cmV0dXJufX10LnRleHRDb250ZW50PWV9dmFyIHlhPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxhc3BlY3RSYXRpbzohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxRaz1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO09iamVjdC5rZXlzKHlhKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1FrLmZvckVhY2goZnVuY3Rpb24oZSl7ZT1lK3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSkseWFbZV09eWFbdF19KX0pO2Z1bmN0aW9uIG9fKHQsZSxuKXtyZXR1cm4gZT09bnVsbHx8dHlwZW9mIGU9PSJib29sZWFuInx8ZT09PSIiPyIiOm58fHR5cGVvZiBlIT0ibnVtYmVyInx8ZT09PTB8fHlhLmhhc093blByb3BlcnR5KHQpJiZ5YVt0XT8oIiIrZSkudHJpbSgpOmUrInB4In1mdW5jdGlvbiBsXyh0LGUpe3Q9dC5zdHlsZTtmb3IodmFyIG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pKXt2YXIgcj1uLmluZGV4T2YoIi0tIik9PT0wLGk9b18obixlW25dLHIpO249PT0iZmxvYXQiJiYobj0iY3NzRmxvYXQiKSxyP3Quc2V0UHJvcGVydHkobixpKTp0W25dPWl9fXZhciBxaz1tdCh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBnaCh0LGUpe2lmKGUpe2lmKHFrW3RdJiYoZS5jaGlsZHJlbiE9bnVsbHx8ZS5kYW5nZXJvdXNseVNldElubmVySFRNTCE9bnVsbCkpdGhyb3cgRXJyb3IoVygxMzcsdCkpO2lmKGUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwhPW51bGwpe2lmKGUuY2hpbGRyZW4hPW51bGwpdGhyb3cgRXJyb3IoVyg2MCkpO2lmKHR5cGVvZiBlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIT0ib2JqZWN0Inx8ISgiX19odG1sImluIGUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKFcoNjEpKX1pZihlLnN0eWxlIT1udWxsJiZ0eXBlb2YgZS5zdHlsZSE9Im9iamVjdCIpdGhyb3cgRXJyb3IoVyg2MikpfX1mdW5jdGlvbiB2aCh0LGUpe2lmKHQuaW5kZXhPZigiLSIpPT09LTEpcmV0dXJuIHR5cGVvZiBlLmlzPT0ic3RyaW5nIjtzd2l0Y2godCl7Y2FzZSJhbm5vdGF0aW9uLXhtbCI6Y2FzZSJjb2xvci1wcm9maWxlIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJmb250LWZhY2Utc3JjIjpjYXNlImZvbnQtZmFjZS11cmkiOmNhc2UiZm9udC1mYWNlLWZvcm1hdCI6Y2FzZSJmb250LWZhY2UtbmFtZSI6Y2FzZSJtaXNzaW5nLWdseXBoIjpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX12YXIgeWg9bnVsbDtmdW5jdGlvbiB5Zyh0KXtyZXR1cm4gdD10LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3csdC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCYmKHQ9dC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCksdC5ub2RlVHlwZT09PTM/dC5wYXJlbnROb2RlOnR9dmFyIHhoPW51bGwsWWw9bnVsbCxYbD1udWxsO2Z1bmN0aW9uIFJ5KHQpe2lmKHQ9TGModCkpe2lmKHR5cGVvZiB4aCE9ImZ1bmN0aW9uIil0aHJvdyBFcnJvcihXKDI4MCkpO3ZhciBlPXQuc3RhdGVOb2RlO2UmJihlPWhmKGUpLHhoKHQuc3RhdGVOb2RlLHQudHlwZSxlKSl9fWZ1bmN0aW9uIHNfKHQpe1lsP1hsP1hsLnB1c2godCk6WGw9W3RdOllsPXR9ZnVuY3Rpb24gYV8oKXtpZihZbCl7dmFyIHQ9WWwsZT1YbDtpZihYbD1ZbD1udWxsLFJ5KHQpLGUpZm9yKHQ9MDt0PGUubGVuZ3RoO3QrKylSeShlW3RdKX19ZnVuY3Rpb24gY18odCxlKXtyZXR1cm4gdChlKX1mdW5jdGlvbiB1Xygpe312YXIgbXA9ITE7ZnVuY3Rpb24gZF8odCxlLG4pe2lmKG1wKXJldHVybiB0KGUsbik7bXA9ITA7dHJ5e3JldHVybiBjXyh0LGUsbil9ZmluYWxseXttcD0hMSwoWWwhPT1udWxsfHxYbCE9PW51bGwpJiYodV8oKSxhXygpKX19ZnVuY3Rpb24gVWEodCxlKXt2YXIgbj10LnN0YXRlTm9kZTtpZihuPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgcj1oZihuKTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtuPXJbZV07ZTpzd2l0Y2goZSl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRW50ZXIiOihyPSFyLmRpc2FibGVkKXx8KHQ9dC50eXBlLHI9ISh0PT09ImJ1dHRvbiJ8fHQ9PT0iaW5wdXQifHx0PT09InNlbGVjdCJ8fHQ9PT0idGV4dGFyZWEiKSksdD0hcjticmVhayBlO2RlZmF1bHQ6dD0hMX1pZih0KXJldHVybiBudWxsO2lmKG4mJnR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFcoMjMxLGUsdHlwZW9mIG4pKTtyZXR1cm4gbn12YXIgX2g9ITE7aWYoZmkpdHJ5e3ZhciBLcz17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoS3MsInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtfaD0hMH19KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsS3MsS3MpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixLcyxLcyl9Y2F0Y2h7X2g9ITF9ZnVuY3Rpb24gZSQodCxlLG4scixpLG8sbCxzLGEpe3ZhciBjPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywzKTt0cnl7ZS5hcHBseShuLGMpfWNhdGNoKHUpe3RoaXMub25FcnJvcih1KX19dmFyIHhhPSExLFF1PW51bGwscXU9ITEsd2g9bnVsbCx0JD17b25FcnJvcjpmdW5jdGlvbih0KXt4YT0hMCxRdT10fX07ZnVuY3Rpb24gbiQodCxlLG4scixpLG8sbCxzLGEpe3hhPSExLFF1PW51bGwsZSQuYXBwbHkodCQsYXJndW1lbnRzKX1mdW5jdGlvbiByJCh0LGUsbixyLGksbyxsLHMsYSl7aWYobiQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHhhKXtpZih4YSl7dmFyIGM9UXU7eGE9ITEsUXU9bnVsbH1lbHNlIHRocm93IEVycm9yKFcoMTk4KSk7cXV8fChxdT0hMCx3aD1jKX19ZnVuY3Rpb24gYWwodCl7dmFyIGU9dCxuPXQ7aWYodC5hbHRlcm5hdGUpZm9yKDtlLnJldHVybjspZT1lLnJldHVybjtlbHNle3Q9ZTtkbyBlPXQsZS5mbGFncyY0MDk4JiYobj1lLnJldHVybiksdD1lLnJldHVybjt3aGlsZSh0KX1yZXR1cm4gZS50YWc9PT0zP246bnVsbH1mdW5jdGlvbiBmXyh0KXtpZih0LnRhZz09PTEzKXt2YXIgZT10Lm1lbW9pemVkU3RhdGU7aWYoZT09PW51bGwmJih0PXQuYWx0ZXJuYXRlLHQhPT1udWxsJiYoZT10Lm1lbW9pemVkU3RhdGUpKSxlIT09bnVsbClyZXR1cm4gZS5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIE95KHQpe2lmKGFsKHQpIT09dCl0aHJvdyBFcnJvcihXKDE4OCkpfWZ1bmN0aW9uIGkkKHQpe3ZhciBlPXQuYWx0ZXJuYXRlO2lmKCFlKXtpZihlPWFsKHQpLGU9PT1udWxsKXRocm93IEVycm9yKFcoMTg4KSk7cmV0dXJuIGUhPT10P251bGw6dH1mb3IodmFyIG49dCxyPWU7Oyl7dmFyIGk9bi5yZXR1cm47aWYoaT09PW51bGwpYnJlYWs7dmFyIG89aS5hbHRlcm5hdGU7aWYobz09PW51bGwpe2lmKHI9aS5yZXR1cm4sciE9PW51bGwpe249cjtjb250aW51ZX1icmVha31pZihpLmNoaWxkPT09by5jaGlsZCl7Zm9yKG89aS5jaGlsZDtvOyl7aWYobz09PW4pcmV0dXJuIE95KGkpLHQ7aWYobz09PXIpcmV0dXJuIE95KGkpLGU7bz1vLnNpYmxpbmd9dGhyb3cgRXJyb3IoVygxODgpKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49aSxyPW87ZWxzZXtmb3IodmFyIGw9ITEscz1pLmNoaWxkO3M7KXtpZihzPT09bil7bD0hMCxuPWkscj1vO2JyZWFrfWlmKHM9PT1yKXtsPSEwLHI9aSxuPW87YnJlYWt9cz1zLnNpYmxpbmd9aWYoIWwpe2ZvcihzPW8uY2hpbGQ7czspe2lmKHM9PT1uKXtsPSEwLG49byxyPWk7YnJlYWt9aWYocz09PXIpe2w9ITAscj1vLG49aTticmVha31zPXMuc2libGluZ31pZighbCl0aHJvdyBFcnJvcihXKDE4OSkpfX1pZihuLmFsdGVybmF0ZSE9PXIpdGhyb3cgRXJyb3IoVygxOTApKX1pZihuLnRhZyE9PTMpdGhyb3cgRXJyb3IoVygxODgpKTtyZXR1cm4gbi5zdGF0ZU5vZGUuY3VycmVudD09PW4/dDplfWZ1bmN0aW9uIHBfKHQpe3JldHVybiB0PWkkKHQpLHQhPT1udWxsP2hfKHQpOm51bGx9ZnVuY3Rpb24gaF8odCl7aWYodC50YWc9PT01fHx0LnRhZz09PTYpcmV0dXJuIHQ7Zm9yKHQ9dC5jaGlsZDt0IT09bnVsbDspe3ZhciBlPWhfKHQpO2lmKGUhPT1udWxsKXJldHVybiBlO3Q9dC5zaWJsaW5nfXJldHVybiBudWxsfXZhciBtXz1Xbi51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFB5PVduLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLG8kPVduLnVuc3RhYmxlX3Nob3VsZFlpZWxkLGwkPVduLnVuc3RhYmxlX3JlcXVlc3RQYWludCxDdD1Xbi51bnN0YWJsZV9ub3cscyQ9V24udW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwseGc9V24udW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksZ189V24udW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksZWQ9V24udW5zdGFibGVfTm9ybWFsUHJpb3JpdHksYSQ9V24udW5zdGFibGVfTG93UHJpb3JpdHksdl89V24udW5zdGFibGVfSWRsZVByaW9yaXR5LHVmPW51bGwsRnI9bnVsbDtmdW5jdGlvbiBjJCh0KXtpZihGciYmdHlwZW9mIEZyLm9uQ29tbWl0RmliZXJSb290PT0iZnVuY3Rpb24iKXRyeXtGci5vbkNvbW1pdEZpYmVyUm9vdCh1Zix0LHZvaWQgMCwodC5jdXJyZW50LmZsYWdzJjEyOCk9PT0xMjgpfWNhdGNoe319dmFyIFNyPU1hdGguY2x6MzI/TWF0aC5jbHozMjpmJCx1JD1NYXRoLmxvZyxkJD1NYXRoLkxOMjtmdW5jdGlvbiBmJCh0KXtyZXR1cm4gdD4+Pj0wLHQ9PT0wPzMyOjMxLSh1JCh0KS9kJHwwKXwwfXZhciB0dT02NCxudT00MTk0MzA0O2Z1bmN0aW9uIGZhKHQpe3N3aXRjaCh0Ji10KXtjYXNlIDE6cmV0dXJuIDE7Y2FzZSAyOnJldHVybiAyO2Nhc2UgNDpyZXR1cm4gNDtjYXNlIDg6cmV0dXJuIDg7Y2FzZSAxNjpyZXR1cm4gMTY7Y2FzZSAzMjpyZXR1cm4gMzI7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpyZXR1cm4gdCY0MTk0MjQwO2Nhc2UgNDE5NDMwNDpjYXNlIDgzODg2MDg6Y2FzZSAxNjc3NzIxNjpjYXNlIDMzNTU0NDMyOmNhc2UgNjcxMDg4NjQ6cmV0dXJuIHQmMTMwMDIzNDI0O2Nhc2UgMTM0MjE3NzI4OnJldHVybiAxMzQyMTc3Mjg7Y2FzZSAyNjg0MzU0NTY6cmV0dXJuIDI2ODQzNTQ1NjtjYXNlIDUzNjg3MDkxMjpyZXR1cm4gNTM2ODcwOTEyO2Nhc2UgMTA3Mzc0MTgyNDpyZXR1cm4gMTA3Mzc0MTgyNDtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiB0ZCh0LGUpe3ZhciBuPXQucGVuZGluZ0xhbmVzO2lmKG49PT0wKXJldHVybiAwO3ZhciByPTAsaT10LnN1c3BlbmRlZExhbmVzLG89dC5waW5nZWRMYW5lcyxsPW4mMjY4NDM1NDU1O2lmKGwhPT0wKXt2YXIgcz1sJn5pO3MhPT0wP3I9ZmEocyk6KG8mPWwsbyE9PTAmJihyPWZhKG8pKSl9ZWxzZSBsPW4mfmksbCE9PTA/cj1mYShsKTpvIT09MCYmKHI9ZmEobykpO2lmKHI9PT0wKXJldHVybiAwO2lmKGUhPT0wJiZlIT09ciYmIShlJmkpJiYoaT1yJi1yLG89ZSYtZSxpPj1vfHxpPT09MTYmJihvJjQxOTQyNDApIT09MCkpcmV0dXJuIGU7aWYociY0JiYocnw9biYxNiksZT10LmVudGFuZ2xlZExhbmVzLGUhPT0wKWZvcih0PXQuZW50YW5nbGVtZW50cyxlJj1yOzA8ZTspbj0zMS1TcihlKSxpPTE8PG4scnw9dFtuXSxlJj1+aTtyZXR1cm4gcn1mdW5jdGlvbiBwJCh0LGUpe3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gZSsyNTA7Y2FzZSA4OmNhc2UgMTY6Y2FzZSAzMjpjYXNlIDY0OmNhc2UgMTI4OmNhc2UgMjU2OmNhc2UgNTEyOmNhc2UgMTAyNDpjYXNlIDIwNDg6Y2FzZSA0MDk2OmNhc2UgODE5MjpjYXNlIDE2Mzg0OmNhc2UgMzI3Njg6Y2FzZSA2NTUzNjpjYXNlIDEzMTA3MjpjYXNlIDI2MjE0NDpjYXNlIDUyNDI4ODpjYXNlIDEwNDg1NzY6Y2FzZSAyMDk3MTUyOnJldHVybiBlKzVlMztjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0OnJldHVybi0xO2Nhc2UgMTM0MjE3NzI4OmNhc2UgMjY4NDM1NDU2OmNhc2UgNTM2ODcwOTEyOmNhc2UgMTA3Mzc0MTgyNDpyZXR1cm4tMTtkZWZhdWx0OnJldHVybi0xfX1mdW5jdGlvbiBoJCh0LGUpe2Zvcih2YXIgbj10LnN1c3BlbmRlZExhbmVzLHI9dC5waW5nZWRMYW5lcyxpPXQuZXhwaXJhdGlvblRpbWVzLG89dC5wZW5kaW5nTGFuZXM7MDxvOyl7dmFyIGw9MzEtU3Iobykscz0xPDxsLGE9aVtsXTthPT09LTE/KCEocyZuKXx8cyZyKSYmKGlbbF09cCQocyxlKSk6YTw9ZSYmKHQuZXhwaXJlZExhbmVzfD1zKSxvJj1+c319ZnVuY3Rpb24gU2godCl7cmV0dXJuIHQ9dC5wZW5kaW5nTGFuZXMmLTEwNzM3NDE4MjUsdCE9PTA/dDp0JjEwNzM3NDE4MjQ/MTA3Mzc0MTgyNDowfWZ1bmN0aW9uIHlfKCl7dmFyIHQ9dHU7cmV0dXJuIHR1PDw9MSwhKHR1JjQxOTQyNDApJiYodHU9NjQpLHR9ZnVuY3Rpb24gZ3AodCl7Zm9yKHZhciBlPVtdLG49MDszMT5uO24rKyllLnB1c2godCk7cmV0dXJuIGV9ZnVuY3Rpb24gQWModCxlLG4pe3QucGVuZGluZ0xhbmVzfD1lLGUhPT01MzY4NzA5MTImJih0LnN1c3BlbmRlZExhbmVzPTAsdC5waW5nZWRMYW5lcz0wKSx0PXQuZXZlbnRUaW1lcyxlPTMxLVNyKGUpLHRbZV09bn1mdW5jdGlvbiBtJCh0LGUpe3ZhciBuPXQucGVuZGluZ0xhbmVzJn5lO3QucGVuZGluZ0xhbmVzPWUsdC5zdXNwZW5kZWRMYW5lcz0wLHQucGluZ2VkTGFuZXM9MCx0LmV4cGlyZWRMYW5lcyY9ZSx0Lm11dGFibGVSZWFkTGFuZXMmPWUsdC5lbnRhbmdsZWRMYW5lcyY9ZSxlPXQuZW50YW5nbGVtZW50czt2YXIgcj10LmV2ZW50VGltZXM7Zm9yKHQ9dC5leHBpcmF0aW9uVGltZXM7MDxuOyl7dmFyIGk9MzEtU3Iobiksbz0xPDxpO2VbaV09MCxyW2ldPS0xLHRbaV09LTEsbiY9fm99fWZ1bmN0aW9uIF9nKHQsZSl7dmFyIG49dC5lbnRhbmdsZWRMYW5lc3w9ZTtmb3IodD10LmVudGFuZ2xlbWVudHM7bjspe3ZhciByPTMxLVNyKG4pLGk9MTw8cjtpJmV8dFtyXSZlJiYodFtyXXw9ZSksbiY9fml9fXZhciBVZT0wO2Z1bmN0aW9uIHhfKHQpe3JldHVybiB0Jj0tdCwxPHQ/NDx0P3QmMjY4NDM1NDU1PzE2OjUzNjg3MDkxMjo0OjF9dmFyIF9fLHdnLHdfLFNfLEVfLEVoPSExLHJ1PVtdLEdpPW51bGwsWWk9bnVsbCxYaT1udWxsLFdhPW5ldyBNYXAsSGE9bmV3IE1hcCxGaT1bXSxnJD0ibW91c2Vkb3duIG1vdXNldXAgdG91Y2hjYW5jZWwgdG91Y2hlbmQgdG91Y2hzdGFydCBhdXhjbGljayBkYmxjbGljayBwb2ludGVyY2FuY2VsIHBvaW50ZXJkb3duIHBvaW50ZXJ1cCBkcmFnZW5kIGRyYWdzdGFydCBkcm9wIGNvbXBvc2l0aW9uZW5kIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBpbnB1dCB0ZXh0SW5wdXQgY29weSBjdXQgcGFzdGUgY2xpY2sgY2hhbmdlIGNvbnRleHRtZW51IHJlc2V0IHN1Ym1pdCIuc3BsaXQoIiAiKTtmdW5jdGlvbiBBeSh0LGUpe3N3aXRjaCh0KXtjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOkdpPW51bGw7YnJlYWs7Y2FzZSJkcmFnZW50ZXIiOmNhc2UiZHJhZ2xlYXZlIjpZaT1udWxsO2JyZWFrO2Nhc2UibW91c2VvdmVyIjpjYXNlIm1vdXNlb3V0IjpYaT1udWxsO2JyZWFrO2Nhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcm91dCI6V2EuZGVsZXRlKGUucG9pbnRlcklkKTticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6SGEuZGVsZXRlKGUucG9pbnRlcklkKX19ZnVuY3Rpb24gWnModCxlLG4scixpLG8pe3JldHVybiB0PT09bnVsbHx8dC5uYXRpdmVFdmVudCE9PW8/KHQ9e2Jsb2NrZWRPbjplLGRvbUV2ZW50TmFtZTpuLGV2ZW50U3lzdGVtRmxhZ3M6cixuYXRpdmVFdmVudDpvLHRhcmdldENvbnRhaW5lcnM6W2ldfSxlIT09bnVsbCYmKGU9TGMoZSksZSE9PW51bGwmJndnKGUpKSx0KToodC5ldmVudFN5c3RlbUZsYWdzfD1yLGU9dC50YXJnZXRDb250YWluZXJzLGkhPT1udWxsJiZlLmluZGV4T2YoaSk9PT0tMSYmZS5wdXNoKGkpLHQpfWZ1bmN0aW9uIHYkKHQsZSxuLHIsaSl7c3dpdGNoKGUpe2Nhc2UiZm9jdXNpbiI6cmV0dXJuIEdpPVpzKEdpLHQsZSxuLHIsaSksITA7Y2FzZSJkcmFnZW50ZXIiOnJldHVybiBZaT1acyhZaSx0LGUsbixyLGkpLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gWGk9WnMoWGksdCxlLG4scixpKSwhMDtjYXNlInBvaW50ZXJvdmVyIjp2YXIgbz1pLnBvaW50ZXJJZDtyZXR1cm4gV2Euc2V0KG8sWnMoV2EuZ2V0KG8pfHxudWxsLHQsZSxuLHIsaSkpLCEwO2Nhc2UiZ290cG9pbnRlcmNhcHR1cmUiOnJldHVybiBvPWkucG9pbnRlcklkLEhhLnNldChvLFpzKEhhLmdldChvKXx8bnVsbCx0LGUsbixyLGkpKSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBDXyh0KXt2YXIgZT1Bbyh0LnRhcmdldCk7aWYoZSE9PW51bGwpe3ZhciBuPWFsKGUpO2lmKG4hPT1udWxsKXtpZihlPW4udGFnLGU9PT0xMyl7aWYoZT1mXyhuKSxlIT09bnVsbCl7dC5ibG9ja2VkT249ZSxFXyh0LnByaW9yaXR5LGZ1bmN0aW9uKCl7d18obil9KTtyZXR1cm59fWVsc2UgaWYoZT09PTMmJm4uc3RhdGVOb2RlLmN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5pc0RlaHlkcmF0ZWQpe3QuYmxvY2tlZE9uPW4udGFnPT09Mz9uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvOm51bGw7cmV0dXJufX19dC5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBQdSh0KXtpZih0LmJsb2NrZWRPbiE9PW51bGwpcmV0dXJuITE7Zm9yKHZhciBlPXQudGFyZ2V0Q29udGFpbmVyczswPGUubGVuZ3RoOyl7dmFyIG49Q2godC5kb21FdmVudE5hbWUsdC5ldmVudFN5c3RlbUZsYWdzLGVbMF0sdC5uYXRpdmVFdmVudCk7aWYobj09PW51bGwpe249dC5uYXRpdmVFdmVudDt2YXIgcj1uZXcgbi5jb25zdHJ1Y3RvcihuLnR5cGUsbik7eWg9cixuLnRhcmdldC5kaXNwYXRjaEV2ZW50KHIpLHloPW51bGx9ZWxzZSByZXR1cm4gZT1MYyhuKSxlIT09bnVsbCYmd2coZSksdC5ibG9ja2VkT249biwhMTtlLnNoaWZ0KCl9cmV0dXJuITB9ZnVuY3Rpb24gTXkodCxlLG4pe1B1KHQpJiZuLmRlbGV0ZShlKX1mdW5jdGlvbiB5JCgpe0VoPSExLEdpIT09bnVsbCYmUHUoR2kpJiYoR2k9bnVsbCksWWkhPT1udWxsJiZQdShZaSkmJihZaT1udWxsKSxYaSE9PW51bGwmJlB1KFhpKSYmKFhpPW51bGwpLFdhLmZvckVhY2goTXkpLEhhLmZvckVhY2goTXkpfWZ1bmN0aW9uIEdzKHQsZSl7dC5ibG9ja2VkT249PT1lJiYodC5ibG9ja2VkT249bnVsbCxFaHx8KEVoPSEwLFduLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soV24udW5zdGFibGVfTm9ybWFsUHJpb3JpdHkseSQpKSl9ZnVuY3Rpb24gVmEodCl7ZnVuY3Rpb24gZShpKXtyZXR1cm4gR3MoaSx0KX1pZigwPHJ1Lmxlbmd0aCl7R3MocnVbMF0sdCk7Zm9yKHZhciBuPTE7bjxydS5sZW5ndGg7bisrKXt2YXIgcj1ydVtuXTtyLmJsb2NrZWRPbj09PXQmJihyLmJsb2NrZWRPbj1udWxsKX19Zm9yKEdpIT09bnVsbCYmR3MoR2ksdCksWWkhPT1udWxsJiZHcyhZaSx0KSxYaSE9PW51bGwmJkdzKFhpLHQpLFdhLmZvckVhY2goZSksSGEuZm9yRWFjaChlKSxuPTA7bjxGaS5sZW5ndGg7bisrKXI9Rmlbbl0sci5ibG9ja2VkT249PT10JiYoci5ibG9ja2VkT249bnVsbCk7Zm9yKDswPEZpLmxlbmd0aCYmKG49RmlbMF0sbi5ibG9ja2VkT249PT1udWxsKTspQ18obiksbi5ibG9ja2VkT249PT1udWxsJiZGaS5zaGlmdCgpfXZhciBKbD1faS5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxuZD0hMDtmdW5jdGlvbiB4JCh0LGUsbixyKXt2YXIgaT1VZSxvPUpsLnRyYW5zaXRpb247SmwudHJhbnNpdGlvbj1udWxsO3RyeXtVZT0xLFNnKHQsZSxuLHIpfWZpbmFsbHl7VWU9aSxKbC50cmFuc2l0aW9uPW99fWZ1bmN0aW9uIF8kKHQsZSxuLHIpe3ZhciBpPVVlLG89SmwudHJhbnNpdGlvbjtKbC50cmFuc2l0aW9uPW51bGw7dHJ5e1VlPTQsU2codCxlLG4scil9ZmluYWxseXtVZT1pLEpsLnRyYW5zaXRpb249b319ZnVuY3Rpb24gU2codCxlLG4scil7aWYobmQpe3ZhciBpPUNoKHQsZSxuLHIpO2lmKGk9PT1udWxsKWtwKHQsZSxyLHJkLG4pLEF5KHQscik7ZWxzZSBpZih2JChpLHQsZSxuLHIpKXIuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihBeSh0LHIpLGUmNCYmLTE8ZyQuaW5kZXhPZih0KSl7Zm9yKDtpIT09bnVsbDspe3ZhciBvPUxjKGkpO2lmKG8hPT1udWxsJiZfXyhvKSxvPUNoKHQsZSxuLHIpLG89PT1udWxsJiZrcCh0LGUscixyZCxuKSxvPT09aSlicmVhaztpPW99aSE9PW51bGwmJnIuc3RvcFByb3BhZ2F0aW9uKCl9ZWxzZSBrcCh0LGUscixudWxsLG4pfX12YXIgcmQ9bnVsbDtmdW5jdGlvbiBDaCh0LGUsbixyKXtpZihyZD1udWxsLHQ9eWcociksdD1Bbyh0KSx0IT09bnVsbClpZihlPWFsKHQpLGU9PT1udWxsKXQ9bnVsbDtlbHNlIGlmKG49ZS50YWcsbj09PTEzKXtpZih0PWZfKGUpLHQhPT1udWxsKXJldHVybiB0O3Q9bnVsbH1lbHNlIGlmKG49PT0zKXtpZihlLnN0YXRlTm9kZS5jdXJyZW50Lm1lbW9pemVkU3RhdGUuaXNEZWh5ZHJhdGVkKXJldHVybiBlLnRhZz09PTM/ZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbzpudWxsO3Q9bnVsbH1lbHNlIGUhPT10JiYodD1udWxsKTtyZXR1cm4gcmQ9dCxudWxsfWZ1bmN0aW9uIGJfKHQpe3N3aXRjaCh0KXtjYXNlImNhbmNlbCI6Y2FzZSJjbGljayI6Y2FzZSJjbG9zZSI6Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdzdGFydCI6Y2FzZSJkcm9wIjpjYXNlImZvY3VzaW4iOmNhc2UiZm9jdXNvdXQiOmNhc2UiaW5wdXQiOmNhc2UiaW52YWxpZCI6Y2FzZSJrZXlkb3duIjpjYXNlImtleXByZXNzIjpjYXNlImtleXVwIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZXVwIjpjYXNlInBhc3RlIjpjYXNlInBhdXNlIjpjYXNlInBsYXkiOmNhc2UicG9pbnRlcmNhbmNlbCI6Y2FzZSJwb2ludGVyZG93biI6Y2FzZSJwb2ludGVydXAiOmNhc2UicmF0ZWNoYW5nZSI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Vla2VkIjpjYXNlInN1Ym1pdCI6Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaHN0YXJ0IjpjYXNlInZvbHVtZWNoYW5nZSI6Y2FzZSJjaGFuZ2UiOmNhc2Uic2VsZWN0aW9uY2hhbmdlIjpjYXNlInRleHRJbnB1dCI6Y2FzZSJjb21wb3NpdGlvbnN0YXJ0IjpjYXNlImNvbXBvc2l0aW9uZW5kIjpjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpjYXNlImJlZm9yZWJsdXIiOmNhc2UiYWZ0ZXJibHVyIjpjYXNlImJlZm9yZWlucHV0IjpjYXNlImJsdXIiOmNhc2UiZnVsbHNjcmVlbmNoYW5nZSI6Y2FzZSJmb2N1cyI6Y2FzZSJoYXNoY2hhbmdlIjpjYXNlInBvcHN0YXRlIjpjYXNlInNlbGVjdCI6Y2FzZSJzZWxlY3RzdGFydCI6cmV0dXJuIDE7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNlb3V0IjpjYXNlIm1vdXNlb3ZlciI6Y2FzZSJwb2ludGVybW92ZSI6Y2FzZSJwb2ludGVyb3V0IjpjYXNlInBvaW50ZXJvdmVyIjpjYXNlInNjcm9sbCI6Y2FzZSJ0b2dnbGUiOmNhc2UidG91Y2htb3ZlIjpjYXNlIndoZWVsIjpjYXNlIm1vdXNlZW50ZXIiOmNhc2UibW91c2VsZWF2ZSI6Y2FzZSJwb2ludGVyZW50ZXIiOmNhc2UicG9pbnRlcmxlYXZlIjpyZXR1cm4gNDtjYXNlIm1lc3NhZ2UiOnN3aXRjaChzJCgpKXtjYXNlIHhnOnJldHVybiAxO2Nhc2UgZ186cmV0dXJuIDQ7Y2FzZSBlZDpjYXNlIGEkOnJldHVybiAxNjtjYXNlIHZfOnJldHVybiA1MzY4NzA5MTI7ZGVmYXVsdDpyZXR1cm4gMTZ9ZGVmYXVsdDpyZXR1cm4gMTZ9fXZhciBIaT1udWxsLEVnPW51bGwsQXU9bnVsbDtmdW5jdGlvbiBrXygpe2lmKEF1KXJldHVybiBBdTt2YXIgdCxlPUVnLG49ZS5sZW5ndGgscixpPSJ2YWx1ZSJpbiBIaT9IaS52YWx1ZTpIaS50ZXh0Q29udGVudCxvPWkubGVuZ3RoO2Zvcih0PTA7dDxuJiZlW3RdPT09aVt0XTt0KyspO3ZhciBsPW4tdDtmb3Iocj0xO3I8PWwmJmVbbi1yXT09PWlbby1yXTtyKyspO3JldHVybiBBdT1pLnNsaWNlKHQsMTxyPzEtcjp2b2lkIDApfWZ1bmN0aW9uIE11KHQpe3ZhciBlPXQua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gdD8odD10LmNoYXJDb2RlLHQ9PT0wJiZlPT09MTMmJih0PTEzKSk6dD1lLHQ9PT0xMCYmKHQ9MTMpLDMyPD10fHx0PT09MTM/dDowfWZ1bmN0aW9uIGl1KCl7cmV0dXJuITB9ZnVuY3Rpb24gTHkoKXtyZXR1cm4hMX1mdW5jdGlvbiBabih0KXtmdW5jdGlvbiBlKG4scixpLG8sbCl7dGhpcy5fcmVhY3ROYW1lPW4sdGhpcy5fdGFyZ2V0SW5zdD1pLHRoaXMudHlwZT1yLHRoaXMubmF0aXZlRXZlbnQ9byx0aGlzLnRhcmdldD1sLHRoaXMuY3VycmVudFRhcmdldD1udWxsO2Zvcih2YXIgcyBpbiB0KXQuaGFzT3duUHJvcGVydHkocykmJihuPXRbc10sdGhpc1tzXT1uP24obyk6b1tzXSk7cmV0dXJuIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPShvLmRlZmF1bHRQcmV2ZW50ZWQhPW51bGw/by5kZWZhdWx0UHJldmVudGVkOm8ucmV0dXJuVmFsdWU9PT0hMSk/aXU6THksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1MeSx0aGlzfXJldHVybiBtdChlLnByb3RvdHlwZSx7cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ9ITA7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5wcmV2ZW50RGVmYXVsdD9uLnByZXZlbnREZWZhdWx0KCk6dHlwZW9mIG4ucmV0dXJuVmFsdWUhPSJ1bmtub3duIiYmKG4ucmV0dXJuVmFsdWU9ITEpLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWl1KX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5uYXRpdmVFdmVudDtuJiYobi5zdG9wUHJvcGFnYXRpb24/bi5zdG9wUHJvcGFnYXRpb24oKTp0eXBlb2Ygbi5jYW5jZWxCdWJibGUhPSJ1bmtub3duIiYmKG4uY2FuY2VsQnViYmxlPSEwKSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWl1KX0scGVyc2lzdDpmdW5jdGlvbigpe30saXNQZXJzaXN0ZW50Oml1fSksZX12YXIgQ3M9e2V2ZW50UGhhc2U6MCxidWJibGVzOjAsY2FuY2VsYWJsZTowLHRpbWVTdGFtcDpmdW5jdGlvbih0KXtyZXR1cm4gdC50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6MCxpc1RydXN0ZWQ6MH0sQ2c9Wm4oQ3MpLE1jPW10KHt9LENzLHt2aWV3OjAsZGV0YWlsOjB9KSx3JD1abihNYyksdnAseXAsWXMsZGY9bXQoe30sTWMse3NjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxwYWdlWDowLHBhZ2VZOjAsY3RybEtleTowLHNoaWZ0S2V5OjAsYWx0S2V5OjAsbWV0YUtleTowLGdldE1vZGlmaWVyU3RhdGU6YmcsYnV0dG9uOjAsYnV0dG9uczowLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVsYXRlZFRhcmdldD09PXZvaWQgMD90LmZyb21FbGVtZW50PT09dC5zcmNFbGVtZW50P3QudG9FbGVtZW50OnQuZnJvbUVsZW1lbnQ6dC5yZWxhdGVkVGFyZ2V0fSxtb3ZlbWVudFg6ZnVuY3Rpb24odCl7cmV0dXJuIm1vdmVtZW50WCJpbiB0P3QubW92ZW1lbnRYOih0IT09WXMmJihZcyYmdC50eXBlPT09Im1vdXNlbW92ZSI/KHZwPXQuc2NyZWVuWC1Zcy5zY3JlZW5YLHlwPXQuc2NyZWVuWS1Zcy5zY3JlZW5ZKTp5cD12cD0wLFlzPXQpLHZwKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKHQpe3JldHVybiJtb3ZlbWVudFkiaW4gdD90Lm1vdmVtZW50WTp5cH19KSxEeT1abihkZiksUyQ9bXQoe30sZGYse2RhdGFUcmFuc2ZlcjowfSksRSQ9Wm4oUyQpLEMkPW10KHt9LE1jLHtyZWxhdGVkVGFyZ2V0OjB9KSx4cD1abihDJCksYiQ9bXQoe30sQ3Mse2FuaW1hdGlvbk5hbWU6MCxlbGFwc2VkVGltZTowLHBzZXVkb0VsZW1lbnQ6MH0pLGskPVpuKGIkKSwkJD1tdCh7fSxDcyx7Y2xpcGJvYXJkRGF0YTpmdW5jdGlvbih0KXtyZXR1cm4iY2xpcGJvYXJkRGF0YSJpbiB0P3QuY2xpcGJvYXJkRGF0YTp3aW5kb3cuY2xpcGJvYXJkRGF0YX19KSxUJD1abigkJCksTiQ9bXQoe30sQ3Mse2RhdGE6MH0pLEl5PVpuKE4kKSxSJD17RXNjOiJFc2NhcGUiLFNwYWNlYmFyOiIgIixMZWZ0OiJBcnJvd0xlZnQiLFVwOiJBcnJvd1VwIixSaWdodDoiQXJyb3dSaWdodCIsRG93bjoiQXJyb3dEb3duIixEZWw6IkRlbGV0ZSIsV2luOiJPUyIsTWVudToiQ29udGV4dE1lbnUiLEFwcHM6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLE1velByaW50YWJsZUtleToiVW5pZGVudGlmaWVkIn0sTyQ9ezg6IkJhY2tzcGFjZSIsOToiVGFiIiwxMjoiQ2xlYXIiLDEzOiJFbnRlciIsMTY6IlNoaWZ0IiwxNzoiQ29udHJvbCIsMTg6IkFsdCIsMTk6IlBhdXNlIiwyMDoiQ2Fwc0xvY2siLDI3OiJFc2NhcGUiLDMyOiIgIiwzMzoiUGFnZVVwIiwzNDoiUGFnZURvd24iLDM1OiJFbmQiLDM2OiJIb21lIiwzNzoiQXJyb3dMZWZ0IiwzODoiQXJyb3dVcCIsMzk6IkFycm93UmlnaHQiLDQwOiJBcnJvd0Rvd24iLDQ1OiJJbnNlcnQiLDQ2OiJEZWxldGUiLDExMjoiRjEiLDExMzoiRjIiLDExNDoiRjMiLDExNToiRjQiLDExNjoiRjUiLDExNzoiRjYiLDExODoiRjciLDExOToiRjgiLDEyMDoiRjkiLDEyMToiRjEwIiwxMjI6IkYxMSIsMTIzOiJGMTIiLDE0NDoiTnVtTG9jayIsMTQ1OiJTY3JvbGxMb2NrIiwyMjQ6Ik1ldGEifSxQJD17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIEEkKHQpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIGUuZ2V0TW9kaWZpZXJTdGF0ZT9lLmdldE1vZGlmaWVyU3RhdGUodCk6KHQ9UCRbdF0pPyEhZVt0XTohMX1mdW5jdGlvbiBiZygpe3JldHVybiBBJH12YXIgTSQ9bXQoe30sTWMse2tleTpmdW5jdGlvbih0KXtpZih0LmtleSl7dmFyIGU9UiRbdC5rZXldfHx0LmtleTtpZihlIT09IlVuaWRlbnRpZmllZCIpcmV0dXJuIGV9cmV0dXJuIHQudHlwZT09PSJrZXlwcmVzcyI/KHQ9TXUodCksdD09PTEzPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6dC50eXBlPT09ImtleWRvd24ifHx0LnR5cGU9PT0ia2V5dXAiP08kW3Qua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxjb2RlOjAsbG9jYXRpb246MCxjdHJsS2V5OjAsc2hpZnRLZXk6MCxhbHRLZXk6MCxtZXRhS2V5OjAscmVwZWF0OjAsbG9jYWxlOjAsZ2V0TW9kaWZpZXJTdGF0ZTpiZyxjaGFyQ29kZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09ImtleXByZXNzIj9NdSh0KTowfSxrZXlDb2RlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT0ia2V5ZG93biJ8fHQudHlwZT09PSJrZXl1cCI/dC5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT0ia2V5cHJlc3MiP011KHQpOnQudHlwZT09PSJrZXlkb3duInx8dC50eXBlPT09ImtleXVwIj90LmtleUNvZGU6MH19KSxMJD1abihNJCksRCQ9bXQoe30sZGYse3BvaW50ZXJJZDowLHdpZHRoOjAsaGVpZ2h0OjAscHJlc3N1cmU6MCx0YW5nZW50aWFsUHJlc3N1cmU6MCx0aWx0WDowLHRpbHRZOjAsdHdpc3Q6MCxwb2ludGVyVHlwZTowLGlzUHJpbWFyeTowfSksank9Wm4oRCQpLEkkPW10KHt9LE1jLHt0b3VjaGVzOjAsdGFyZ2V0VG91Y2hlczowLGNoYW5nZWRUb3VjaGVzOjAsYWx0S2V5OjAsbWV0YUtleTowLGN0cmxLZXk6MCxzaGlmdEtleTowLGdldE1vZGlmaWVyU3RhdGU6Ymd9KSxqJD1abihJJCkseiQ9bXQoe30sQ3Mse3Byb3BlcnR5TmFtZTowLGVsYXBzZWRUaW1lOjAscHNldWRvRWxlbWVudDowfSksRiQ9Wm4oeiQpLEIkPW10KHt9LGRmLHtkZWx0YVg6ZnVuY3Rpb24odCl7cmV0dXJuImRlbHRhWCJpbiB0P3QuZGVsdGFYOiJ3aGVlbERlbHRhWCJpbiB0Py10LndoZWVsRGVsdGFYOjB9LGRlbHRhWTpmdW5jdGlvbih0KXtyZXR1cm4iZGVsdGFZImluIHQ/dC5kZWx0YVk6IndoZWVsRGVsdGFZImluIHQ/LXQud2hlZWxEZWx0YVk6IndoZWVsRGVsdGEiaW4gdD8tdC53aGVlbERlbHRhOjB9LGRlbHRhWjowLGRlbHRhTW9kZTowfSksVSQ9Wm4oQiQpLFckPVs5LDEzLDI3LDMyXSxrZz1maSYmIkNvbXBvc2l0aW9uRXZlbnQiaW4gd2luZG93LF9hPW51bGw7ZmkmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihfYT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBIJD1maSYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiFfYSwkXz1maSYmKCFrZ3x8X2EmJjg8X2EmJjExPj1fYSksenk9IiAiLEZ5PSExO2Z1bmN0aW9uIFRfKHQsZSl7c3dpdGNoKHQpe2Nhc2Uia2V5dXAiOnJldHVybiBXJC5pbmRleE9mKGUua2V5Q29kZSkhPT0tMTtjYXNlImtleWRvd24iOnJldHVybiBlLmtleUNvZGUhPT0yMjk7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiZm9jdXNvdXQiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE5fKHQpe3JldHVybiB0PXQuZGV0YWlsLHR5cGVvZiB0PT0ib2JqZWN0IiYmImRhdGEiaW4gdD90LmRhdGE6bnVsbH12YXIgQWw9ITE7ZnVuY3Rpb24gViQodCxlKXtzd2l0Y2godCl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIE5fKGUpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiBlLndoaWNoIT09MzI/bnVsbDooRnk9ITAsenkpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4gdD1lLmRhdGEsdD09PXp5JiZGeT9udWxsOnQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSyQodCxlKXtpZihBbClyZXR1cm4gdD09PSJjb21wb3NpdGlvbmVuZCJ8fCFrZyYmVF8odCxlKT8odD1rXygpLEF1PUVnPUhpPW51bGwsQWw9ITEsdCk6bnVsbDtzd2l0Y2godCl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoIShlLmN0cmxLZXl8fGUuYWx0S2V5fHxlLm1ldGFLZXkpfHxlLmN0cmxLZXkmJmUuYWx0S2V5KXtpZihlLmNoYXImJjE8ZS5jaGFyLmxlbmd0aClyZXR1cm4gZS5jaGFyO2lmKGUud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZS53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuICRfJiZlLmxvY2FsZSE9PSJrbyI/bnVsbDplLmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIFokPXtjb2xvcjohMCxkYXRlOiEwLGRhdGV0aW1lOiEwLCJkYXRldGltZS1sb2NhbCI6ITAsZW1haWw6ITAsbW9udGg6ITAsbnVtYmVyOiEwLHBhc3N3b3JkOiEwLHJhbmdlOiEwLHNlYXJjaDohMCx0ZWw6ITAsdGV4dDohMCx0aW1lOiEwLHVybDohMCx3ZWVrOiEwfTtmdW5jdGlvbiBCeSh0KXt2YXIgZT10JiZ0Lm5vZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGU9PT0iaW5wdXQiPyEhWiRbdC50eXBlXTplPT09InRleHRhcmVhIn1mdW5jdGlvbiBSXyh0LGUsbixyKXtzXyhyKSxlPWlkKGUsIm9uQ2hhbmdlIiksMDxlLmxlbmd0aCYmKG49bmV3IENnKCJvbkNoYW5nZSIsImNoYW5nZSIsbnVsbCxuLHIpLHQucHVzaCh7ZXZlbnQ6bixsaXN0ZW5lcnM6ZX0pKX12YXIgd2E9bnVsbCxLYT1udWxsO2Z1bmN0aW9uIEckKHQpe0JfKHQsMCl9ZnVuY3Rpb24gZmYodCl7dmFyIGU9RGwodCk7aWYoZV8oZSkpcmV0dXJuIHR9ZnVuY3Rpb24gWSQodCxlKXtpZih0PT09ImNoYW5nZSIpcmV0dXJuIGV9dmFyIE9fPSExO2lmKGZpKXt2YXIgX3A7aWYoZmkpe3ZhciB3cD0ib25pbnB1dCJpbiBkb2N1bWVudDtpZighd3Ape3ZhciBVeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtVeS5zZXRBdHRyaWJ1dGUoIm9uaW5wdXQiLCJyZXR1cm47Iiksd3A9dHlwZW9mIFV5Lm9uaW5wdXQ9PSJmdW5jdGlvbiJ9X3A9d3B9ZWxzZSBfcD0hMTtPXz1fcCYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKX1mdW5jdGlvbiBXeSgpe3dhJiYod2EuZGV0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLFBfKSxLYT13YT1udWxsKX1mdW5jdGlvbiBQXyh0KXtpZih0LnByb3BlcnR5TmFtZT09PSJ2YWx1ZSImJmZmKEthKSl7dmFyIGU9W107Ul8oZSxLYSx0LHlnKHQpKSxkXyhHJCxlKX19ZnVuY3Rpb24gWCQodCxlLG4pe3Q9PT0iZm9jdXNpbiI/KFd5KCksd2E9ZSxLYT1uLHdhLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixQXykpOnQ9PT0iZm9jdXNvdXQiJiZXeSgpfWZ1bmN0aW9uIEokKHQpe2lmKHQ9PT0ic2VsZWN0aW9uY2hhbmdlInx8dD09PSJrZXl1cCJ8fHQ9PT0ia2V5ZG93biIpcmV0dXJuIGZmKEthKX1mdW5jdGlvbiBRJCh0LGUpe2lmKHQ9PT0iY2xpY2siKXJldHVybiBmZihlKX1mdW5jdGlvbiBxJCh0LGUpe2lmKHQ9PT0iaW5wdXQifHx0PT09ImNoYW5nZSIpcmV0dXJuIGZmKGUpfWZ1bmN0aW9uIGVUKHQsZSl7cmV0dXJuIHQ9PT1lJiYodCE9PTB8fDEvdD09PTEvZSl8fHQhPT10JiZlIT09ZX12YXIga3I9dHlwZW9mIE9iamVjdC5pcz09ImZ1bmN0aW9uIj9PYmplY3QuaXM6ZVQ7ZnVuY3Rpb24gWmEodCxlKXtpZihrcih0LGUpKXJldHVybiEwO2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Inx8ZT09PW51bGwpcmV0dXJuITE7dmFyIG49T2JqZWN0LmtleXModCkscj1PYmplY3Qua2V5cyhlKTtpZihuLmxlbmd0aCE9PXIubGVuZ3RoKXJldHVybiExO2ZvcihyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBpPW5bcl07aWYoIWxoLmNhbGwoZSxpKXx8IWtyKHRbaV0sZVtpXSkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gSHkodCl7Zm9yKDt0JiZ0LmZpcnN0Q2hpbGQ7KXQ9dC5maXJzdENoaWxkO3JldHVybiB0fWZ1bmN0aW9uIFZ5KHQsZSl7dmFyIG49SHkodCk7dD0wO2Zvcih2YXIgcjtuOyl7aWYobi5ub2RlVHlwZT09PTMpe2lmKHI9dCtuLnRleHRDb250ZW50Lmxlbmd0aCx0PD1lJiZyPj1lKXJldHVybntub2RlOm4sb2Zmc2V0OmUtdH07dD1yfWU6e2Zvcig7bjspe2lmKG4ubmV4dFNpYmxpbmcpe249bi5uZXh0U2libGluZzticmVhayBlfW49bi5wYXJlbnROb2RlfW49dm9pZCAwfW49SHkobil9fWZ1bmN0aW9uIEFfKHQsZSl7cmV0dXJuIHQmJmU/dD09PWU/ITA6dCYmdC5ub2RlVHlwZT09PTM/ITE6ZSYmZS5ub2RlVHlwZT09PTM/QV8odCxlLnBhcmVudE5vZGUpOiJjb250YWlucyJpbiB0P3QuY29udGFpbnMoZSk6dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8hISh0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJjE2KTohMTohMX1mdW5jdGlvbiBNXygpe2Zvcih2YXIgdD13aW5kb3csZT1KdSgpO2UgaW5zdGFuY2VvZiB0LkhUTUxJRnJhbWVFbGVtZW50Oyl7dHJ5e3ZhciBuPXR5cGVvZiBlLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZj09InN0cmluZyJ9Y2F0Y2h7bj0hMX1pZihuKXQ9ZS5jb250ZW50V2luZG93O2Vsc2UgYnJlYWs7ZT1KdSh0LmRvY3VtZW50KX1yZXR1cm4gZX1mdW5jdGlvbiAkZyh0KXt2YXIgZT10JiZ0Lm5vZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUmJihlPT09ImlucHV0IiYmKHQudHlwZT09PSJ0ZXh0Inx8dC50eXBlPT09InNlYXJjaCJ8fHQudHlwZT09PSJ0ZWwifHx0LnR5cGU9PT0idXJsInx8dC50eXBlPT09InBhc3N3b3JkIil8fGU9PT0idGV4dGFyZWEifHx0LmNvbnRlbnRFZGl0YWJsZT09PSJ0cnVlIil9ZnVuY3Rpb24gdFQodCl7dmFyIGU9TV8oKSxuPXQuZm9jdXNlZEVsZW0scj10LnNlbGVjdGlvblJhbmdlO2lmKGUhPT1uJiZuJiZuLm93bmVyRG9jdW1lbnQmJkFfKG4ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbikpe2lmKHIhPT1udWxsJiYkZyhuKSl7aWYoZT1yLnN0YXJ0LHQ9ci5lbmQsdD09PXZvaWQgMCYmKHQ9ZSksInNlbGVjdGlvblN0YXJ0ImluIG4pbi5zZWxlY3Rpb25TdGFydD1lLG4uc2VsZWN0aW9uRW5kPU1hdGgubWluKHQsbi52YWx1ZS5sZW5ndGgpO2Vsc2UgaWYodD0oZT1uLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmZS5kZWZhdWx0Vmlld3x8d2luZG93LHQuZ2V0U2VsZWN0aW9uKXt0PXQuZ2V0U2VsZWN0aW9uKCk7dmFyIGk9bi50ZXh0Q29udGVudC5sZW5ndGgsbz1NYXRoLm1pbihyLnN0YXJ0LGkpO3I9ci5lbmQ9PT12b2lkIDA/bzpNYXRoLm1pbihyLmVuZCxpKSwhdC5leHRlbmQmJm8+ciYmKGk9cixyPW8sbz1pKSxpPVZ5KG4sbyk7dmFyIGw9VnkobixyKTtpJiZsJiYodC5yYW5nZUNvdW50IT09MXx8dC5hbmNob3JOb2RlIT09aS5ub2RlfHx0LmFuY2hvck9mZnNldCE9PWkub2Zmc2V0fHx0LmZvY3VzTm9kZSE9PWwubm9kZXx8dC5mb2N1c09mZnNldCE9PWwub2Zmc2V0KSYmKGU9ZS5jcmVhdGVSYW5nZSgpLGUuc2V0U3RhcnQoaS5ub2RlLGkub2Zmc2V0KSx0LnJlbW92ZUFsbFJhbmdlcygpLG8+cj8odC5hZGRSYW5nZShlKSx0LmV4dGVuZChsLm5vZGUsbC5vZmZzZXQpKTooZS5zZXRFbmQobC5ub2RlLGwub2Zmc2V0KSx0LmFkZFJhbmdlKGUpKSl9fWZvcihlPVtdLHQ9bjt0PXQucGFyZW50Tm9kZTspdC5ub2RlVHlwZT09PTEmJmUucHVzaCh7ZWxlbWVudDp0LGxlZnQ6dC5zY3JvbGxMZWZ0LHRvcDp0LnNjcm9sbFRvcH0pO2Zvcih0eXBlb2Ygbi5mb2N1cz09ImZ1bmN0aW9uIiYmbi5mb2N1cygpLG49MDtuPGUubGVuZ3RoO24rKyl0PWVbbl0sdC5lbGVtZW50LnNjcm9sbExlZnQ9dC5sZWZ0LHQuZWxlbWVudC5zY3JvbGxUb3A9dC50b3B9fXZhciBuVD1maSYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxNbD1udWxsLGJoPW51bGwsU2E9bnVsbCxraD0hMTtmdW5jdGlvbiBLeSh0LGUsbil7dmFyIHI9bi53aW5kb3c9PT1uP24uZG9jdW1lbnQ6bi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQ7a2h8fE1sPT1udWxsfHxNbCE9PUp1KHIpfHwocj1NbCwic2VsZWN0aW9uU3RhcnQiaW4gciYmJGcocik/cj17c3RhcnQ6ci5zZWxlY3Rpb25TdGFydCxlbmQ6ci5zZWxlY3Rpb25FbmR9OihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSxyPXthbmNob3JOb2RlOnIuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9KSxTYSYmWmEoU2Escil8fChTYT1yLHI9aWQoYmgsIm9uU2VsZWN0IiksMDxyLmxlbmd0aCYmKGU9bmV3IENnKCJvblNlbGVjdCIsInNlbGVjdCIsbnVsbCxlLG4pLHQucHVzaCh7ZXZlbnQ6ZSxsaXN0ZW5lcnM6cn0pLGUudGFyZ2V0PU1sKSkpfWZ1bmN0aW9uIG91KHQsZSl7dmFyIG49e307cmV0dXJuIG5bdC50b0xvd2VyQ2FzZSgpXT1lLnRvTG93ZXJDYXNlKCksblsiV2Via2l0Iit0XT0id2Via2l0IitlLG5bIk1veiIrdF09Im1veiIrZSxufXZhciBMbD17YW5pbWF0aW9uZW5kOm91KCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246b3UoIkFuaW1hdGlvbiIsIkFuaW1hdGlvbkl0ZXJhdGlvbiIpLGFuaW1hdGlvbnN0YXJ0Om91KCJBbmltYXRpb24iLCJBbmltYXRpb25TdGFydCIpLHRyYW5zaXRpb25lbmQ6b3UoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LFNwPXt9LExfPXt9O2ZpJiYoTF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBMbC5hbmltYXRpb25lbmQuYW5pbWF0aW9uLGRlbGV0ZSBMbC5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uLGRlbGV0ZSBMbC5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgTGwudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uKTtmdW5jdGlvbiBwZih0KXtpZihTcFt0XSlyZXR1cm4gU3BbdF07aWYoIUxsW3RdKXJldHVybiB0O3ZhciBlPUxsW3RdLG47Zm9yKG4gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG4pJiZuIGluIExfKXJldHVybiBTcFt0XT1lW25dO3JldHVybiB0fXZhciBEXz1wZigiYW5pbWF0aW9uZW5kIiksSV89cGYoImFuaW1hdGlvbml0ZXJhdGlvbiIpLGpfPXBmKCJhbmltYXRpb25zdGFydCIpLHpfPXBmKCJ0cmFuc2l0aW9uZW5kIiksRl89bmV3IE1hcCxaeT0iYWJvcnQgYXV4Q2xpY2sgY2FuY2VsIGNhblBsYXkgY2FuUGxheVRocm91Z2ggY2xpY2sgY2xvc2UgY29udGV4dE1lbnUgY29weSBjdXQgZHJhZyBkcmFnRW5kIGRyYWdFbnRlciBkcmFnRXhpdCBkcmFnTGVhdmUgZHJhZ092ZXIgZHJhZ1N0YXJ0IGRyb3AgZHVyYXRpb25DaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgZ290UG9pbnRlckNhcHR1cmUgaW5wdXQgaW52YWxpZCBrZXlEb3duIGtleVByZXNzIGtleVVwIGxvYWQgbG9hZGVkRGF0YSBsb2FkZWRNZXRhZGF0YSBsb2FkU3RhcnQgbG9zdFBvaW50ZXJDYXB0dXJlIG1vdXNlRG93biBtb3VzZU1vdmUgbW91c2VPdXQgbW91c2VPdmVyIG1vdXNlVXAgcGFzdGUgcGF1c2UgcGxheSBwbGF5aW5nIHBvaW50ZXJDYW5jZWwgcG9pbnRlckRvd24gcG9pbnRlck1vdmUgcG9pbnRlck91dCBwb2ludGVyT3ZlciBwb2ludGVyVXAgcHJvZ3Jlc3MgcmF0ZUNoYW5nZSByZXNldCByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdWJtaXQgc3VzcGVuZCB0aW1lVXBkYXRlIHRvdWNoQ2FuY2VsIHRvdWNoRW5kIHRvdWNoU3RhcnQgdm9sdW1lQ2hhbmdlIHNjcm9sbCB0b2dnbGUgdG91Y2hNb3ZlIHdhaXRpbmcgd2hlZWwiLnNwbGl0KCIgIik7ZnVuY3Rpb24geG8odCxlKXtGXy5zZXQodCxlKSxzbChlLFt0XSl9Zm9yKHZhciBFcD0wO0VwPFp5Lmxlbmd0aDtFcCsrKXt2YXIgQ3A9WnlbRXBdLHJUPUNwLnRvTG93ZXJDYXNlKCksaVQ9Q3BbMF0udG9VcHBlckNhc2UoKStDcC5zbGljZSgxKTt4byhyVCwib24iK2lUKX14byhEXywib25BbmltYXRpb25FbmQiKTt4byhJXywib25BbmltYXRpb25JdGVyYXRpb24iKTt4byhqXywib25BbmltYXRpb25TdGFydCIpO3hvKCJkYmxjbGljayIsIm9uRG91YmxlQ2xpY2siKTt4bygiZm9jdXNpbiIsIm9uRm9jdXMiKTt4bygiZm9jdXNvdXQiLCJvbkJsdXIiKTt4byh6Xywib25UcmFuc2l0aW9uRW5kIik7bHMoIm9uTW91c2VFbnRlciIsWyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdKTtscygib25Nb3VzZUxlYXZlIixbIm1vdXNlb3V0IiwibW91c2VvdmVyIl0pO2xzKCJvblBvaW50ZXJFbnRlciIsWyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXSk7bHMoIm9uUG9pbnRlckxlYXZlIixbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdKTtzbCgib25DaGFuZ2UiLCJjaGFuZ2UgY2xpY2sgZm9jdXNpbiBmb2N1c291dCBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKSk7c2woIm9uU2VsZWN0IiwiZm9jdXNvdXQgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1c2luIGtleWRvd24ga2V5dXAgbW91c2Vkb3duIG1vdXNldXAgc2VsZWN0aW9uY2hhbmdlIi5zcGxpdCgiICIpKTtzbCgib25CZWZvcmVJbnB1dCIsWyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXSk7c2woIm9uQ29tcG9zaXRpb25FbmQiLCJjb21wb3NpdGlvbmVuZCBmb2N1c291dCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKSk7c2woIm9uQ29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uc3RhcnQgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3NsKCJvbkNvbXBvc2l0aW9uVXBkYXRlIiwiY29tcG9zaXRpb251cGRhdGUgZm9jdXNvdXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIikpO3ZhciBwYT0iYWJvcnQgY2FucGxheSBjYW5wbGF5dGhyb3VnaCBkdXJhdGlvbmNoYW5nZSBlbXB0aWVkIGVuY3J5cHRlZCBlbmRlZCBlcnJvciBsb2FkZWRkYXRhIGxvYWRlZG1ldGFkYXRhIGxvYWRzdGFydCBwYXVzZSBwbGF5IHBsYXlpbmcgcHJvZ3Jlc3MgcmF0ZWNoYW5nZSByZXNpemUgc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIiksb1Q9bmV3IFNldCgiY2FuY2VsIGNsb3NlIGludmFsaWQgbG9hZCBzY3JvbGwgdG9nZ2xlIi5zcGxpdCgiICIpLmNvbmNhdChwYSkpO2Z1bmN0aW9uIEd5KHQsZSxuKXt2YXIgcj10LnR5cGV8fCJ1bmtub3duLWV2ZW50Ijt0LmN1cnJlbnRUYXJnZXQ9bixyJChyLGUsdm9pZCAwLHQpLHQuY3VycmVudFRhcmdldD1udWxsfWZ1bmN0aW9uIEJfKHQsZSl7ZT0oZSY0KSE9PTA7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl0saT1yLmV2ZW50O3I9ci5saXN0ZW5lcnM7ZTp7dmFyIG89dm9pZCAwO2lmKGUpZm9yKHZhciBsPXIubGVuZ3RoLTE7MDw9bDtsLS0pe3ZhciBzPXJbbF0sYT1zLmluc3RhbmNlLGM9cy5jdXJyZW50VGFyZ2V0O2lmKHM9cy5saXN0ZW5lcixhIT09byYmaS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrIGU7R3koaSxzLGMpLG89YX1lbHNlIGZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2lmKHM9cltsXSxhPXMuaW5zdGFuY2UsYz1zLmN1cnJlbnRUYXJnZXQscz1zLmxpc3RlbmVyLGEhPT1vJiZpLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWsgZTtHeShpLHMsYyksbz1hfX19aWYocXUpdGhyb3cgdD13aCxxdT0hMSx3aD1udWxsLHR9ZnVuY3Rpb24gZXQodCxlKXt2YXIgbj1lW09oXTtuPT09dm9pZCAwJiYobj1lW09oXT1uZXcgU2V0KTt2YXIgcj10KyJfX2J1YmJsZSI7bi5oYXMocil8fChVXyhlLHQsMiwhMSksbi5hZGQocikpfWZ1bmN0aW9uIGJwKHQsZSxuKXt2YXIgcj0wO2UmJihyfD00KSxVXyhuLHQscixlKX12YXIgbHU9Il9yZWFjdExpc3RlbmluZyIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7ZnVuY3Rpb24gR2EodCl7aWYoIXRbbHVdKXt0W2x1XT0hMCxZMS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24hPT0ic2VsZWN0aW9uY2hhbmdlIiYmKG9ULmhhcyhuKXx8YnAobiwhMSx0KSxicChuLCEwLHQpKX0pO3ZhciBlPXQubm9kZVR5cGU9PT05P3Q6dC5vd25lckRvY3VtZW50O2U9PT1udWxsfHxlW2x1XXx8KGVbbHVdPSEwLGJwKCJzZWxlY3Rpb25jaGFuZ2UiLCExLGUpKX19ZnVuY3Rpb24gVV8odCxlLG4scil7c3dpdGNoKGJfKGUpKXtjYXNlIDE6dmFyIGk9eCQ7YnJlYWs7Y2FzZSA0Omk9XyQ7YnJlYWs7ZGVmYXVsdDppPVNnfW49aS5iaW5kKG51bGwsZSxuLHQpLGk9dm9pZCAwLCFfaHx8ZSE9PSJ0b3VjaHN0YXJ0IiYmZSE9PSJ0b3VjaG1vdmUiJiZlIT09IndoZWVsInx8KGk9ITApLHI/aSE9PXZvaWQgMD90LmFkZEV2ZW50TGlzdGVuZXIoZSxuLHtjYXB0dXJlOiEwLHBhc3NpdmU6aX0pOnQuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApOmkhPT12b2lkIDA/dC5hZGRFdmVudExpc3RlbmVyKGUsbix7cGFzc2l2ZTppfSk6dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9ZnVuY3Rpb24ga3AodCxlLG4scixpKXt2YXIgbz1yO2lmKCEoZSYxKSYmIShlJjIpJiZyIT09bnVsbCllOmZvcig7Oyl7aWYocj09PW51bGwpcmV0dXJuO3ZhciBsPXIudGFnO2lmKGw9PT0zfHxsPT09NCl7dmFyIHM9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztpZihzPT09aXx8cy5ub2RlVHlwZT09PTgmJnMucGFyZW50Tm9kZT09PWkpYnJlYWs7aWYobD09PTQpZm9yKGw9ci5yZXR1cm47bCE9PW51bGw7KXt2YXIgYT1sLnRhZztpZigoYT09PTN8fGE9PT00KSYmKGE9bC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxhPT09aXx8YS5ub2RlVHlwZT09PTgmJmEucGFyZW50Tm9kZT09PWkpKXJldHVybjtsPWwucmV0dXJufWZvcig7cyE9PW51bGw7KXtpZihsPUFvKHMpLGw9PT1udWxsKXJldHVybjtpZihhPWwudGFnLGE9PT01fHxhPT09Nil7cj1vPWw7Y29udGludWUgZX1zPXMucGFyZW50Tm9kZX19cj1yLnJldHVybn1kXyhmdW5jdGlvbigpe3ZhciBjPW8sdT15ZyhuKSxkPVtdO2U6e3ZhciBmPUZfLmdldCh0KTtpZihmIT09dm9pZCAwKXt2YXIgcD1DZyxnPXQ7c3dpdGNoKHQpe2Nhc2Uia2V5cHJlc3MiOmlmKE11KG4pPT09MClicmVhayBlO2Nhc2Uia2V5ZG93biI6Y2FzZSJrZXl1cCI6cD1MJDticmVhaztjYXNlImZvY3VzaW4iOmc9ImZvY3VzIixwPXhwO2JyZWFrO2Nhc2UiZm9jdXNvdXQiOmc9ImJsdXIiLHA9eHA7YnJlYWs7Y2FzZSJiZWZvcmVibHVyIjpjYXNlImFmdGVyYmx1ciI6cD14cDticmVhaztjYXNlImNsaWNrIjppZihuLmJ1dHRvbj09PTIpYnJlYWsgZTtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOnA9RHk7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6cD1FJDticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjpwPWokO2JyZWFrO2Nhc2UgRF86Y2FzZSBJXzpjYXNlIGpfOnA9ayQ7YnJlYWs7Y2FzZSB6XzpwPUYkO2JyZWFrO2Nhc2Uic2Nyb2xsIjpwPXckO2JyZWFrO2Nhc2Uid2hlZWwiOnA9VSQ7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6cD1UJDticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjpwPWp5fXZhciBtPShlJjQpIT09MCx3PSFtJiZ0PT09InNjcm9sbCIsdj1tP2YhPT1udWxsP2YrIkNhcHR1cmUiOm51bGw6ZjttPVtdO2Zvcih2YXIgeD1jLF87eCE9PW51bGw7KXtfPXg7dmFyIFM9Xy5zdGF0ZU5vZGU7aWYoXy50YWc9PT01JiZTIT09bnVsbCYmKF89Uyx2IT09bnVsbCYmKFM9VWEoeCx2KSxTIT1udWxsJiZtLnB1c2goWWEoeCxTLF8pKSkpLHcpYnJlYWs7eD14LnJldHVybn0wPG0ubGVuZ3RoJiYoZj1uZXcgcChmLGcsbnVsbCxuLHUpLGQucHVzaCh7ZXZlbnQ6ZixsaXN0ZW5lcnM6bX0pKX19aWYoIShlJjcpKXtlOntpZihmPXQ9PT0ibW91c2VvdmVyInx8dD09PSJwb2ludGVyb3ZlciIscD10PT09Im1vdXNlb3V0Inx8dD09PSJwb2ludGVyb3V0IixmJiZuIT09eWgmJihnPW4ucmVsYXRlZFRhcmdldHx8bi5mcm9tRWxlbWVudCkmJihBbyhnKXx8Z1twaV0pKWJyZWFrIGU7aWYoKHB8fGYpJiYoZj11LndpbmRvdz09PXU/dTooZj11Lm93bmVyRG9jdW1lbnQpP2YuZGVmYXVsdFZpZXd8fGYucGFyZW50V2luZG93OndpbmRvdyxwPyhnPW4ucmVsYXRlZFRhcmdldHx8bi50b0VsZW1lbnQscD1jLGc9Zz9BbyhnKTpudWxsLGchPT1udWxsJiYodz1hbChnKSxnIT09d3x8Zy50YWchPT01JiZnLnRhZyE9PTYpJiYoZz1udWxsKSk6KHA9bnVsbCxnPWMpLHAhPT1nKSl7aWYobT1EeSxTPSJvbk1vdXNlTGVhdmUiLHY9Im9uTW91c2VFbnRlciIseD0ibW91c2UiLCh0PT09InBvaW50ZXJvdXQifHx0PT09InBvaW50ZXJvdmVyIikmJihtPWp5LFM9Im9uUG9pbnRlckxlYXZlIix2PSJvblBvaW50ZXJFbnRlciIseD0icG9pbnRlciIpLHc9cD09bnVsbD9mOkRsKHApLF89Zz09bnVsbD9mOkRsKGcpLGY9bmV3IG0oUyx4KyJsZWF2ZSIscCxuLHUpLGYudGFyZ2V0PXcsZi5yZWxhdGVkVGFyZ2V0PV8sUz1udWxsLEFvKHUpPT09YyYmKG09bmV3IG0odix4KyJlbnRlciIsZyxuLHUpLG0udGFyZ2V0PV8sbS5yZWxhdGVkVGFyZ2V0PXcsUz1tKSx3PVMscCYmZyl0Ontmb3IobT1wLHY9Zyx4PTAsXz1tO187Xz14bChfKSl4Kys7Zm9yKF89MCxTPXY7UztTPXhsKFMpKV8rKztmb3IoOzA8eC1fOyltPXhsKG0pLHgtLTtmb3IoOzA8Xy14Oyl2PXhsKHYpLF8tLTtmb3IoO3gtLTspe2lmKG09PT12fHx2IT09bnVsbCYmbT09PXYuYWx0ZXJuYXRlKWJyZWFrIHQ7bT14bChtKSx2PXhsKHYpfW09bnVsbH1lbHNlIG09bnVsbDtwIT09bnVsbCYmWXkoZCxmLHAsbSwhMSksZyE9PW51bGwmJnchPT1udWxsJiZZeShkLHcsZyxtLCEwKX19ZTp7aWYoZj1jP0RsKGMpOndpbmRvdyxwPWYubm9kZU5hbWUmJmYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPT09InNlbGVjdCJ8fHA9PT0iaW5wdXQiJiZmLnR5cGU9PT0iZmlsZSIpdmFyIEU9WSQ7ZWxzZSBpZihCeShmKSlpZihPXylFPXEkO2Vsc2V7RT1KJDt2YXIgaz1YJH1lbHNlKHA9Zi5ub2RlTmFtZSkmJnAudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihmLnR5cGU9PT0iY2hlY2tib3gifHxmLnR5cGU9PT0icmFkaW8iKSYmKEU9USQpO2lmKEUmJihFPUUodCxjKSkpe1JfKGQsRSxuLHUpO2JyZWFrIGV9ayYmayh0LGYsYyksdD09PSJmb2N1c291dCImJihrPWYuX3dyYXBwZXJTdGF0ZSkmJmsuY29udHJvbGxlZCYmZi50eXBlPT09Im51bWJlciImJnBoKGYsIm51bWJlciIsZi52YWx1ZSl9c3dpdGNoKGs9Yz9EbChjKTp3aW5kb3csdCl7Y2FzZSJmb2N1c2luIjooQnkoayl8fGsuY29udGVudEVkaXRhYmxlPT09InRydWUiKSYmKE1sPWssYmg9YyxTYT1udWxsKTticmVhaztjYXNlImZvY3Vzb3V0IjpTYT1iaD1NbD1udWxsO2JyZWFrO2Nhc2UibW91c2Vkb3duIjpraD0hMDticmVhaztjYXNlImNvbnRleHRtZW51IjpjYXNlIm1vdXNldXAiOmNhc2UiZHJhZ2VuZCI6a2g9ITEsS3koZCxuLHUpO2JyZWFrO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZihuVClicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOkt5KGQsbix1KX12YXIgQztpZihrZyllOntzd2l0Y2godCl7Y2FzZSJjb21wb3NpdGlvbnN0YXJ0Ijp2YXIgTj0ib25Db21wb3NpdGlvblN0YXJ0IjticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOk49Im9uQ29tcG9zaXRpb25FbmQiO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6Tj0ib25Db21wb3NpdGlvblVwZGF0ZSI7YnJlYWsgZX1OPXZvaWQgMH1lbHNlIEFsP1RfKHQsbikmJihOPSJvbkNvbXBvc2l0aW9uRW5kIik6dD09PSJrZXlkb3duIiYmbi5rZXlDb2RlPT09MjI5JiYoTj0ib25Db21wb3NpdGlvblN0YXJ0Iik7TiYmKCRfJiZuLmxvY2FsZSE9PSJrbyImJihBbHx8TiE9PSJvbkNvbXBvc2l0aW9uU3RhcnQiP049PT0ib25Db21wb3NpdGlvbkVuZCImJkFsJiYoQz1rXygpKTooSGk9dSxFZz0idmFsdWUiaW4gSGk/SGkudmFsdWU6SGkudGV4dENvbnRlbnQsQWw9ITApKSxrPWlkKGMsTiksMDxrLmxlbmd0aCYmKE49bmV3IEl5KE4sdCxudWxsLG4sdSksZC5wdXNoKHtldmVudDpOLGxpc3RlbmVyczprfSksQz9OLmRhdGE9QzooQz1OXyhuKSxDIT09bnVsbCYmKE4uZGF0YT1DKSkpKSwoQz1IJD9WJCh0LG4pOkskKHQsbikpJiYoYz1pZChjLCJvbkJlZm9yZUlucHV0IiksMDxjLmxlbmd0aCYmKHU9bmV3IEl5KCJvbkJlZm9yZUlucHV0IiwiYmVmb3JlaW5wdXQiLG51bGwsbix1KSxkLnB1c2goe2V2ZW50OnUsbGlzdGVuZXJzOmN9KSx1LmRhdGE9QykpfUJfKGQsZSl9KX1mdW5jdGlvbiBZYSh0LGUsbil7cmV0dXJue2luc3RhbmNlOnQsbGlzdGVuZXI6ZSxjdXJyZW50VGFyZ2V0Om59fWZ1bmN0aW9uIGlkKHQsZSl7Zm9yKHZhciBuPWUrIkNhcHR1cmUiLHI9W107dCE9PW51bGw7KXt2YXIgaT10LG89aS5zdGF0ZU5vZGU7aS50YWc9PT01JiZvIT09bnVsbCYmKGk9byxvPVVhKHQsbiksbyE9bnVsbCYmci51bnNoaWZ0KFlhKHQsbyxpKSksbz1VYSh0LGUpLG8hPW51bGwmJnIucHVzaChZYSh0LG8saSkpKSx0PXQucmV0dXJufXJldHVybiByfWZ1bmN0aW9uIHhsKHQpe2lmKHQ9PT1udWxsKXJldHVybiBudWxsO2RvIHQ9dC5yZXR1cm47d2hpbGUodCYmdC50YWchPT01KTtyZXR1cm4gdHx8bnVsbH1mdW5jdGlvbiBZeSh0LGUsbixyLGkpe2Zvcih2YXIgbz1lLl9yZWFjdE5hbWUsbD1bXTtuIT09bnVsbCYmbiE9PXI7KXt2YXIgcz1uLGE9cy5hbHRlcm5hdGUsYz1zLnN0YXRlTm9kZTtpZihhIT09bnVsbCYmYT09PXIpYnJlYWs7cy50YWc9PT01JiZjIT09bnVsbCYmKHM9YyxpPyhhPVVhKG4sbyksYSE9bnVsbCYmbC51bnNoaWZ0KFlhKG4sYSxzKSkpOml8fChhPVVhKG4sbyksYSE9bnVsbCYmbC5wdXNoKFlhKG4sYSxzKSkpKSxuPW4ucmV0dXJufWwubGVuZ3RoIT09MCYmdC5wdXNoKHtldmVudDplLGxpc3RlbmVyczpsfSl9dmFyIGxUPS9cclxuPy9nLHNUPS9cdTAwMDB8XHVGRkZEL2c7ZnVuY3Rpb24gWHkodCl7cmV0dXJuKHR5cGVvZiB0PT0ic3RyaW5nIj90OiIiK3QpLnJlcGxhY2UobFQsYApgKS5yZXBsYWNlKHNULCIiKX1mdW5jdGlvbiBzdSh0LGUsbil7aWYoZT1YeShlKSxYeSh0KSE9PWUmJm4pdGhyb3cgRXJyb3IoVyg0MjUpKX1mdW5jdGlvbiBvZCgpe312YXIgJGg9bnVsbCxUaD1udWxsO2Z1bmN0aW9uIE5oKHQsZSl7cmV0dXJuIHQ9PT0idGV4dGFyZWEifHx0PT09Im5vc2NyaXB0Inx8dHlwZW9mIGUuY2hpbGRyZW49PSJzdHJpbmcifHx0eXBlb2YgZS5jaGlsZHJlbj09Im51bWJlciJ8fHR5cGVvZiBlLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPT0ib2JqZWN0IiYmZS5kYW5nZXJvdXNseVNldElubmVySFRNTCE9PW51bGwmJmUuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sIT1udWxsfXZhciBSaD10eXBlb2Ygc2V0VGltZW91dD09ImZ1bmN0aW9uIj9zZXRUaW1lb3V0OnZvaWQgMCxhVD10eXBlb2YgY2xlYXJUaW1lb3V0PT0iZnVuY3Rpb24iP2NsZWFyVGltZW91dDp2b2lkIDAsSnk9dHlwZW9mIFByb21pc2U9PSJmdW5jdGlvbiI/UHJvbWlzZTp2b2lkIDAsY1Q9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnR5cGVvZiBKeTwidSI/ZnVuY3Rpb24odCl7cmV0dXJuIEp5LnJlc29sdmUobnVsbCkudGhlbih0KS5jYXRjaCh1VCl9OlJoO2Z1bmN0aW9uIHVUKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9ZnVuY3Rpb24gJHAodCxlKXt2YXIgbj1lLHI9MDtkb3t2YXIgaT1uLm5leHRTaWJsaW5nO2lmKHQucmVtb3ZlQ2hpbGQobiksaSYmaS5ub2RlVHlwZT09PTgpaWYobj1pLmRhdGEsbj09PSIvJCIpe2lmKHI9PT0wKXt0LnJlbW92ZUNoaWxkKGkpLFZhKGUpO3JldHVybn1yLS19ZWxzZSBuIT09IiQiJiZuIT09IiQ/IiYmbiE9PSIkISJ8fHIrKztuPWl9d2hpbGUobik7VmEoZSl9ZnVuY3Rpb24gSmkodCl7Zm9yKDt0IT1udWxsO3Q9dC5uZXh0U2libGluZyl7dmFyIGU9dC5ub2RlVHlwZTtpZihlPT09MXx8ZT09PTMpYnJlYWs7aWYoZT09PTgpe2lmKGU9dC5kYXRhLGU9PT0iJCJ8fGU9PT0iJCEifHxlPT09IiQ/IilicmVhaztpZihlPT09Ii8kIilyZXR1cm4gbnVsbH19cmV0dXJuIHR9ZnVuY3Rpb24gUXkodCl7dD10LnByZXZpb3VzU2libGluZztmb3IodmFyIGU9MDt0Oyl7aWYodC5ub2RlVHlwZT09PTgpe3ZhciBuPXQuZGF0YTtpZihuPT09IiQifHxuPT09IiQhInx8bj09PSIkPyIpe2lmKGU9PT0wKXJldHVybiB0O2UtLX1lbHNlIG49PT0iLyQiJiZlKyt9dD10LnByZXZpb3VzU2libGluZ31yZXR1cm4gbnVsbH12YXIgYnM9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksTHI9Il9fcmVhY3RGaWJlciQiK2JzLFhhPSJfX3JlYWN0UHJvcHMkIiticyxwaT0iX19yZWFjdENvbnRhaW5lciQiK2JzLE9oPSJfX3JlYWN0RXZlbnRzJCIrYnMsZFQ9Il9fcmVhY3RMaXN0ZW5lcnMkIiticyxmVD0iX19yZWFjdEhhbmRsZXMkIiticztmdW5jdGlvbiBBbyh0KXt2YXIgZT10W0xyXTtpZihlKXJldHVybiBlO2Zvcih2YXIgbj10LnBhcmVudE5vZGU7bjspe2lmKGU9bltwaV18fG5bTHJdKXtpZihuPWUuYWx0ZXJuYXRlLGUuY2hpbGQhPT1udWxsfHxuIT09bnVsbCYmbi5jaGlsZCE9PW51bGwpZm9yKHQ9UXkodCk7dCE9PW51bGw7KXtpZihuPXRbTHJdKXJldHVybiBuO3Q9UXkodCl9cmV0dXJuIGV9dD1uLG49dC5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIExjKHQpe3JldHVybiB0PXRbTHJdfHx0W3BpXSwhdHx8dC50YWchPT01JiZ0LnRhZyE9PTYmJnQudGFnIT09MTMmJnQudGFnIT09Mz9udWxsOnR9ZnVuY3Rpb24gRGwodCl7aWYodC50YWc9PT01fHx0LnRhZz09PTYpcmV0dXJuIHQuc3RhdGVOb2RlO3Rocm93IEVycm9yKFcoMzMpKX1mdW5jdGlvbiBoZih0KXtyZXR1cm4gdFtYYV18fG51bGx9dmFyIFBoPVtdLElsPS0xO2Z1bmN0aW9uIF9vKHQpe3JldHVybntjdXJyZW50OnR9fWZ1bmN0aW9uIGl0KHQpezA+SWx8fCh0LmN1cnJlbnQ9UGhbSWxdLFBoW0lsXT1udWxsLElsLS0pfWZ1bmN0aW9uIFhlKHQsZSl7SWwrKyxQaFtJbF09dC5jdXJyZW50LHQuY3VycmVudD1lfXZhciBsbz17fSxvbj1fbyhsbyksTm49X28oITEpLEtvPWxvO2Z1bmN0aW9uIHNzKHQsZSl7dmFyIG49dC50eXBlLmNvbnRleHRUeXBlcztpZighbilyZXR1cm4gbG87dmFyIHI9dC5zdGF0ZU5vZGU7aWYociYmci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09ZSlyZXR1cm4gci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgaT17fSxvO2ZvcihvIGluIG4paVtvXT1lW29dO3JldHVybiByJiYodD10LnN0YXRlTm9kZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9ZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLGl9ZnVuY3Rpb24gUm4odCl7cmV0dXJuIHQ9dC5jaGlsZENvbnRleHRUeXBlcyx0IT1udWxsfWZ1bmN0aW9uIGxkKCl7aXQoTm4pLGl0KG9uKX1mdW5jdGlvbiBxeSh0LGUsbil7aWYob24uY3VycmVudCE9PWxvKXRocm93IEVycm9yKFcoMTY4KSk7WGUob24sZSksWGUoTm4sbil9ZnVuY3Rpb24gV18odCxlLG4pe3ZhciByPXQuc3RhdGVOb2RlO2lmKGU9ZS5jaGlsZENvbnRleHRUeXBlcyx0eXBlb2Ygci5nZXRDaGlsZENvbnRleHQhPSJmdW5jdGlvbiIpcmV0dXJuIG47cj1yLmdldENoaWxkQ29udGV4dCgpO2Zvcih2YXIgaSBpbiByKWlmKCEoaSBpbiBlKSl0aHJvdyBFcnJvcihXKDEwOCxYayh0KXx8IlVua25vd24iLGkpKTtyZXR1cm4gbXQoe30sbixyKX1mdW5jdGlvbiBzZCh0KXtyZXR1cm4gdD0odD10LnN0YXRlTm9kZSkmJnQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fGxvLEtvPW9uLmN1cnJlbnQsWGUob24sdCksWGUoTm4sTm4uY3VycmVudCksITB9ZnVuY3Rpb24gZTAodCxlLG4pe3ZhciByPXQuc3RhdGVOb2RlO2lmKCFyKXRocm93IEVycm9yKFcoMTY5KSk7bj8odD1XXyh0LGUsS28pLHIuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9dCxpdChObiksaXQob24pLFhlKG9uLHQpKTppdChObiksWGUoTm4sbil9dmFyIG9pPW51bGwsbWY9ITEsVHA9ITE7ZnVuY3Rpb24gSF8odCl7b2k9PT1udWxsP29pPVt0XTpvaS5wdXNoKHQpfWZ1bmN0aW9uIHBUKHQpe21mPSEwLEhfKHQpfWZ1bmN0aW9uIHdvKCl7aWYoIVRwJiZvaSE9PW51bGwpe1RwPSEwO3ZhciB0PTAsZT1VZTt0cnl7dmFyIG49b2k7Zm9yKFVlPTE7dDxuLmxlbmd0aDt0Kyspe3ZhciByPW5bdF07ZG8gcj1yKCEwKTt3aGlsZShyIT09bnVsbCl9b2k9bnVsbCxtZj0hMX1jYXRjaChpKXt0aHJvdyBvaSE9PW51bGwmJihvaT1vaS5zbGljZSh0KzEpKSxtXyh4Zyx3byksaX1maW5hbGx5e1VlPWUsVHA9ITF9fXJldHVybiBudWxsfXZhciBqbD1bXSx6bD0wLGFkPW51bGwsY2Q9MCxRbj1bXSxxbj0wLFpvPW51bGwsYWk9MSxjaT0iIjtmdW5jdGlvbiBObyh0LGUpe2psW3psKytdPWNkLGpsW3psKytdPWFkLGFkPXQsY2Q9ZX1mdW5jdGlvbiBWXyh0LGUsbil7UW5bcW4rK109YWksUW5bcW4rK109Y2ksUW5bcW4rK109Wm8sWm89dDt2YXIgcj1haTt0PWNpO3ZhciBpPTMyLVNyKHIpLTE7ciY9figxPDxpKSxuKz0xO3ZhciBvPTMyLVNyKGUpK2k7aWYoMzA8byl7dmFyIGw9aS1pJTU7bz0ociYoMTw8bCktMSkudG9TdHJpbmcoMzIpLHI+Pj1sLGktPWwsYWk9MTw8MzItU3IoZSkraXxuPDxpfHIsY2k9byt0fWVsc2UgYWk9MTw8b3xuPDxpfHIsY2k9dH1mdW5jdGlvbiBUZyh0KXt0LnJldHVybiE9PW51bGwmJihObyh0LDEpLFZfKHQsMSwwKSl9ZnVuY3Rpb24gTmcodCl7Zm9yKDt0PT09YWQ7KWFkPWpsWy0temxdLGpsW3psXT1udWxsLGNkPWpsWy0temxdLGpsW3psXT1udWxsO2Zvcig7dD09PVpvOylabz1RblstLXFuXSxRbltxbl09bnVsbCxjaT1RblstLXFuXSxRbltxbl09bnVsbCxhaT1RblstLXFuXSxRbltxbl09bnVsbH12YXIgem49bnVsbCxqbj1udWxsLG90PSExLHhyPW51bGw7ZnVuY3Rpb24gS18odCxlKXt2YXIgbj1ucig1LG51bGwsbnVsbCwwKTtuLmVsZW1lbnRUeXBlPSJERUxFVEVEIixuLnN0YXRlTm9kZT1lLG4ucmV0dXJuPXQsZT10LmRlbGV0aW9ucyxlPT09bnVsbD8odC5kZWxldGlvbnM9W25dLHQuZmxhZ3N8PTE2KTplLnB1c2gobil9ZnVuY3Rpb24gdDAodCxlKXtzd2l0Y2godC50YWcpe2Nhc2UgNTp2YXIgbj10LnR5cGU7cmV0dXJuIGU9ZS5ub2RlVHlwZSE9PTF8fG4udG9Mb3dlckNhc2UoKSE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT9udWxsOmUsZSE9PW51bGw/KHQuc3RhdGVOb2RlPWUsem49dCxqbj1KaShlLmZpcnN0Q2hpbGQpLCEwKTohMTtjYXNlIDY6cmV0dXJuIGU9dC5wZW5kaW5nUHJvcHM9PT0iInx8ZS5ub2RlVHlwZSE9PTM/bnVsbDplLGUhPT1udWxsPyh0LnN0YXRlTm9kZT1lLHpuPXQsam49bnVsbCwhMCk6ITE7Y2FzZSAxMzpyZXR1cm4gZT1lLm5vZGVUeXBlIT09OD9udWxsOmUsZSE9PW51bGw/KG49Wm8hPT1udWxsP3tpZDphaSxvdmVyZmxvdzpjaX06bnVsbCx0Lm1lbW9pemVkU3RhdGU9e2RlaHlkcmF0ZWQ6ZSx0cmVlQ29udGV4dDpuLHJldHJ5TGFuZToxMDczNzQxODI0fSxuPW5yKDE4LG51bGwsbnVsbCwwKSxuLnN0YXRlTm9kZT1lLG4ucmV0dXJuPXQsdC5jaGlsZD1uLHpuPXQsam49bnVsbCwhMCk6ITE7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gQWgodCl7cmV0dXJuKHQubW9kZSYxKSE9PTAmJih0LmZsYWdzJjEyOCk9PT0wfWZ1bmN0aW9uIE1oKHQpe2lmKG90KXt2YXIgZT1qbjtpZihlKXt2YXIgbj1lO2lmKCF0MCh0LGUpKXtpZihBaCh0KSl0aHJvdyBFcnJvcihXKDQxOCkpO2U9Smkobi5uZXh0U2libGluZyk7dmFyIHI9em47ZSYmdDAodCxlKT9LXyhyLG4pOih0LmZsYWdzPXQuZmxhZ3MmLTQwOTd8MixvdD0hMSx6bj10KX19ZWxzZXtpZihBaCh0KSl0aHJvdyBFcnJvcihXKDQxOCkpO3QuZmxhZ3M9dC5mbGFncyYtNDA5N3wyLG90PSExLHpuPXR9fX1mdW5jdGlvbiBuMCh0KXtmb3IodD10LnJldHVybjt0IT09bnVsbCYmdC50YWchPT01JiZ0LnRhZyE9PTMmJnQudGFnIT09MTM7KXQ9dC5yZXR1cm47em49dH1mdW5jdGlvbiBhdSh0KXtpZih0IT09em4pcmV0dXJuITE7aWYoIW90KXJldHVybiBuMCh0KSxvdD0hMCwhMTt2YXIgZTtpZigoZT10LnRhZyE9PTMpJiYhKGU9dC50YWchPT01KSYmKGU9dC50eXBlLGU9ZSE9PSJoZWFkIiYmZSE9PSJib2R5IiYmIU5oKHQudHlwZSx0Lm1lbW9pemVkUHJvcHMpKSxlJiYoZT1qbikpe2lmKEFoKHQpKXRocm93IFpfKCksRXJyb3IoVyg0MTgpKTtmb3IoO2U7KUtfKHQsZSksZT1KaShlLm5leHRTaWJsaW5nKX1pZihuMCh0KSx0LnRhZz09PTEzKXtpZih0PXQubWVtb2l6ZWRTdGF0ZSx0PXQhPT1udWxsP3QuZGVoeWRyYXRlZDpudWxsLCF0KXRocm93IEVycm9yKFcoMzE3KSk7ZTp7Zm9yKHQ9dC5uZXh0U2libGluZyxlPTA7dDspe2lmKHQubm9kZVR5cGU9PT04KXt2YXIgbj10LmRhdGE7aWYobj09PSIvJCIpe2lmKGU9PT0wKXtqbj1KaSh0Lm5leHRTaWJsaW5nKTticmVhayBlfWUtLX1lbHNlIG4hPT0iJCImJm4hPT0iJCEiJiZuIT09IiQ/Inx8ZSsrfXQ9dC5uZXh0U2libGluZ31qbj1udWxsfX1lbHNlIGpuPXpuP0ppKHQuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIFpfKCl7Zm9yKHZhciB0PWpuO3Q7KXQ9SmkodC5uZXh0U2libGluZyl9ZnVuY3Rpb24gYXMoKXtqbj16bj1udWxsLG90PSExfWZ1bmN0aW9uIFJnKHQpe3hyPT09bnVsbD94cj1bdF06eHIucHVzaCh0KX12YXIgaFQ9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7ZnVuY3Rpb24gZ3IodCxlKXtpZih0JiZ0LmRlZmF1bHRQcm9wcyl7ZT1tdCh7fSxlKSx0PXQuZGVmYXVsdFByb3BzO2Zvcih2YXIgbiBpbiB0KWVbbl09PT12b2lkIDAmJihlW25dPXRbbl0pO3JldHVybiBlfXJldHVybiBlfXZhciB1ZD1fbyhudWxsKSxkZD1udWxsLEZsPW51bGwsT2c9bnVsbDtmdW5jdGlvbiBQZygpe09nPUZsPWRkPW51bGx9ZnVuY3Rpb24gQWcodCl7dmFyIGU9dWQuY3VycmVudDtpdCh1ZCksdC5fY3VycmVudFZhbHVlPWV9ZnVuY3Rpb24gTGgodCxlLG4pe2Zvcig7dCE9PW51bGw7KXt2YXIgcj10LmFsdGVybmF0ZTtpZigodC5jaGlsZExhbmVzJmUpIT09ZT8odC5jaGlsZExhbmVzfD1lLHIhPT1udWxsJiYoci5jaGlsZExhbmVzfD1lKSk6ciE9PW51bGwmJihyLmNoaWxkTGFuZXMmZSkhPT1lJiYoci5jaGlsZExhbmVzfD1lKSx0PT09bilicmVhazt0PXQucmV0dXJufX1mdW5jdGlvbiBRbCh0LGUpe2RkPXQsT2c9Rmw9bnVsbCx0PXQuZGVwZW5kZW5jaWVzLHQhPT1udWxsJiZ0LmZpcnN0Q29udGV4dCE9PW51bGwmJih0LmxhbmVzJmUmJihUbj0hMCksdC5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gbHIodCl7dmFyIGU9dC5fY3VycmVudFZhbHVlO2lmKE9nIT09dClpZih0PXtjb250ZXh0OnQsbWVtb2l6ZWRWYWx1ZTplLG5leHQ6bnVsbH0sRmw9PT1udWxsKXtpZihkZD09PW51bGwpdGhyb3cgRXJyb3IoVygzMDgpKTtGbD10LGRkLmRlcGVuZGVuY2llcz17bGFuZXM6MCxmaXJzdENvbnRleHQ6dH19ZWxzZSBGbD1GbC5uZXh0PXQ7cmV0dXJuIGV9dmFyIE1vPW51bGw7ZnVuY3Rpb24gTWcodCl7TW89PT1udWxsP01vPVt0XTpNby5wdXNoKHQpfWZ1bmN0aW9uIEdfKHQsZSxuLHIpe3ZhciBpPWUuaW50ZXJsZWF2ZWQ7cmV0dXJuIGk9PT1udWxsPyhuLm5leHQ9bixNZyhlKSk6KG4ubmV4dD1pLm5leHQsaS5uZXh0PW4pLGUuaW50ZXJsZWF2ZWQ9bixoaSh0LHIpfWZ1bmN0aW9uIGhpKHQsZSl7dC5sYW5lc3w9ZTt2YXIgbj10LmFsdGVybmF0ZTtmb3IobiE9PW51bGwmJihuLmxhbmVzfD1lKSxuPXQsdD10LnJldHVybjt0IT09bnVsbDspdC5jaGlsZExhbmVzfD1lLG49dC5hbHRlcm5hdGUsbiE9PW51bGwmJihuLmNoaWxkTGFuZXN8PWUpLG49dCx0PXQucmV0dXJuO3JldHVybiBuLnRhZz09PTM/bi5zdGF0ZU5vZGU6bnVsbH12YXIgamk9ITE7ZnVuY3Rpb24gTGcodCl7dC51cGRhdGVRdWV1ZT17YmFzZVN0YXRlOnQubWVtb2l6ZWRTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6bnVsbCxsYXN0QmFzZVVwZGF0ZTpudWxsLHNoYXJlZDp7cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MH0sZWZmZWN0czpudWxsfX1mdW5jdGlvbiBZXyh0LGUpe3Q9dC51cGRhdGVRdWV1ZSxlLnVwZGF0ZVF1ZXVlPT09dCYmKGUudXBkYXRlUXVldWU9e2Jhc2VTdGF0ZTp0LmJhc2VTdGF0ZSxmaXJzdEJhc2VVcGRhdGU6dC5maXJzdEJhc2VVcGRhdGUsbGFzdEJhc2VVcGRhdGU6dC5sYXN0QmFzZVVwZGF0ZSxzaGFyZWQ6dC5zaGFyZWQsZWZmZWN0czp0LmVmZmVjdHN9KX1mdW5jdGlvbiB1aSh0LGUpe3JldHVybntldmVudFRpbWU6dCxsYW5lOmUsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsfX1mdW5jdGlvbiBRaSh0LGUsbil7dmFyIHI9dC51cGRhdGVRdWV1ZTtpZihyPT09bnVsbClyZXR1cm4gbnVsbDtpZihyPXIuc2hhcmVkLE1lJjIpe3ZhciBpPXIucGVuZGluZztyZXR1cm4gaT09PW51bGw/ZS5uZXh0PWU6KGUubmV4dD1pLm5leHQsaS5uZXh0PWUpLHIucGVuZGluZz1lLGhpKHQsbil9cmV0dXJuIGk9ci5pbnRlcmxlYXZlZCxpPT09bnVsbD8oZS5uZXh0PWUsTWcocikpOihlLm5leHQ9aS5uZXh0LGkubmV4dD1lKSxyLmludGVybGVhdmVkPWUsaGkodCxuKX1mdW5jdGlvbiBMdSh0LGUsbil7aWYoZT1lLnVwZGF0ZVF1ZXVlLGUhPT1udWxsJiYoZT1lLnNoYXJlZCwobiY0MTk0MjQwKSE9PTApKXt2YXIgcj1lLmxhbmVzO3ImPXQucGVuZGluZ0xhbmVzLG58PXIsZS5sYW5lcz1uLF9nKHQsbil9fWZ1bmN0aW9uIHIwKHQsZSl7dmFyIG49dC51cGRhdGVRdWV1ZSxyPXQuYWx0ZXJuYXRlO2lmKHIhPT1udWxsJiYocj1yLnVwZGF0ZVF1ZXVlLG49PT1yKSl7dmFyIGk9bnVsbCxvPW51bGw7aWYobj1uLmZpcnN0QmFzZVVwZGF0ZSxuIT09bnVsbCl7ZG97dmFyIGw9e2V2ZW50VGltZTpuLmV2ZW50VGltZSxsYW5lOm4ubGFuZSx0YWc6bi50YWcscGF5bG9hZDpuLnBheWxvYWQsY2FsbGJhY2s6bi5jYWxsYmFjayxuZXh0Om51bGx9O289PT1udWxsP2k9bz1sOm89by5uZXh0PWwsbj1uLm5leHR9d2hpbGUobiE9PW51bGwpO289PT1udWxsP2k9bz1lOm89by5uZXh0PWV9ZWxzZSBpPW89ZTtuPXtiYXNlU3RhdGU6ci5iYXNlU3RhdGUsZmlyc3RCYXNlVXBkYXRlOmksbGFzdEJhc2VVcGRhdGU6byxzaGFyZWQ6ci5zaGFyZWQsZWZmZWN0czpyLmVmZmVjdHN9LHQudXBkYXRlUXVldWU9bjtyZXR1cm59dD1uLmxhc3RCYXNlVXBkYXRlLHQ9PT1udWxsP24uZmlyc3RCYXNlVXBkYXRlPWU6dC5uZXh0PWUsbi5sYXN0QmFzZVVwZGF0ZT1lfWZ1bmN0aW9uIGZkKHQsZSxuLHIpe3ZhciBpPXQudXBkYXRlUXVldWU7amk9ITE7dmFyIG89aS5maXJzdEJhc2VVcGRhdGUsbD1pLmxhc3RCYXNlVXBkYXRlLHM9aS5zaGFyZWQucGVuZGluZztpZihzIT09bnVsbCl7aS5zaGFyZWQucGVuZGluZz1udWxsO3ZhciBhPXMsYz1hLm5leHQ7YS5uZXh0PW51bGwsbD09PW51bGw/bz1jOmwubmV4dD1jLGw9YTt2YXIgdT10LmFsdGVybmF0ZTt1IT09bnVsbCYmKHU9dS51cGRhdGVRdWV1ZSxzPXUubGFzdEJhc2VVcGRhdGUscyE9PWwmJihzPT09bnVsbD91LmZpcnN0QmFzZVVwZGF0ZT1jOnMubmV4dD1jLHUubGFzdEJhc2VVcGRhdGU9YSkpfWlmKG8hPT1udWxsKXt2YXIgZD1pLmJhc2VTdGF0ZTtsPTAsdT1jPWE9bnVsbCxzPW87ZG97dmFyIGY9cy5sYW5lLHA9cy5ldmVudFRpbWU7aWYoKHImZik9PT1mKXt1IT09bnVsbCYmKHU9dS5uZXh0PXtldmVudFRpbWU6cCxsYW5lOjAsdGFnOnMudGFnLHBheWxvYWQ6cy5wYXlsb2FkLGNhbGxiYWNrOnMuY2FsbGJhY2ssbmV4dDpudWxsfSk7ZTp7dmFyIGc9dCxtPXM7c3dpdGNoKGY9ZSxwPW4sbS50YWcpe2Nhc2UgMTppZihnPW0ucGF5bG9hZCx0eXBlb2YgZz09ImZ1bmN0aW9uIil7ZD1nLmNhbGwocCxkLGYpO2JyZWFrIGV9ZD1nO2JyZWFrIGU7Y2FzZSAzOmcuZmxhZ3M9Zy5mbGFncyYtNjU1Mzd8MTI4O2Nhc2UgMDppZihnPW0ucGF5bG9hZCxmPXR5cGVvZiBnPT0iZnVuY3Rpb24iP2cuY2FsbChwLGQsZik6ZyxmPT1udWxsKWJyZWFrIGU7ZD1tdCh7fSxkLGYpO2JyZWFrIGU7Y2FzZSAyOmppPSEwfX1zLmNhbGxiYWNrIT09bnVsbCYmcy5sYW5lIT09MCYmKHQuZmxhZ3N8PTY0LGY9aS5lZmZlY3RzLGY9PT1udWxsP2kuZWZmZWN0cz1bc106Zi5wdXNoKHMpKX1lbHNlIHA9e2V2ZW50VGltZTpwLGxhbmU6Zix0YWc6cy50YWcscGF5bG9hZDpzLnBheWxvYWQsY2FsbGJhY2s6cy5jYWxsYmFjayxuZXh0Om51bGx9LHU9PT1udWxsPyhjPXU9cCxhPWQpOnU9dS5uZXh0PXAsbHw9ZjtpZihzPXMubmV4dCxzPT09bnVsbCl7aWYocz1pLnNoYXJlZC5wZW5kaW5nLHM9PT1udWxsKWJyZWFrO2Y9cyxzPWYubmV4dCxmLm5leHQ9bnVsbCxpLmxhc3RCYXNlVXBkYXRlPWYsaS5zaGFyZWQucGVuZGluZz1udWxsfX13aGlsZSghMCk7aWYodT09PW51bGwmJihhPWQpLGkuYmFzZVN0YXRlPWEsaS5maXJzdEJhc2VVcGRhdGU9YyxpLmxhc3RCYXNlVXBkYXRlPXUsZT1pLnNoYXJlZC5pbnRlcmxlYXZlZCxlIT09bnVsbCl7aT1lO2RvIGx8PWkubGFuZSxpPWkubmV4dDt3aGlsZShpIT09ZSl9ZWxzZSBvPT09bnVsbCYmKGkuc2hhcmVkLmxhbmVzPTApO1lvfD1sLHQubGFuZXM9bCx0Lm1lbW9pemVkU3RhdGU9ZH19ZnVuY3Rpb24gaTAodCxlLG4pe2lmKHQ9ZS5lZmZlY3RzLGUuZWZmZWN0cz1udWxsLHQhPT1udWxsKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspe3ZhciByPXRbZV0saT1yLmNhbGxiYWNrO2lmKGkhPT1udWxsKXtpZihyLmNhbGxiYWNrPW51bGwscj1uLHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFcoMTkxLGkpKTtpLmNhbGwocil9fX12YXIgWF89bmV3IEcxLkNvbXBvbmVudCgpLnJlZnM7ZnVuY3Rpb24gRGgodCxlLG4scil7ZT10Lm1lbW9pemVkU3RhdGUsbj1uKHIsZSksbj1uPT1udWxsP2U6bXQoe30sZSxuKSx0Lm1lbW9pemVkU3RhdGU9bix0LmxhbmVzPT09MCYmKHQudXBkYXRlUXVldWUuYmFzZVN0YXRlPW4pfXZhciBnZj17aXNNb3VudGVkOmZ1bmN0aW9uKHQpe3JldHVybih0PXQuX3JlYWN0SW50ZXJuYWxzKT9hbCh0KT09PXQ6ITF9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbih0LGUsbil7dD10Ll9yZWFjdEludGVybmFsczt2YXIgcj14bigpLGk9ZW8odCksbz11aShyLGkpO28ucGF5bG9hZD1lLG4hPW51bGwmJihvLmNhbGxiYWNrPW4pLGU9UWkodCxvLGkpLGUhPT1udWxsJiYoRXIoZSx0LGksciksTHUoZSx0LGkpKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbih0LGUsbil7dD10Ll9yZWFjdEludGVybmFsczt2YXIgcj14bigpLGk9ZW8odCksbz11aShyLGkpO28udGFnPTEsby5wYXlsb2FkPWUsbiE9bnVsbCYmKG8uY2FsbGJhY2s9biksZT1RaSh0LG8saSksZSE9PW51bGwmJihFcihlLHQsaSxyKSxMdShlLHQsaSkpfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24odCxlKXt0PXQuX3JlYWN0SW50ZXJuYWxzO3ZhciBuPXhuKCkscj1lbyh0KSxpPXVpKG4scik7aS50YWc9MixlIT1udWxsJiYoaS5jYWxsYmFjaz1lKSxlPVFpKHQsaSxyKSxlIT09bnVsbCYmKEVyKGUsdCxyLG4pLEx1KGUsdCxyKSl9fTtmdW5jdGlvbiBvMCh0LGUsbixyLGksbyxsKXtyZXR1cm4gdD10LnN0YXRlTm9kZSx0eXBlb2YgdC5zaG91bGRDb21wb25lbnRVcGRhdGU9PSJmdW5jdGlvbiI/dC5zaG91bGRDb21wb25lbnRVcGRhdGUocixvLGwpOmUucHJvdG90eXBlJiZlLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudD8hWmEobixyKXx8IVphKGksbyk6ITB9ZnVuY3Rpb24gSl8odCxlLG4pe3ZhciByPSExLGk9bG8sbz1lLmNvbnRleHRUeXBlO3JldHVybiB0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsP289bHIobyk6KGk9Um4oZSk/S286b24uY3VycmVudCxyPWUuY29udGV4dFR5cGVzLG89KHI9ciE9bnVsbCk/c3ModCxpKTpsbyksZT1uZXcgZShuLG8pLHQubWVtb2l6ZWRTdGF0ZT1lLnN0YXRlIT09bnVsbCYmZS5zdGF0ZSE9PXZvaWQgMD9lLnN0YXRlOm51bGwsZS51cGRhdGVyPWdmLHQuc3RhdGVOb2RlPWUsZS5fcmVhY3RJbnRlcm5hbHM9dCxyJiYodD10LnN0YXRlTm9kZSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9aSx0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PW8pLGV9ZnVuY3Rpb24gbDAodCxlLG4scil7dD1lLnN0YXRlLHR5cGVvZiBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9PSJmdW5jdGlvbiImJmUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLHR5cGVvZiBlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPT0iZnVuY3Rpb24iJiZlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksZS5zdGF0ZSE9PXQmJmdmLmVucXVldWVSZXBsYWNlU3RhdGUoZSxlLnN0YXRlLG51bGwpfWZ1bmN0aW9uIEloKHQsZSxuLHIpe3ZhciBpPXQuc3RhdGVOb2RlO2kucHJvcHM9bixpLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxpLnJlZnM9WF8sTGcodCk7dmFyIG89ZS5jb250ZXh0VHlwZTt0eXBlb2Ygbz09Im9iamVjdCImJm8hPT1udWxsP2kuY29udGV4dD1scihvKToobz1SbihlKT9Lbzpvbi5jdXJyZW50LGkuY29udGV4dD1zcyh0LG8pKSxpLnN0YXRlPXQubWVtb2l6ZWRTdGF0ZSxvPWUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLHR5cGVvZiBvPT0iZnVuY3Rpb24iJiYoRGgodCxlLG8sbiksaS5zdGF0ZT10Lm1lbW9pemVkU3RhdGUpLHR5cGVvZiBlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09ImZ1bmN0aW9uInx8dHlwZW9mIGkuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBpLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiImJnR5cGVvZiBpLmNvbXBvbmVudFdpbGxNb3VudCE9ImZ1bmN0aW9uInx8KGU9aS5zdGF0ZSx0eXBlb2YgaS5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmkuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGkuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmaS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksZSE9PWkuc3RhdGUmJmdmLmVucXVldWVSZXBsYWNlU3RhdGUoaSxpLnN0YXRlLG51bGwpLGZkKHQsbixpLHIpLGkuc3RhdGU9dC5tZW1vaXplZFN0YXRlKSx0eXBlb2YgaS5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKHQuZmxhZ3N8PTQxOTQzMDgpfWZ1bmN0aW9uIFhzKHQsZSxuKXtpZih0PW4ucmVmLHQhPT1udWxsJiZ0eXBlb2YgdCE9ImZ1bmN0aW9uIiYmdHlwZW9mIHQhPSJvYmplY3QiKXtpZihuLl9vd25lcil7aWYobj1uLl9vd25lcixuKXtpZihuLnRhZyE9PTEpdGhyb3cgRXJyb3IoVygzMDkpKTt2YXIgcj1uLnN0YXRlTm9kZX1pZighcil0aHJvdyBFcnJvcihXKDE0Nyx0KSk7dmFyIGk9cixvPSIiK3Q7cmV0dXJuIGUhPT1udWxsJiZlLnJlZiE9PW51bGwmJnR5cGVvZiBlLnJlZj09ImZ1bmN0aW9uIiYmZS5yZWYuX3N0cmluZ1JlZj09PW8/ZS5yZWY6KGU9ZnVuY3Rpb24obCl7dmFyIHM9aS5yZWZzO3M9PT1YXyYmKHM9aS5yZWZzPXt9KSxsPT09bnVsbD9kZWxldGUgc1tvXTpzW29dPWx9LGUuX3N0cmluZ1JlZj1vLGUpfWlmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBFcnJvcihXKDI4NCkpO2lmKCFuLl9vd25lcil0aHJvdyBFcnJvcihXKDI5MCx0KSl9cmV0dXJuIHR9ZnVuY3Rpb24gY3UodCxlKXt0aHJvdyB0PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSxFcnJvcihXKDMxLHQ9PT0iW29iamVjdCBPYmplY3RdIj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyhlKS5qb2luKCIsICIpKyJ9Ijp0KSl9ZnVuY3Rpb24gczAodCl7dmFyIGU9dC5faW5pdDtyZXR1cm4gZSh0Ll9wYXlsb2FkKX1mdW5jdGlvbiBRXyh0KXtmdW5jdGlvbiBlKHYseCl7aWYodCl7dmFyIF89di5kZWxldGlvbnM7Xz09PW51bGw/KHYuZGVsZXRpb25zPVt4XSx2LmZsYWdzfD0xNik6Xy5wdXNoKHgpfX1mdW5jdGlvbiBuKHYseCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKDt4IT09bnVsbDspZSh2LHgpLHg9eC5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIodix4KXtmb3Iodj1uZXcgTWFwO3ghPT1udWxsOyl4LmtleSE9PW51bGw/di5zZXQoeC5rZXkseCk6di5zZXQoeC5pbmRleCx4KSx4PXguc2libGluZztyZXR1cm4gdn1mdW5jdGlvbiBpKHYseCl7cmV0dXJuIHY9dG8odix4KSx2LmluZGV4PTAsdi5zaWJsaW5nPW51bGwsdn1mdW5jdGlvbiBvKHYseCxfKXtyZXR1cm4gdi5pbmRleD1fLHQ/KF89di5hbHRlcm5hdGUsXyE9PW51bGw/KF89Xy5pbmRleCxfPHg/KHYuZmxhZ3N8PTIseCk6Xyk6KHYuZmxhZ3N8PTIseCkpOih2LmZsYWdzfD0xMDQ4NTc2LHgpfWZ1bmN0aW9uIGwodil7cmV0dXJuIHQmJnYuYWx0ZXJuYXRlPT09bnVsbCYmKHYuZmxhZ3N8PTIpLHZ9ZnVuY3Rpb24gcyh2LHgsXyxTKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09Nj8oeD1McChfLHYubW9kZSxTKSx4LnJldHVybj12LHgpOih4PWkoeCxfKSx4LnJldHVybj12LHgpfWZ1bmN0aW9uIGEodix4LF8sUyl7dmFyIEU9Xy50eXBlO3JldHVybiBFPT09UGw/dSh2LHgsXy5wcm9wcy5jaGlsZHJlbixTLF8ua2V5KTp4IT09bnVsbCYmKHguZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09SWkmJnMwKEUpPT09eC50eXBlKT8oUz1pKHgsXy5wcm9wcyksUy5yZWY9WHModix4LF8pLFMucmV0dXJuPXYsUyk6KFM9QnUoXy50eXBlLF8ua2V5LF8ucHJvcHMsbnVsbCx2Lm1vZGUsUyksUy5yZWY9WHModix4LF8pLFMucmV0dXJuPXYsUyl9ZnVuY3Rpb24gYyh2LHgsXyxTKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09NHx8eC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PV8uY29udGFpbmVySW5mb3x8eC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1fLmltcGxlbWVudGF0aW9uPyh4PURwKF8sdi5tb2RlLFMpLHgucmV0dXJuPXYseCk6KHg9aSh4LF8uY2hpbGRyZW58fFtdKSx4LnJldHVybj12LHgpfWZ1bmN0aW9uIHUodix4LF8sUyxFKXtyZXR1cm4geD09PW51bGx8fHgudGFnIT09Nz8oeD16byhfLHYubW9kZSxTLEUpLHgucmV0dXJuPXYseCk6KHg9aSh4LF8pLHgucmV0dXJuPXYseCl9ZnVuY3Rpb24gZCh2LHgsXyl7aWYodHlwZW9mIHg9PSJzdHJpbmciJiZ4IT09IiJ8fHR5cGVvZiB4PT0ibnVtYmVyIilyZXR1cm4geD1McCgiIit4LHYubW9kZSxfKSx4LnJldHVybj12LHg7aWYodHlwZW9mIHg9PSJvYmplY3QiJiZ4IT09bnVsbCl7c3dpdGNoKHguJCR0eXBlb2Ype2Nhc2UgUWM6cmV0dXJuIF89QnUoeC50eXBlLHgua2V5LHgucHJvcHMsbnVsbCx2Lm1vZGUsXyksXy5yZWY9WHModixudWxsLHgpLF8ucmV0dXJuPXYsXztjYXNlIE9sOnJldHVybiB4PURwKHgsdi5tb2RlLF8pLHgucmV0dXJuPXYseDtjYXNlIElpOnZhciBTPXguX2luaXQ7cmV0dXJuIGQodixTKHguX3BheWxvYWQpLF8pfWlmKGRhKHgpfHxWcyh4KSlyZXR1cm4geD16byh4LHYubW9kZSxfLG51bGwpLHgucmV0dXJuPXYseDtjdSh2LHgpfXJldHVybiBudWxsfWZ1bmN0aW9uIGYodix4LF8sUyl7dmFyIEU9eCE9PW51bGw/eC5rZXk6bnVsbDtpZih0eXBlb2YgXz09InN0cmluZyImJl8hPT0iInx8dHlwZW9mIF89PSJudW1iZXIiKXJldHVybiBFIT09bnVsbD9udWxsOnModix4LCIiK18sUyk7aWYodHlwZW9mIF89PSJvYmplY3QiJiZfIT09bnVsbCl7c3dpdGNoKF8uJCR0eXBlb2Ype2Nhc2UgUWM6cmV0dXJuIF8ua2V5PT09RT9hKHYseCxfLFMpOm51bGw7Y2FzZSBPbDpyZXR1cm4gXy5rZXk9PT1FP2Modix4LF8sUyk6bnVsbDtjYXNlIElpOnJldHVybiBFPV8uX2luaXQsZih2LHgsRShfLl9wYXlsb2FkKSxTKX1pZihkYShfKXx8VnMoXykpcmV0dXJuIEUhPT1udWxsP251bGw6dSh2LHgsXyxTLG51bGwpO2N1KHYsXyl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcCh2LHgsXyxTLEUpe2lmKHR5cGVvZiBTPT0ic3RyaW5nIiYmUyE9PSIifHx0eXBlb2YgUz09Im51bWJlciIpcmV0dXJuIHY9di5nZXQoXyl8fG51bGwscyh4LHYsIiIrUyxFKTtpZih0eXBlb2YgUz09Im9iamVjdCImJlMhPT1udWxsKXtzd2l0Y2goUy4kJHR5cGVvZil7Y2FzZSBRYzpyZXR1cm4gdj12LmdldChTLmtleT09PW51bGw/XzpTLmtleSl8fG51bGwsYSh4LHYsUyxFKTtjYXNlIE9sOnJldHVybiB2PXYuZ2V0KFMua2V5PT09bnVsbD9fOlMua2V5KXx8bnVsbCxjKHgsdixTLEUpO2Nhc2UgSWk6dmFyIGs9Uy5faW5pdDtyZXR1cm4gcCh2LHgsXyxrKFMuX3BheWxvYWQpLEUpfWlmKGRhKFMpfHxWcyhTKSlyZXR1cm4gdj12LmdldChfKXx8bnVsbCx1KHgsdixTLEUsbnVsbCk7Y3UoeCxTKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBnKHYseCxfLFMpe2Zvcih2YXIgRT1udWxsLGs9bnVsbCxDPXgsTj14PTAsQT1udWxsO0MhPT1udWxsJiZOPF8ubGVuZ3RoO04rKyl7Qy5pbmRleD5OPyhBPUMsQz1udWxsKTpBPUMuc2libGluZzt2YXIgVD1mKHYsQyxfW05dLFMpO2lmKFQ9PT1udWxsKXtDPT09bnVsbCYmKEM9QSk7YnJlYWt9dCYmQyYmVC5hbHRlcm5hdGU9PT1udWxsJiZlKHYsQykseD1vKFQseCxOKSxrPT09bnVsbD9FPVQ6ay5zaWJsaW5nPVQsaz1ULEM9QX1pZihOPT09Xy5sZW5ndGgpcmV0dXJuIG4odixDKSxvdCYmTm8odixOKSxFO2lmKEM9PT1udWxsKXtmb3IoO048Xy5sZW5ndGg7TisrKUM9ZCh2LF9bTl0sUyksQyE9PW51bGwmJih4PW8oQyx4LE4pLGs9PT1udWxsP0U9QzprLnNpYmxpbmc9QyxrPUMpO3JldHVybiBvdCYmTm8odixOKSxFfWZvcihDPXIodixDKTtOPF8ubGVuZ3RoO04rKylBPXAoQyx2LE4sX1tOXSxTKSxBIT09bnVsbCYmKHQmJkEuYWx0ZXJuYXRlIT09bnVsbCYmQy5kZWxldGUoQS5rZXk9PT1udWxsP046QS5rZXkpLHg9byhBLHgsTiksaz09PW51bGw/RT1BOmsuc2libGluZz1BLGs9QSk7cmV0dXJuIHQmJkMuZm9yRWFjaChmdW5jdGlvbihEKXtyZXR1cm4gZSh2LEQpfSksb3QmJk5vKHYsTiksRX1mdW5jdGlvbiBtKHYseCxfLFMpe3ZhciBFPVZzKF8pO2lmKHR5cGVvZiBFIT0iZnVuY3Rpb24iKXRocm93IEVycm9yKFcoMTUwKSk7aWYoXz1FLmNhbGwoXyksXz09bnVsbCl0aHJvdyBFcnJvcihXKDE1MSkpO2Zvcih2YXIgaz1FPW51bGwsQz14LE49eD0wLEE9bnVsbCxUPV8ubmV4dCgpO0MhPT1udWxsJiYhVC5kb25lO04rKyxUPV8ubmV4dCgpKXtDLmluZGV4Pk4/KEE9QyxDPW51bGwpOkE9Qy5zaWJsaW5nO3ZhciBEPWYodixDLFQudmFsdWUsUyk7aWYoRD09PW51bGwpe0M9PT1udWxsJiYoQz1BKTticmVha310JiZDJiZELmFsdGVybmF0ZT09PW51bGwmJmUodixDKSx4PW8oRCx4LE4pLGs9PT1udWxsP0U9RDprLnNpYmxpbmc9RCxrPUQsQz1BfWlmKFQuZG9uZSlyZXR1cm4gbih2LEMpLG90JiZObyh2LE4pLEU7aWYoQz09PW51bGwpe2Zvcig7IVQuZG9uZTtOKyssVD1fLm5leHQoKSlUPWQodixULnZhbHVlLFMpLFQhPT1udWxsJiYoeD1vKFQseCxOKSxrPT09bnVsbD9FPVQ6ay5zaWJsaW5nPVQsaz1UKTtyZXR1cm4gb3QmJk5vKHYsTiksRX1mb3IoQz1yKHYsQyk7IVQuZG9uZTtOKyssVD1fLm5leHQoKSlUPXAoQyx2LE4sVC52YWx1ZSxTKSxUIT09bnVsbCYmKHQmJlQuYWx0ZXJuYXRlIT09bnVsbCYmQy5kZWxldGUoVC5rZXk9PT1udWxsP046VC5rZXkpLHg9byhULHgsTiksaz09PW51bGw/RT1UOmsuc2libGluZz1ULGs9VCk7cmV0dXJuIHQmJkMuZm9yRWFjaChmdW5jdGlvbihMKXtyZXR1cm4gZSh2LEwpfSksb3QmJk5vKHYsTiksRX1mdW5jdGlvbiB3KHYseCxfLFMpe2lmKHR5cGVvZiBfPT0ib2JqZWN0IiYmXyE9PW51bGwmJl8udHlwZT09PVBsJiZfLmtleT09PW51bGwmJihfPV8ucHJvcHMuY2hpbGRyZW4pLHR5cGVvZiBfPT0ib2JqZWN0IiYmXyE9PW51bGwpe3N3aXRjaChfLiQkdHlwZW9mKXtjYXNlIFFjOmU6e2Zvcih2YXIgRT1fLmtleSxrPXg7ayE9PW51bGw7KXtpZihrLmtleT09PUUpe2lmKEU9Xy50eXBlLEU9PT1QbCl7aWYoay50YWc9PT03KXtuKHYsay5zaWJsaW5nKSx4PWkoayxfLnByb3BzLmNoaWxkcmVuKSx4LnJldHVybj12LHY9eDticmVhayBlfX1lbHNlIGlmKGsuZWxlbWVudFR5cGU9PT1FfHx0eXBlb2YgRT09Im9iamVjdCImJkUhPT1udWxsJiZFLiQkdHlwZW9mPT09SWkmJnMwKEUpPT09ay50eXBlKXtuKHYsay5zaWJsaW5nKSx4PWkoayxfLnByb3BzKSx4LnJlZj1Ycyh2LGssXykseC5yZXR1cm49dix2PXg7YnJlYWsgZX1uKHYsayk7YnJlYWt9ZWxzZSBlKHYsayk7az1rLnNpYmxpbmd9Xy50eXBlPT09UGw/KHg9em8oXy5wcm9wcy5jaGlsZHJlbix2Lm1vZGUsUyxfLmtleSkseC5yZXR1cm49dix2PXgpOihTPUJ1KF8udHlwZSxfLmtleSxfLnByb3BzLG51bGwsdi5tb2RlLFMpLFMucmVmPVhzKHYseCxfKSxTLnJldHVybj12LHY9Uyl9cmV0dXJuIGwodik7Y2FzZSBPbDplOntmb3Ioaz1fLmtleTt4IT09bnVsbDspe2lmKHgua2V5PT09aylpZih4LnRhZz09PTQmJnguc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1fLmNvbnRhaW5lckluZm8mJnguc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09Xy5pbXBsZW1lbnRhdGlvbil7bih2LHguc2libGluZykseD1pKHgsXy5jaGlsZHJlbnx8W10pLHgucmV0dXJuPXYsdj14O2JyZWFrIGV9ZWxzZXtuKHYseCk7YnJlYWt9ZWxzZSBlKHYseCk7eD14LnNpYmxpbmd9eD1EcChfLHYubW9kZSxTKSx4LnJldHVybj12LHY9eH1yZXR1cm4gbCh2KTtjYXNlIElpOnJldHVybiBrPV8uX2luaXQsdyh2LHgsayhfLl9wYXlsb2FkKSxTKX1pZihkYShfKSlyZXR1cm4gZyh2LHgsXyxTKTtpZihWcyhfKSlyZXR1cm4gbSh2LHgsXyxTKTtjdSh2LF8pfXJldHVybiB0eXBlb2YgXz09InN0cmluZyImJl8hPT0iInx8dHlwZW9mIF89PSJudW1iZXIiPyhfPSIiK18seCE9PW51bGwmJngudGFnPT09Nj8obih2LHguc2libGluZykseD1pKHgsXykseC5yZXR1cm49dix2PXgpOihuKHYseCkseD1McChfLHYubW9kZSxTKSx4LnJldHVybj12LHY9eCksbCh2KSk6bih2LHgpfXJldHVybiB3fXZhciBjcz1RXyghMCkscV89UV8oITEpLERjPXt9LEJyPV9vKERjKSxKYT1fbyhEYyksUWE9X28oRGMpO2Z1bmN0aW9uIExvKHQpe2lmKHQ9PT1EYyl0aHJvdyBFcnJvcihXKDE3NCkpO3JldHVybiB0fWZ1bmN0aW9uIERnKHQsZSl7c3dpdGNoKFhlKFFhLGUpLFhlKEphLHQpLFhlKEJyLERjKSx0PWUubm9kZVR5cGUsdCl7Y2FzZSA5OmNhc2UgMTE6ZT0oZT1lLmRvY3VtZW50RWxlbWVudCk/ZS5uYW1lc3BhY2VVUkk6bWgobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDp0PXQ9PT04P2UucGFyZW50Tm9kZTplLGU9dC5uYW1lc3BhY2VVUkl8fG51bGwsdD10LnRhZ05hbWUsZT1taChlLHQpfWl0KEJyKSxYZShCcixlKX1mdW5jdGlvbiB1cygpe2l0KEJyKSxpdChKYSksaXQoUWEpfWZ1bmN0aW9uIGV3KHQpe0xvKFFhLmN1cnJlbnQpO3ZhciBlPUxvKEJyLmN1cnJlbnQpLG49bWgoZSx0LnR5cGUpO2UhPT1uJiYoWGUoSmEsdCksWGUoQnIsbikpfWZ1bmN0aW9uIElnKHQpe0phLmN1cnJlbnQ9PT10JiYoaXQoQnIpLGl0KEphKSl9dmFyIGR0PV9vKDApO2Z1bmN0aW9uIHBkKHQpe2Zvcih2YXIgZT10O2UhPT1udWxsOyl7aWYoZS50YWc9PT0xMyl7dmFyIG49ZS5tZW1vaXplZFN0YXRlO2lmKG4hPT1udWxsJiYobj1uLmRlaHlkcmF0ZWQsbj09PW51bGx8fG4uZGF0YT09PSIkPyJ8fG4uZGF0YT09PSIkISIpKXJldHVybiBlfWVsc2UgaWYoZS50YWc9PT0xOSYmZS5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyIT09dm9pZCAwKXtpZihlLmZsYWdzJjEyOClyZXR1cm4gZX1lbHNlIGlmKGUuY2hpbGQhPT1udWxsKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhaztmb3IoO2Uuc2libGluZz09PW51bGw7KXtpZihlLnJldHVybj09PW51bGx8fGUucmV0dXJuPT09dClyZXR1cm4gbnVsbDtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9cmV0dXJuIG51bGx9dmFyIE5wPVtdO2Z1bmN0aW9uIGpnKCl7Zm9yKHZhciB0PTA7dDxOcC5sZW5ndGg7dCsrKU5wW3RdLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5PW51bGw7TnAubGVuZ3RoPTB9dmFyIER1PV9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsUnA9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsR289MCxwdD1udWxsLFJ0PW51bGwsRHQ9bnVsbCxoZD0hMSxFYT0hMSxxYT0wLG1UPTA7ZnVuY3Rpb24gWXQoKXt0aHJvdyBFcnJvcihXKDMyMSkpfWZ1bmN0aW9uIHpnKHQsZSl7aWYoZT09PW51bGwpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aCYmbjx0Lmxlbmd0aDtuKyspaWYoIWtyKHRbbl0sZVtuXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRmcodCxlLG4scixpLG8pe2lmKEdvPW8scHQ9ZSxlLm1lbW9pemVkU3RhdGU9bnVsbCxlLnVwZGF0ZVF1ZXVlPW51bGwsZS5sYW5lcz0wLER1LmN1cnJlbnQ9dD09PW51bGx8fHQubWVtb2l6ZWRTdGF0ZT09PW51bGw/eFQ6X1QsdD1uKHIsaSksRWEpe289MDtkb3tpZihFYT0hMSxxYT0wLDI1PD1vKXRocm93IEVycm9yKFcoMzAxKSk7bys9MSxEdD1SdD1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxEdS5jdXJyZW50PXdULHQ9bihyLGkpfXdoaWxlKEVhKX1pZihEdS5jdXJyZW50PW1kLGU9UnQhPT1udWxsJiZSdC5uZXh0IT09bnVsbCxHbz0wLER0PVJ0PXB0PW51bGwsaGQ9ITEsZSl0aHJvdyBFcnJvcihXKDMwMCkpO3JldHVybiB0fWZ1bmN0aW9uIEJnKCl7dmFyIHQ9cWEhPT0wO3JldHVybiBxYT0wLHR9ZnVuY3Rpb24gQXIoKXt2YXIgdD17bWVtb2l6ZWRTdGF0ZTpudWxsLGJhc2VTdGF0ZTpudWxsLGJhc2VRdWV1ZTpudWxsLHF1ZXVlOm51bGwsbmV4dDpudWxsfTtyZXR1cm4gRHQ9PT1udWxsP3B0Lm1lbW9pemVkU3RhdGU9RHQ9dDpEdD1EdC5uZXh0PXQsRHR9ZnVuY3Rpb24gc3IoKXtpZihSdD09PW51bGwpe3ZhciB0PXB0LmFsdGVybmF0ZTt0PXQhPT1udWxsP3QubWVtb2l6ZWRTdGF0ZTpudWxsfWVsc2UgdD1SdC5uZXh0O3ZhciBlPUR0PT09bnVsbD9wdC5tZW1vaXplZFN0YXRlOkR0Lm5leHQ7aWYoZSE9PW51bGwpRHQ9ZSxSdD10O2Vsc2V7aWYodD09PW51bGwpdGhyb3cgRXJyb3IoVygzMTApKTtSdD10LHQ9e21lbW9pemVkU3RhdGU6UnQubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6UnQuYmFzZVN0YXRlLGJhc2VRdWV1ZTpSdC5iYXNlUXVldWUscXVldWU6UnQucXVldWUsbmV4dDpudWxsfSxEdD09PW51bGw/cHQubWVtb2l6ZWRTdGF0ZT1EdD10OkR0PUR0Lm5leHQ9dH1yZXR1cm4gRHR9ZnVuY3Rpb24gZWModCxlKXtyZXR1cm4gdHlwZW9mIGU9PSJmdW5jdGlvbiI/ZSh0KTplfWZ1bmN0aW9uIE9wKHQpe3ZhciBlPXNyKCksbj1lLnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFcoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPXQ7dmFyIHI9UnQsaT1yLmJhc2VRdWV1ZSxvPW4ucGVuZGluZztpZihvIT09bnVsbCl7aWYoaSE9PW51bGwpe3ZhciBsPWkubmV4dDtpLm5leHQ9by5uZXh0LG8ubmV4dD1sfXIuYmFzZVF1ZXVlPWk9byxuLnBlbmRpbmc9bnVsbH1pZihpIT09bnVsbCl7bz1pLm5leHQscj1yLmJhc2VTdGF0ZTt2YXIgcz1sPW51bGwsYT1udWxsLGM9bztkb3t2YXIgdT1jLmxhbmU7aWYoKEdvJnUpPT09dSlhIT09bnVsbCYmKGE9YS5uZXh0PXtsYW5lOjAsYWN0aW9uOmMuYWN0aW9uLGhhc0VhZ2VyU3RhdGU6Yy5oYXNFYWdlclN0YXRlLGVhZ2VyU3RhdGU6Yy5lYWdlclN0YXRlLG5leHQ6bnVsbH0pLHI9Yy5oYXNFYWdlclN0YXRlP2MuZWFnZXJTdGF0ZTp0KHIsYy5hY3Rpb24pO2Vsc2V7dmFyIGQ9e2xhbmU6dSxhY3Rpb246Yy5hY3Rpb24saGFzRWFnZXJTdGF0ZTpjLmhhc0VhZ2VyU3RhdGUsZWFnZXJTdGF0ZTpjLmVhZ2VyU3RhdGUsbmV4dDpudWxsfTthPT09bnVsbD8ocz1hPWQsbD1yKTphPWEubmV4dD1kLHB0LmxhbmVzfD11LFlvfD11fWM9Yy5uZXh0fXdoaWxlKGMhPT1udWxsJiZjIT09byk7YT09PW51bGw/bD1yOmEubmV4dD1zLGtyKHIsZS5tZW1vaXplZFN0YXRlKXx8KFRuPSEwKSxlLm1lbW9pemVkU3RhdGU9cixlLmJhc2VTdGF0ZT1sLGUuYmFzZVF1ZXVlPWEsbi5sYXN0UmVuZGVyZWRTdGF0ZT1yfWlmKHQ9bi5pbnRlcmxlYXZlZCx0IT09bnVsbCl7aT10O2RvIG89aS5sYW5lLHB0LmxhbmVzfD1vLFlvfD1vLGk9aS5uZXh0O3doaWxlKGkhPT10KX1lbHNlIGk9PT1udWxsJiYobi5sYW5lcz0wKTtyZXR1cm5bZS5tZW1vaXplZFN0YXRlLG4uZGlzcGF0Y2hdfWZ1bmN0aW9uIFBwKHQpe3ZhciBlPXNyKCksbj1lLnF1ZXVlO2lmKG49PT1udWxsKXRocm93IEVycm9yKFcoMzExKSk7bi5sYXN0UmVuZGVyZWRSZWR1Y2VyPXQ7dmFyIHI9bi5kaXNwYXRjaCxpPW4ucGVuZGluZyxvPWUubWVtb2l6ZWRTdGF0ZTtpZihpIT09bnVsbCl7bi5wZW5kaW5nPW51bGw7dmFyIGw9aT1pLm5leHQ7ZG8gbz10KG8sbC5hY3Rpb24pLGw9bC5uZXh0O3doaWxlKGwhPT1pKTtrcihvLGUubWVtb2l6ZWRTdGF0ZSl8fChUbj0hMCksZS5tZW1vaXplZFN0YXRlPW8sZS5iYXNlUXVldWU9PT1udWxsJiYoZS5iYXNlU3RhdGU9byksbi5sYXN0UmVuZGVyZWRTdGF0ZT1vfXJldHVybltvLHJdfWZ1bmN0aW9uIHR3KCl7fWZ1bmN0aW9uIG53KHQsZSl7dmFyIG49cHQscj1zcigpLGk9ZSgpLG89IWtyKHIubWVtb2l6ZWRTdGF0ZSxpKTtpZihvJiYoci5tZW1vaXplZFN0YXRlPWksVG49ITApLHI9ci5xdWV1ZSxVZyhvdy5iaW5kKG51bGwsbixyLHQpLFt0XSksci5nZXRTbmFwc2hvdCE9PWV8fG98fER0IT09bnVsbCYmRHQubWVtb2l6ZWRTdGF0ZS50YWcmMSl7aWYobi5mbGFnc3w9MjA0OCx0Yyg5LGl3LmJpbmQobnVsbCxuLHIsaSxlKSx2b2lkIDAsbnVsbCksQnQ9PT1udWxsKXRocm93IEVycm9yKFcoMzQ5KSk7R28mMzB8fHJ3KG4sZSxpKX1yZXR1cm4gaX1mdW5jdGlvbiBydyh0LGUsbil7dC5mbGFnc3w9MTYzODQsdD17Z2V0U25hcHNob3Q6ZSx2YWx1ZTpufSxlPXB0LnVwZGF0ZVF1ZXVlLGU9PT1udWxsPyhlPXtsYXN0RWZmZWN0Om51bGwsc3RvcmVzOm51bGx9LHB0LnVwZGF0ZVF1ZXVlPWUsZS5zdG9yZXM9W3RdKToobj1lLnN0b3JlcyxuPT09bnVsbD9lLnN0b3Jlcz1bdF06bi5wdXNoKHQpKX1mdW5jdGlvbiBpdyh0LGUsbixyKXtlLnZhbHVlPW4sZS5nZXRTbmFwc2hvdD1yLGx3KGUpJiZzdyh0KX1mdW5jdGlvbiBvdyh0LGUsbil7cmV0dXJuIG4oZnVuY3Rpb24oKXtsdyhlKSYmc3codCl9KX1mdW5jdGlvbiBsdyh0KXt2YXIgZT10LmdldFNuYXBzaG90O3Q9dC52YWx1ZTt0cnl7dmFyIG49ZSgpO3JldHVybiFrcih0LG4pfWNhdGNoe3JldHVybiEwfX1mdW5jdGlvbiBzdyh0KXt2YXIgZT1oaSh0LDEpO2UhPT1udWxsJiZFcihlLHQsMSwtMSl9ZnVuY3Rpb24gYTAodCl7dmFyIGU9QXIoKTtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiImJih0PXQoKSksZS5tZW1vaXplZFN0YXRlPWUuYmFzZVN0YXRlPXQsdD17cGVuZGluZzpudWxsLGludGVybGVhdmVkOm51bGwsbGFuZXM6MCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZWMsbGFzdFJlbmRlcmVkU3RhdGU6dH0sZS5xdWV1ZT10LHQ9dC5kaXNwYXRjaD15VC5iaW5kKG51bGwscHQsdCksW2UubWVtb2l6ZWRTdGF0ZSx0XX1mdW5jdGlvbiB0Yyh0LGUsbixyKXtyZXR1cm4gdD17dGFnOnQsY3JlYXRlOmUsZGVzdHJveTpuLGRlcHM6cixuZXh0Om51bGx9LGU9cHQudXBkYXRlUXVldWUsZT09PW51bGw/KGU9e2xhc3RFZmZlY3Q6bnVsbCxzdG9yZXM6bnVsbH0scHQudXBkYXRlUXVldWU9ZSxlLmxhc3RFZmZlY3Q9dC5uZXh0PXQpOihuPWUubGFzdEVmZmVjdCxuPT09bnVsbD9lLmxhc3RFZmZlY3Q9dC5uZXh0PXQ6KHI9bi5uZXh0LG4ubmV4dD10LHQubmV4dD1yLGUubGFzdEVmZmVjdD10KSksdH1mdW5jdGlvbiBhdygpe3JldHVybiBzcigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gSXUodCxlLG4scil7dmFyIGk9QXIoKTtwdC5mbGFnc3w9dCxpLm1lbW9pemVkU3RhdGU9dGMoMXxlLG4sdm9pZCAwLHI9PT12b2lkIDA/bnVsbDpyKX1mdW5jdGlvbiB2Zih0LGUsbixyKXt2YXIgaT1zcigpO3I9cj09PXZvaWQgMD9udWxsOnI7dmFyIG89dm9pZCAwO2lmKFJ0IT09bnVsbCl7dmFyIGw9UnQubWVtb2l6ZWRTdGF0ZTtpZihvPWwuZGVzdHJveSxyIT09bnVsbCYmemcocixsLmRlcHMpKXtpLm1lbW9pemVkU3RhdGU9dGMoZSxuLG8scik7cmV0dXJufX1wdC5mbGFnc3w9dCxpLm1lbW9pemVkU3RhdGU9dGMoMXxlLG4sbyxyKX1mdW5jdGlvbiBjMCh0LGUpe3JldHVybiBJdSg4MzkwNjU2LDgsdCxlKX1mdW5jdGlvbiBVZyh0LGUpe3JldHVybiB2ZigyMDQ4LDgsdCxlKX1mdW5jdGlvbiBjdyh0LGUpe3JldHVybiB2Zig0LDIsdCxlKX1mdW5jdGlvbiB1dyh0LGUpe3JldHVybiB2Zig0LDQsdCxlKX1mdW5jdGlvbiBkdyh0LGUpe2lmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXJldHVybiB0PXQoKSxlKHQpLGZ1bmN0aW9uKCl7ZShudWxsKX07aWYoZSE9bnVsbClyZXR1cm4gdD10KCksZS5jdXJyZW50PXQsZnVuY3Rpb24oKXtlLmN1cnJlbnQ9bnVsbH19ZnVuY3Rpb24gZncodCxlLG4pe3JldHVybiBuPW4hPW51bGw/bi5jb25jYXQoW3RdKTpudWxsLHZmKDQsNCxkdy5iaW5kKG51bGwsZSx0KSxuKX1mdW5jdGlvbiBXZygpe31mdW5jdGlvbiBwdyh0LGUpe3ZhciBuPXNyKCk7ZT1lPT09dm9pZCAwP251bGw6ZTt2YXIgcj1uLm1lbW9pemVkU3RhdGU7cmV0dXJuIHIhPT1udWxsJiZlIT09bnVsbCYmemcoZSxyWzFdKT9yWzBdOihuLm1lbW9pemVkU3RhdGU9W3QsZV0sdCl9ZnVuY3Rpb24gaHcodCxlKXt2YXIgbj1zcigpO2U9ZT09PXZvaWQgMD9udWxsOmU7dmFyIHI9bi5tZW1vaXplZFN0YXRlO3JldHVybiByIT09bnVsbCYmZSE9PW51bGwmJnpnKGUsclsxXSk/clswXToodD10KCksbi5tZW1vaXplZFN0YXRlPVt0LGVdLHQpfWZ1bmN0aW9uIG13KHQsZSxuKXtyZXR1cm4gR28mMjE/KGtyKG4sZSl8fChuPXlfKCkscHQubGFuZXN8PW4sWW98PW4sdC5iYXNlU3RhdGU9ITApLGUpOih0LmJhc2VTdGF0ZSYmKHQuYmFzZVN0YXRlPSExLFRuPSEwKSx0Lm1lbW9pemVkU3RhdGU9bil9ZnVuY3Rpb24gZ1QodCxlKXt2YXIgbj1VZTtVZT1uIT09MCYmND5uP246NCx0KCEwKTt2YXIgcj1ScC50cmFuc2l0aW9uO1JwLnRyYW5zaXRpb249e307dHJ5e3QoITEpLGUoKX1maW5hbGx5e1VlPW4sUnAudHJhbnNpdGlvbj1yfX1mdW5jdGlvbiBndygpe3JldHVybiBzcigpLm1lbW9pemVkU3RhdGV9ZnVuY3Rpb24gdlQodCxlLG4pe3ZhciByPWVvKHQpO2lmKG49e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9LHZ3KHQpKXl3KGUsbik7ZWxzZSBpZihuPUdfKHQsZSxuLHIpLG4hPT1udWxsKXt2YXIgaT14bigpO0VyKG4sdCxyLGkpLHh3KG4sZSxyKX19ZnVuY3Rpb24geVQodCxlLG4pe3ZhciByPWVvKHQpLGk9e2xhbmU6cixhY3Rpb246bixoYXNFYWdlclN0YXRlOiExLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O2lmKHZ3KHQpKXl3KGUsaSk7ZWxzZXt2YXIgbz10LmFsdGVybmF0ZTtpZih0LmxhbmVzPT09MCYmKG89PT1udWxsfHxvLmxhbmVzPT09MCkmJihvPWUubGFzdFJlbmRlcmVkUmVkdWNlcixvIT09bnVsbCkpdHJ5e3ZhciBsPWUubGFzdFJlbmRlcmVkU3RhdGUscz1vKGwsbik7aWYoaS5oYXNFYWdlclN0YXRlPSEwLGkuZWFnZXJTdGF0ZT1zLGtyKHMsbCkpe3ZhciBhPWUuaW50ZXJsZWF2ZWQ7YT09PW51bGw/KGkubmV4dD1pLE1nKGUpKTooaS5uZXh0PWEubmV4dCxhLm5leHQ9aSksZS5pbnRlcmxlYXZlZD1pO3JldHVybn19Y2F0Y2h7fWZpbmFsbHl7fW49R18odCxlLGksciksbiE9PW51bGwmJihpPXhuKCksRXIobix0LHIsaSkseHcobixlLHIpKX19ZnVuY3Rpb24gdncodCl7dmFyIGU9dC5hbHRlcm5hdGU7cmV0dXJuIHQ9PT1wdHx8ZSE9PW51bGwmJmU9PT1wdH1mdW5jdGlvbiB5dyh0LGUpe0VhPWhkPSEwO3ZhciBuPXQucGVuZGluZztuPT09bnVsbD9lLm5leHQ9ZTooZS5uZXh0PW4ubmV4dCxuLm5leHQ9ZSksdC5wZW5kaW5nPWV9ZnVuY3Rpb24geHcodCxlLG4pe2lmKG4mNDE5NDI0MCl7dmFyIHI9ZS5sYW5lcztyJj10LnBlbmRpbmdMYW5lcyxufD1yLGUubGFuZXM9bixfZyh0LG4pfX12YXIgbWQ9e3JlYWRDb250ZXh0OmxyLHVzZUNhbGxiYWNrOll0LHVzZUNvbnRleHQ6WXQsdXNlRWZmZWN0Oll0LHVzZUltcGVyYXRpdmVIYW5kbGU6WXQsdXNlSW5zZXJ0aW9uRWZmZWN0Oll0LHVzZUxheW91dEVmZmVjdDpZdCx1c2VNZW1vOll0LHVzZVJlZHVjZXI6WXQsdXNlUmVmOll0LHVzZVN0YXRlOll0LHVzZURlYnVnVmFsdWU6WXQsdXNlRGVmZXJyZWRWYWx1ZTpZdCx1c2VUcmFuc2l0aW9uOll0LHVzZU11dGFibGVTb3VyY2U6WXQsdXNlU3luY0V4dGVybmFsU3RvcmU6WXQsdXNlSWQ6WXQsdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiExfSx4VD17cmVhZENvbnRleHQ6bHIsdXNlQ2FsbGJhY2s6ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXIoKS5tZW1vaXplZFN0YXRlPVt0LGU9PT12b2lkIDA/bnVsbDplXSx0fSx1c2VDb250ZXh0OmxyLHVzZUVmZmVjdDpjMCx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uIT1udWxsP24uY29uY2F0KFt0XSk6bnVsbCxJdSg0MTk0MzA4LDQsZHcuYmluZChudWxsLGUsdCksbil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbih0LGUpe3JldHVybiBJdSg0MTk0MzA4LDQsdCxlKX0sdXNlSW5zZXJ0aW9uRWZmZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEl1KDQsMix0LGUpfSx1c2VNZW1vOmZ1bmN0aW9uKHQsZSl7dmFyIG49QXIoKTtyZXR1cm4gZT1lPT09dm9pZCAwP251bGw6ZSx0PXQoKSxuLm1lbW9pemVkU3RhdGU9W3QsZV0sdH0sdXNlUmVkdWNlcjpmdW5jdGlvbih0LGUsbil7dmFyIHI9QXIoKTtyZXR1cm4gZT1uIT09dm9pZCAwP24oZSk6ZSxyLm1lbW9pemVkU3RhdGU9ci5iYXNlU3RhdGU9ZSx0PXtwZW5kaW5nOm51bGwsaW50ZXJsZWF2ZWQ6bnVsbCxsYW5lczowLGRpc3BhdGNoOm51bGwsbGFzdFJlbmRlcmVkUmVkdWNlcjp0LGxhc3RSZW5kZXJlZFN0YXRlOmV9LHIucXVldWU9dCx0PXQuZGlzcGF0Y2g9dlQuYmluZChudWxsLHB0LHQpLFtyLm1lbW9pemVkU3RhdGUsdF19LHVzZVJlZjpmdW5jdGlvbih0KXt2YXIgZT1BcigpO3JldHVybiB0PXtjdXJyZW50OnR9LGUubWVtb2l6ZWRTdGF0ZT10fSx1c2VTdGF0ZTphMCx1c2VEZWJ1Z1ZhbHVlOldnLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIEFyKCkubWVtb2l6ZWRTdGF0ZT10fSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9YTAoITEpLGU9dFswXTtyZXR1cm4gdD1nVC5iaW5kKG51bGwsdFsxXSksQXIoKS5tZW1vaXplZFN0YXRlPXQsW2UsdF19LHVzZU11dGFibGVTb3VyY2U6ZnVuY3Rpb24oKXt9LHVzZVN5bmNFeHRlcm5hbFN0b3JlOmZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1wdCxpPUFyKCk7aWYob3Qpe2lmKG49PT12b2lkIDApdGhyb3cgRXJyb3IoVyg0MDcpKTtuPW4oKX1lbHNle2lmKG49ZSgpLEJ0PT09bnVsbCl0aHJvdyBFcnJvcihXKDM0OSkpO0dvJjMwfHxydyhyLGUsbil9aS5tZW1vaXplZFN0YXRlPW47dmFyIG89e3ZhbHVlOm4sZ2V0U25hcHNob3Q6ZX07cmV0dXJuIGkucXVldWU9byxjMChvdy5iaW5kKG51bGwscixvLHQpLFt0XSksci5mbGFnc3w9MjA0OCx0Yyg5LGl3LmJpbmQobnVsbCxyLG8sbixlKSx2b2lkIDAsbnVsbCksbn0sdXNlSWQ6ZnVuY3Rpb24oKXt2YXIgdD1BcigpLGU9QnQuaWRlbnRpZmllclByZWZpeDtpZihvdCl7dmFyIG49Y2kscj1haTtuPShyJn4oMTw8MzItU3IociktMSkpLnRvU3RyaW5nKDMyKStuLGU9IjoiK2UrIlIiK24sbj1xYSsrLDA8biYmKGUrPSJIIituLnRvU3RyaW5nKDMyKSksZSs9IjoifWVsc2Ugbj1tVCsrLGU9IjoiK2UrInIiK24udG9TdHJpbmcoMzIpKyI6IjtyZXR1cm4gdC5tZW1vaXplZFN0YXRlPWV9LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX0sX1Q9e3JlYWRDb250ZXh0OmxyLHVzZUNhbGxiYWNrOnB3LHVzZUNvbnRleHQ6bHIsdXNlRWZmZWN0OlVnLHVzZUltcGVyYXRpdmVIYW5kbGU6ZncsdXNlSW5zZXJ0aW9uRWZmZWN0OmN3LHVzZUxheW91dEVmZmVjdDp1dyx1c2VNZW1vOmh3LHVzZVJlZHVjZXI6T3AsdXNlUmVmOmF3LHVzZVN0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIE9wKGVjKX0sdXNlRGVidWdWYWx1ZTpXZyx1c2VEZWZlcnJlZFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXNyKCk7cmV0dXJuIG13KGUsUnQubWVtb2l6ZWRTdGF0ZSx0KX0sdXNlVHJhbnNpdGlvbjpmdW5jdGlvbigpe3ZhciB0PU9wKGVjKVswXSxlPXNyKCkubWVtb2l6ZWRTdGF0ZTtyZXR1cm5bdCxlXX0sdXNlTXV0YWJsZVNvdXJjZTp0dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpudyx1c2VJZDpndyx1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6ITF9LHdUPXtyZWFkQ29udGV4dDpscix1c2VDYWxsYmFjazpwdyx1c2VDb250ZXh0OmxyLHVzZUVmZmVjdDpVZyx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ3LHVzZUluc2VydGlvbkVmZmVjdDpjdyx1c2VMYXlvdXRFZmZlY3Q6dXcsdXNlTWVtbzpodyx1c2VSZWR1Y2VyOlBwLHVzZVJlZjphdyx1c2VTdGF0ZTpmdW5jdGlvbigpe3JldHVybiBQcChlYyl9LHVzZURlYnVnVmFsdWU6V2csdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZT1zcigpO3JldHVybiBSdD09PW51bGw/ZS5tZW1vaXplZFN0YXRlPXQ6bXcoZSxSdC5tZW1vaXplZFN0YXRlLHQpfSx1c2VUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9UHAoZWMpWzBdLGU9c3IoKS5tZW1vaXplZFN0YXRlO3JldHVyblt0LGVdfSx1c2VNdXRhYmxlU291cmNlOnR3LHVzZVN5bmNFeHRlcm5hbFN0b3JlOm53LHVzZUlkOmd3LHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjohMX07ZnVuY3Rpb24gZHModCxlKXt0cnl7dmFyIG49IiIscj1lO2RvIG4rPVlrKHIpLHI9ci5yZXR1cm47d2hpbGUocik7dmFyIGk9bn1jYXRjaChvKXtpPWAKRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogYCtvLm1lc3NhZ2UrYApgK28uc3RhY2t9cmV0dXJue3ZhbHVlOnQsc291cmNlOmUsc3RhY2s6aSxkaWdlc3Q6bnVsbH19ZnVuY3Rpb24gQXAodCxlLG4pe3JldHVybnt2YWx1ZTp0LHNvdXJjZTpudWxsLHN0YWNrOm4/P251bGwsZGlnZXN0OmU/P251bGx9fWZ1bmN0aW9uIGpoKHQsZSl7dHJ5e2NvbnNvbGUuZXJyb3IoZS52YWx1ZSl9Y2F0Y2gobil7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG59KX19dmFyIFNUPXR5cGVvZiBXZWFrTWFwPT0iZnVuY3Rpb24iP1dlYWtNYXA6TWFwO2Z1bmN0aW9uIF93KHQsZSxuKXtuPXVpKC0xLG4pLG4udGFnPTMsbi5wYXlsb2FkPXtlbGVtZW50Om51bGx9O3ZhciByPWUudmFsdWU7cmV0dXJuIG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXt2ZHx8KHZkPSEwLEdoPXIpLGpoKHQsZSl9LG59ZnVuY3Rpb24gd3codCxlLG4pe249dWkoLTEsbiksbi50YWc9Mzt2YXIgcj10LnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgaT1lLnZhbHVlO24ucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiByKGkpfSxuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7amgodCxlKX19dmFyIG89dC5zdGF0ZU5vZGU7cmV0dXJuIG8hPT1udWxsJiZ0eXBlb2Ygby5jb21wb25lbnREaWRDYXRjaD09ImZ1bmN0aW9uIiYmKG4uY2FsbGJhY2s9ZnVuY3Rpb24oKXtqaCh0LGUpLHR5cGVvZiByIT0iZnVuY3Rpb24iJiYocWk9PT1udWxsP3FpPW5ldyBTZXQoW3RoaXNdKTpxaS5hZGQodGhpcykpO3ZhciBsPWUuc3RhY2s7dGhpcy5jb21wb25lbnREaWRDYXRjaChlLnZhbHVlLHtjb21wb25lbnRTdGFjazpsIT09bnVsbD9sOiIifSl9KSxufWZ1bmN0aW9uIHUwKHQsZSxuKXt2YXIgcj10LnBpbmdDYWNoZTtpZihyPT09bnVsbCl7cj10LnBpbmdDYWNoZT1uZXcgU1Q7dmFyIGk9bmV3IFNldDtyLnNldChlLGkpfWVsc2UgaT1yLmdldChlKSxpPT09dm9pZCAwJiYoaT1uZXcgU2V0LHIuc2V0KGUsaSkpO2kuaGFzKG4pfHwoaS5hZGQobiksdD1EVC5iaW5kKG51bGwsdCxlLG4pLGUudGhlbih0LHQpKX1mdW5jdGlvbiBkMCh0KXtkb3t2YXIgZTtpZigoZT10LnRhZz09PTEzKSYmKGU9dC5tZW1vaXplZFN0YXRlLGU9ZSE9PW51bGw/ZS5kZWh5ZHJhdGVkIT09bnVsbDohMCksZSlyZXR1cm4gdDt0PXQucmV0dXJufXdoaWxlKHQhPT1udWxsKTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBmMCh0LGUsbixyLGkpe3JldHVybiB0Lm1vZGUmMT8odC5mbGFnc3w9NjU1MzYsdC5sYW5lcz1pLHQpOih0PT09ZT90LmZsYWdzfD02NTUzNjoodC5mbGFnc3w9MTI4LG4uZmxhZ3N8PTEzMTA3MixuLmZsYWdzJj0tNTI4MDUsbi50YWc9PT0xJiYobi5hbHRlcm5hdGU9PT1udWxsP24udGFnPTE3OihlPXVpKC0xLDEpLGUudGFnPTIsUWkobixlLDEpKSksbi5sYW5lc3w9MSksdCl9dmFyIEVUPV9pLlJlYWN0Q3VycmVudE93bmVyLFRuPSExO2Z1bmN0aW9uIGRuKHQsZSxuLHIpe2UuY2hpbGQ9dD09PW51bGw/cV8oZSxudWxsLG4scik6Y3MoZSx0LmNoaWxkLG4scil9ZnVuY3Rpb24gcDAodCxlLG4scixpKXtuPW4ucmVuZGVyO3ZhciBvPWUucmVmO3JldHVybiBRbChlLGkpLHI9RmcodCxlLG4scixvLGkpLG49QmcoKSx0IT09bnVsbCYmIVRuPyhlLnVwZGF0ZVF1ZXVlPXQudXBkYXRlUXVldWUsZS5mbGFncyY9LTIwNTMsdC5sYW5lcyY9fmksbWkodCxlLGkpKToob3QmJm4mJlRnKGUpLGUuZmxhZ3N8PTEsZG4odCxlLHIsaSksZS5jaGlsZCl9ZnVuY3Rpb24gaDAodCxlLG4scixpKXtpZih0PT09bnVsbCl7dmFyIG89bi50eXBlO3JldHVybiB0eXBlb2Ygbz09ImZ1bmN0aW9uIiYmIUpnKG8pJiZvLmRlZmF1bHRQcm9wcz09PXZvaWQgMCYmbi5jb21wYXJlPT09bnVsbCYmbi5kZWZhdWx0UHJvcHM9PT12b2lkIDA/KGUudGFnPTE1LGUudHlwZT1vLFN3KHQsZSxvLHIsaSkpOih0PUJ1KG4udHlwZSxudWxsLHIsZSxlLm1vZGUsaSksdC5yZWY9ZS5yZWYsdC5yZXR1cm49ZSxlLmNoaWxkPXQpfWlmKG89dC5jaGlsZCwhKHQubGFuZXMmaSkpe3ZhciBsPW8ubWVtb2l6ZWRQcm9wcztpZihuPW4uY29tcGFyZSxuPW4hPT1udWxsP246WmEsbihsLHIpJiZ0LnJlZj09PWUucmVmKXJldHVybiBtaSh0LGUsaSl9cmV0dXJuIGUuZmxhZ3N8PTEsdD10byhvLHIpLHQucmVmPWUucmVmLHQucmV0dXJuPWUsZS5jaGlsZD10fWZ1bmN0aW9uIFN3KHQsZSxuLHIsaSl7aWYodCE9PW51bGwpe3ZhciBvPXQubWVtb2l6ZWRQcm9wcztpZihaYShvLHIpJiZ0LnJlZj09PWUucmVmKWlmKFRuPSExLGUucGVuZGluZ1Byb3BzPXI9bywodC5sYW5lcyZpKSE9PTApdC5mbGFncyYxMzEwNzImJihUbj0hMCk7ZWxzZSByZXR1cm4gZS5sYW5lcz10LmxhbmVzLG1pKHQsZSxpKX1yZXR1cm4gemgodCxlLG4scixpKX1mdW5jdGlvbiBFdyh0LGUsbil7dmFyIHI9ZS5wZW5kaW5nUHJvcHMsaT1yLmNoaWxkcmVuLG89dCE9PW51bGw/dC5tZW1vaXplZFN0YXRlOm51bGw7aWYoci5tb2RlPT09ImhpZGRlbiIpaWYoIShlLm1vZGUmMSkpZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxYZShVbCxMbiksTG58PW47ZWxzZXtpZighKG4mMTA3Mzc0MTgyNCkpcmV0dXJuIHQ9byE9PW51bGw/by5iYXNlTGFuZXN8bjpuLGUubGFuZXM9ZS5jaGlsZExhbmVzPTEwNzM3NDE4MjQsZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6dCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxlLnVwZGF0ZVF1ZXVlPW51bGwsWGUoVWwsTG4pLExufD10LG51bGw7ZS5tZW1vaXplZFN0YXRlPXtiYXNlTGFuZXM6MCxjYWNoZVBvb2w6bnVsbCx0cmFuc2l0aW9uczpudWxsfSxyPW8hPT1udWxsP28uYmFzZUxhbmVzOm4sWGUoVWwsTG4pLExufD1yfWVsc2UgbyE9PW51bGw/KHI9by5iYXNlTGFuZXN8bixlLm1lbW9pemVkU3RhdGU9bnVsbCk6cj1uLFhlKFVsLExuKSxMbnw9cjtyZXR1cm4gZG4odCxlLGksbiksZS5jaGlsZH1mdW5jdGlvbiBDdyh0LGUpe3ZhciBuPWUucmVmOyh0PT09bnVsbCYmbiE9PW51bGx8fHQhPT1udWxsJiZ0LnJlZiE9PW4pJiYoZS5mbGFnc3w9NTEyLGUuZmxhZ3N8PTIwOTcxNTIpfWZ1bmN0aW9uIHpoKHQsZSxuLHIsaSl7dmFyIG89Um4obik/S286b24uY3VycmVudDtyZXR1cm4gbz1zcyhlLG8pLFFsKGUsaSksbj1GZyh0LGUsbixyLG8saSkscj1CZygpLHQhPT1udWxsJiYhVG4/KGUudXBkYXRlUXVldWU9dC51cGRhdGVRdWV1ZSxlLmZsYWdzJj0tMjA1Myx0LmxhbmVzJj1+aSxtaSh0LGUsaSkpOihvdCYmciYmVGcoZSksZS5mbGFnc3w9MSxkbih0LGUsbixpKSxlLmNoaWxkKX1mdW5jdGlvbiBtMCh0LGUsbixyLGkpe2lmKFJuKG4pKXt2YXIgbz0hMDtzZChlKX1lbHNlIG89ITE7aWYoUWwoZSxpKSxlLnN0YXRlTm9kZT09PW51bGwpanUodCxlKSxKXyhlLG4sciksSWgoZSxuLHIsaSkscj0hMDtlbHNlIGlmKHQ9PT1udWxsKXt2YXIgbD1lLnN0YXRlTm9kZSxzPWUubWVtb2l6ZWRQcm9wcztsLnByb3BzPXM7dmFyIGE9bC5jb250ZXh0LGM9bi5jb250ZXh0VHlwZTt0eXBlb2YgYz09Im9iamVjdCImJmMhPT1udWxsP2M9bHIoYyk6KGM9Um4obik/S286b24uY3VycmVudCxjPXNzKGUsYykpO3ZhciB1PW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGQ9dHlwZW9mIHU9PSJmdW5jdGlvbiJ8fHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlPT0iZnVuY3Rpb24iO2R8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PXJ8fGEhPT1jKSYmbDAoZSxsLHIsYyksamk9ITE7dmFyIGY9ZS5tZW1vaXplZFN0YXRlO2wuc3RhdGU9ZixmZChlLHIsbCxpKSxhPWUubWVtb2l6ZWRTdGF0ZSxzIT09cnx8ZiE9PWF8fE5uLmN1cnJlbnR8fGppPyh0eXBlb2YgdT09ImZ1bmN0aW9uIiYmKERoKGUsbix1LHIpLGE9ZS5tZW1vaXplZFN0YXRlKSwocz1qaXx8bzAoZSxuLHMscixmLGEsYykpPyhkfHx0eXBlb2YgbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsTW91bnQ9PSJmdW5jdGlvbiImJmwuY29tcG9uZW50V2lsbE1vdW50KCksdHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudD09ImZ1bmN0aW9uIiYmbC5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NDE5NDMwOCkpOih0eXBlb2YgbC5jb21wb25lbnREaWRNb3VudD09ImZ1bmN0aW9uIiYmKGUuZmxhZ3N8PTQxOTQzMDgpLGUubWVtb2l6ZWRQcm9wcz1yLGUubWVtb2l6ZWRTdGF0ZT1hKSxsLnByb3BzPXIsbC5zdGF0ZT1hLGwuY29udGV4dD1jLHI9cyk6KHR5cGVvZiBsLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NDE5NDMwOCkscj0hMSl9ZWxzZXtsPWUuc3RhdGVOb2RlLFlfKHQsZSkscz1lLm1lbW9pemVkUHJvcHMsYz1lLnR5cGU9PT1lLmVsZW1lbnRUeXBlP3M6Z3IoZS50eXBlLHMpLGwucHJvcHM9YyxkPWUucGVuZGluZ1Byb3BzLGY9bC5jb250ZXh0LGE9bi5jb250ZXh0VHlwZSx0eXBlb2YgYT09Im9iamVjdCImJmEhPT1udWxsP2E9bHIoYSk6KGE9Um4obik/S286b24uY3VycmVudCxhPXNzKGUsYSkpO3ZhciBwPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyh1PXR5cGVvZiBwPT0iZnVuY3Rpb24ifHx0eXBlb2YgbC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZT09ImZ1bmN0aW9uIil8fHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24iJiZ0eXBlb2YgbC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT0iZnVuY3Rpb24ifHwocyE9PWR8fGYhPT1hKSYmbDAoZSxsLHIsYSksamk9ITEsZj1lLm1lbW9pemVkU3RhdGUsbC5zdGF0ZT1mLGZkKGUscixsLGkpO3ZhciBnPWUubWVtb2l6ZWRTdGF0ZTtzIT09ZHx8ZiE9PWd8fE5uLmN1cnJlbnR8fGppPyh0eXBlb2YgcD09ImZ1bmN0aW9uIiYmKERoKGUsbixwLHIpLGc9ZS5tZW1vaXplZFN0YXRlKSwoYz1qaXx8bzAoZSxuLGMscixmLGcsYSl8fCExKT8odXx8dHlwZW9mIGwuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiImJnR5cGVvZiBsLmNvbXBvbmVudFdpbGxVcGRhdGUhPSJmdW5jdGlvbiJ8fCh0eXBlb2YgbC5jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLmNvbXBvbmVudFdpbGxVcGRhdGUocixnLGEpLHR5cGVvZiBsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlPT0iZnVuY3Rpb24iJiZsLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIsZyxhKSksdHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlPT0iZnVuY3Rpb24iJiYoZS5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGU9PSJmdW5jdGlvbiImJihlLmZsYWdzfD0xMDI0KSk6KHR5cGVvZiBsLmNvbXBvbmVudERpZFVwZGF0ZSE9ImZ1bmN0aW9uInx8cz09PXQubWVtb2l6ZWRQcm9wcyYmZj09PXQubWVtb2l6ZWRTdGF0ZXx8KGUuZmxhZ3N8PTQpLHR5cGVvZiBsLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09dC5tZW1vaXplZFByb3BzJiZmPT09dC5tZW1vaXplZFN0YXRlfHwoZS5mbGFnc3w9MTAyNCksZS5tZW1vaXplZFByb3BzPXIsZS5tZW1vaXplZFN0YXRlPWcpLGwucHJvcHM9cixsLnN0YXRlPWcsbC5jb250ZXh0PWEscj1jKToodHlwZW9mIGwuY29tcG9uZW50RGlkVXBkYXRlIT0iZnVuY3Rpb24ifHxzPT09dC5tZW1vaXplZFByb3BzJiZmPT09dC5tZW1vaXplZFN0YXRlfHwoZS5mbGFnc3w9NCksdHlwZW9mIGwuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUhPSJmdW5jdGlvbiJ8fHM9PT10Lm1lbW9pemVkUHJvcHMmJmY9PT10Lm1lbW9pemVkU3RhdGV8fChlLmZsYWdzfD0xMDI0KSxyPSExKX1yZXR1cm4gRmgodCxlLG4scixvLGkpfWZ1bmN0aW9uIEZoKHQsZSxuLHIsaSxvKXtDdyh0LGUpO3ZhciBsPShlLmZsYWdzJjEyOCkhPT0wO2lmKCFyJiYhbClyZXR1cm4gaSYmZTAoZSxuLCExKSxtaSh0LGUsbyk7cj1lLnN0YXRlTm9kZSxFVC5jdXJyZW50PWU7dmFyIHM9bCYmdHlwZW9mIG4uZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIT0iZnVuY3Rpb24iP251bGw6ci5yZW5kZXIoKTtyZXR1cm4gZS5mbGFnc3w9MSx0IT09bnVsbCYmbD8oZS5jaGlsZD1jcyhlLHQuY2hpbGQsbnVsbCxvKSxlLmNoaWxkPWNzKGUsbnVsbCxzLG8pKTpkbih0LGUscyxvKSxlLm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxpJiZlMChlLG4sITApLGUuY2hpbGR9ZnVuY3Rpb24gYncodCl7dmFyIGU9dC5zdGF0ZU5vZGU7ZS5wZW5kaW5nQ29udGV4dD9xeSh0LGUucGVuZGluZ0NvbnRleHQsZS5wZW5kaW5nQ29udGV4dCE9PWUuY29udGV4dCk6ZS5jb250ZXh0JiZxeSh0LGUuY29udGV4dCwhMSksRGcodCxlLmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIGcwKHQsZSxuLHIsaSl7cmV0dXJuIGFzKCksUmcoaSksZS5mbGFnc3w9MjU2LGRuKHQsZSxuLHIpLGUuY2hpbGR9dmFyIEJoPXtkZWh5ZHJhdGVkOm51bGwsdHJlZUNvbnRleHQ6bnVsbCxyZXRyeUxhbmU6MH07ZnVuY3Rpb24gVWgodCl7cmV0dXJue2Jhc2VMYW5lczp0LGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOm51bGx9fWZ1bmN0aW9uIGt3KHQsZSxuKXt2YXIgcj1lLnBlbmRpbmdQcm9wcyxpPWR0LmN1cnJlbnQsbz0hMSxsPShlLmZsYWdzJjEyOCkhPT0wLHM7aWYoKHM9bCl8fChzPXQhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGU9PT1udWxsPyExOihpJjIpIT09MCkscz8obz0hMCxlLmZsYWdzJj0tMTI5KToodD09PW51bGx8fHQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiYoaXw9MSksWGUoZHQsaSYxKSx0PT09bnVsbClyZXR1cm4gTWgoZSksdD1lLm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJih0PXQuZGVoeWRyYXRlZCx0IT09bnVsbCk/KGUubW9kZSYxP3QuZGF0YT09PSIkISI/ZS5sYW5lcz04OmUubGFuZXM9MTA3Mzc0MTgyNDplLmxhbmVzPTEsbnVsbCk6KGw9ci5jaGlsZHJlbix0PXIuZmFsbGJhY2ssbz8ocj1lLm1vZGUsbz1lLmNoaWxkLGw9e21vZGU6ImhpZGRlbiIsY2hpbGRyZW46bH0sIShyJjEpJiZvIT09bnVsbD8oby5jaGlsZExhbmVzPTAsby5wZW5kaW5nUHJvcHM9bCk6bz1fZihsLHIsMCxudWxsKSx0PXpvKHQscixuLG51bGwpLG8ucmV0dXJuPWUsdC5yZXR1cm49ZSxvLnNpYmxpbmc9dCxlLmNoaWxkPW8sZS5jaGlsZC5tZW1vaXplZFN0YXRlPVVoKG4pLGUubWVtb2l6ZWRTdGF0ZT1CaCx0KTpIZyhlLGwpKTtpZihpPXQubWVtb2l6ZWRTdGF0ZSxpIT09bnVsbCYmKHM9aS5kZWh5ZHJhdGVkLHMhPT1udWxsKSlyZXR1cm4gQ1QodCxlLGwscixzLGksbik7aWYobyl7bz1yLmZhbGxiYWNrLGw9ZS5tb2RlLGk9dC5jaGlsZCxzPWkuc2libGluZzt2YXIgYT17bW9kZToiaGlkZGVuIixjaGlsZHJlbjpyLmNoaWxkcmVufTtyZXR1cm4hKGwmMSkmJmUuY2hpbGQhPT1pPyhyPWUuY2hpbGQsci5jaGlsZExhbmVzPTAsci5wZW5kaW5nUHJvcHM9YSxlLmRlbGV0aW9ucz1udWxsKToocj10byhpLGEpLHIuc3VidHJlZUZsYWdzPWkuc3VidHJlZUZsYWdzJjE0NjgwMDY0KSxzIT09bnVsbD9vPXRvKHMsbyk6KG89em8obyxsLG4sbnVsbCksby5mbGFnc3w9Miksby5yZXR1cm49ZSxyLnJldHVybj1lLHIuc2libGluZz1vLGUuY2hpbGQ9cixyPW8sbz1lLmNoaWxkLGw9dC5jaGlsZC5tZW1vaXplZFN0YXRlLGw9bD09PW51bGw/VWgobik6e2Jhc2VMYW5lczpsLmJhc2VMYW5lc3xuLGNhY2hlUG9vbDpudWxsLHRyYW5zaXRpb25zOmwudHJhbnNpdGlvbnN9LG8ubWVtb2l6ZWRTdGF0ZT1sLG8uY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMmfm4sZS5tZW1vaXplZFN0YXRlPUJoLHJ9cmV0dXJuIG89dC5jaGlsZCx0PW8uc2libGluZyxyPXRvKG8se21vZGU6InZpc2libGUiLGNoaWxkcmVuOnIuY2hpbGRyZW59KSwhKGUubW9kZSYxKSYmKHIubGFuZXM9biksci5yZXR1cm49ZSxyLnNpYmxpbmc9bnVsbCx0IT09bnVsbCYmKG49ZS5kZWxldGlvbnMsbj09PW51bGw/KGUuZGVsZXRpb25zPVt0XSxlLmZsYWdzfD0xNik6bi5wdXNoKHQpKSxlLmNoaWxkPXIsZS5tZW1vaXplZFN0YXRlPW51bGwscn1mdW5jdGlvbiBIZyh0LGUpe3JldHVybiBlPV9mKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjplfSx0Lm1vZGUsMCxudWxsKSxlLnJldHVybj10LHQuY2hpbGQ9ZX1mdW5jdGlvbiB1dSh0LGUsbixyKXtyZXR1cm4gciE9PW51bGwmJlJnKHIpLGNzKGUsdC5jaGlsZCxudWxsLG4pLHQ9SGcoZSxlLnBlbmRpbmdQcm9wcy5jaGlsZHJlbiksdC5mbGFnc3w9MixlLm1lbW9pemVkU3RhdGU9bnVsbCx0fWZ1bmN0aW9uIENUKHQsZSxuLHIsaSxvLGwpe2lmKG4pcmV0dXJuIGUuZmxhZ3MmMjU2PyhlLmZsYWdzJj0tMjU3LHI9QXAoRXJyb3IoVyg0MjIpKSksdXUodCxlLGwscikpOmUubWVtb2l6ZWRTdGF0ZSE9PW51bGw/KGUuY2hpbGQ9dC5jaGlsZCxlLmZsYWdzfD0xMjgsbnVsbCk6KG89ci5mYWxsYmFjayxpPWUubW9kZSxyPV9mKHttb2RlOiJ2aXNpYmxlIixjaGlsZHJlbjpyLmNoaWxkcmVufSxpLDAsbnVsbCksbz16byhvLGksbCxudWxsKSxvLmZsYWdzfD0yLHIucmV0dXJuPWUsby5yZXR1cm49ZSxyLnNpYmxpbmc9byxlLmNoaWxkPXIsZS5tb2RlJjEmJmNzKGUsdC5jaGlsZCxudWxsLGwpLGUuY2hpbGQubWVtb2l6ZWRTdGF0ZT1VaChsKSxlLm1lbW9pemVkU3RhdGU9Qmgsbyk7aWYoIShlLm1vZGUmMSkpcmV0dXJuIHV1KHQsZSxsLG51bGwpO2lmKGkuZGF0YT09PSIkISIpe2lmKHI9aS5uZXh0U2libGluZyYmaS5uZXh0U2libGluZy5kYXRhc2V0LHIpdmFyIHM9ci5kZ3N0O3JldHVybiByPXMsbz1FcnJvcihXKDQxOSkpLHI9QXAobyxyLHZvaWQgMCksdXUodCxlLGwscil9aWYocz0obCZ0LmNoaWxkTGFuZXMpIT09MCxUbnx8cyl7aWYocj1CdCxyIT09bnVsbCl7c3dpdGNoKGwmLWwpe2Nhc2UgNDppPTI7YnJlYWs7Y2FzZSAxNjppPTg7YnJlYWs7Y2FzZSA2NDpjYXNlIDEyODpjYXNlIDI1NjpjYXNlIDUxMjpjYXNlIDEwMjQ6Y2FzZSAyMDQ4OmNhc2UgNDA5NjpjYXNlIDgxOTI6Y2FzZSAxNjM4NDpjYXNlIDMyNzY4OmNhc2UgNjU1MzY6Y2FzZSAxMzEwNzI6Y2FzZSAyNjIxNDQ6Y2FzZSA1MjQyODg6Y2FzZSAxMDQ4NTc2OmNhc2UgMjA5NzE1MjpjYXNlIDQxOTQzMDQ6Y2FzZSA4Mzg4NjA4OmNhc2UgMTY3NzcyMTY6Y2FzZSAzMzU1NDQzMjpjYXNlIDY3MTA4ODY0Omk9MzI7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6aT0yNjg0MzU0NTY7YnJlYWs7ZGVmYXVsdDppPTB9aT1pJihyLnN1c3BlbmRlZExhbmVzfGwpPzA6aSxpIT09MCYmaSE9PW8ucmV0cnlMYW5lJiYoby5yZXRyeUxhbmU9aSxoaSh0LGkpLEVyKHIsdCxpLC0xKSl9cmV0dXJuIFhnKCkscj1BcChFcnJvcihXKDQyMSkpKSx1dSh0LGUsbCxyKX1yZXR1cm4gaS5kYXRhPT09IiQ/Ij8oZS5mbGFnc3w9MTI4LGUuY2hpbGQ9dC5jaGlsZCxlPUlULmJpbmQobnVsbCx0KSxpLl9yZWFjdFJldHJ5PWUsbnVsbCk6KHQ9by50cmVlQ29udGV4dCxqbj1KaShpLm5leHRTaWJsaW5nKSx6bj1lLG90PSEwLHhyPW51bGwsdCE9PW51bGwmJihRbltxbisrXT1haSxRbltxbisrXT1jaSxRbltxbisrXT1abyxhaT10LmlkLGNpPXQub3ZlcmZsb3csWm89ZSksZT1IZyhlLHIuY2hpbGRyZW4pLGUuZmxhZ3N8PTQwOTYsZSl9ZnVuY3Rpb24gdjAodCxlLG4pe3QubGFuZXN8PWU7dmFyIHI9dC5hbHRlcm5hdGU7ciE9PW51bGwmJihyLmxhbmVzfD1lKSxMaCh0LnJldHVybixlLG4pfWZ1bmN0aW9uIE1wKHQsZSxuLHIsaSl7dmFyIG89dC5tZW1vaXplZFN0YXRlO289PT1udWxsP3QubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6ZSxyZW5kZXJpbmc6bnVsbCxyZW5kZXJpbmdTdGFydFRpbWU6MCxsYXN0OnIsdGFpbDpuLHRhaWxNb2RlOml9OihvLmlzQmFja3dhcmRzPWUsby5yZW5kZXJpbmc9bnVsbCxvLnJlbmRlcmluZ1N0YXJ0VGltZT0wLG8ubGFzdD1yLG8udGFpbD1uLG8udGFpbE1vZGU9aSl9ZnVuY3Rpb24gJHcodCxlLG4pe3ZhciByPWUucGVuZGluZ1Byb3BzLGk9ci5yZXZlYWxPcmRlcixvPXIudGFpbDtpZihkbih0LGUsci5jaGlsZHJlbixuKSxyPWR0LmN1cnJlbnQsciYyKXI9ciYxfDIsZS5mbGFnc3w9MTI4O2Vsc2V7aWYodCE9PW51bGwmJnQuZmxhZ3MmMTI4KWU6Zm9yKHQ9ZS5jaGlsZDt0IT09bnVsbDspe2lmKHQudGFnPT09MTMpdC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdjAodCxuLGUpO2Vsc2UgaWYodC50YWc9PT0xOSl2MCh0LG4sZSk7ZWxzZSBpZih0LmNoaWxkIT09bnVsbCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWsgZTtmb3IoO3Quc2libGluZz09PW51bGw7KXtpZih0LnJldHVybj09PW51bGx8fHQucmV0dXJuPT09ZSlicmVhayBlO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yJj0xfWlmKFhlKGR0LHIpLCEoZS5tb2RlJjEpKWUubWVtb2l6ZWRTdGF0ZT1udWxsO2Vsc2Ugc3dpdGNoKGkpe2Nhc2UiZm9yd2FyZHMiOmZvcihuPWUuY2hpbGQsaT1udWxsO24hPT1udWxsOyl0PW4uYWx0ZXJuYXRlLHQhPT1udWxsJiZwZCh0KT09PW51bGwmJihpPW4pLG49bi5zaWJsaW5nO249aSxuPT09bnVsbD8oaT1lLmNoaWxkLGUuY2hpbGQ9bnVsbCk6KGk9bi5zaWJsaW5nLG4uc2libGluZz1udWxsKSxNcChlLCExLGksbixvKTticmVhaztjYXNlImJhY2t3YXJkcyI6Zm9yKG49bnVsbCxpPWUuY2hpbGQsZS5jaGlsZD1udWxsO2khPT1udWxsOyl7aWYodD1pLmFsdGVybmF0ZSx0IT09bnVsbCYmcGQodCk9PT1udWxsKXtlLmNoaWxkPWk7YnJlYWt9dD1pLnNpYmxpbmcsaS5zaWJsaW5nPW4sbj1pLGk9dH1NcChlLCEwLG4sbnVsbCxvKTticmVhaztjYXNlInRvZ2V0aGVyIjpNcChlLCExLG51bGwsbnVsbCx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6ZS5tZW1vaXplZFN0YXRlPW51bGx9cmV0dXJuIGUuY2hpbGR9ZnVuY3Rpb24ganUodCxlKXshKGUubW9kZSYxKSYmdCE9PW51bGwmJih0LmFsdGVybmF0ZT1udWxsLGUuYWx0ZXJuYXRlPW51bGwsZS5mbGFnc3w9Mil9ZnVuY3Rpb24gbWkodCxlLG4pe2lmKHQhPT1udWxsJiYoZS5kZXBlbmRlbmNpZXM9dC5kZXBlbmRlbmNpZXMpLFlvfD1lLmxhbmVzLCEobiZlLmNoaWxkTGFuZXMpKXJldHVybiBudWxsO2lmKHQhPT1udWxsJiZlLmNoaWxkIT09dC5jaGlsZCl0aHJvdyBFcnJvcihXKDE1MykpO2lmKGUuY2hpbGQhPT1udWxsKXtmb3IodD1lLmNoaWxkLG49dG8odCx0LnBlbmRpbmdQcm9wcyksZS5jaGlsZD1uLG4ucmV0dXJuPWU7dC5zaWJsaW5nIT09bnVsbDspdD10LnNpYmxpbmcsbj1uLnNpYmxpbmc9dG8odCx0LnBlbmRpbmdQcm9wcyksbi5yZXR1cm49ZTtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gZS5jaGlsZH1mdW5jdGlvbiBiVCh0LGUsbil7c3dpdGNoKGUudGFnKXtjYXNlIDM6YncoZSksYXMoKTticmVhaztjYXNlIDU6ZXcoZSk7YnJlYWs7Y2FzZSAxOlJuKGUudHlwZSkmJnNkKGUpO2JyZWFrO2Nhc2UgNDpEZyhlLGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO2JyZWFrO2Nhc2UgMTA6dmFyIHI9ZS50eXBlLl9jb250ZXh0LGk9ZS5tZW1vaXplZFByb3BzLnZhbHVlO1hlKHVkLHIuX2N1cnJlbnRWYWx1ZSksci5fY3VycmVudFZhbHVlPWk7YnJlYWs7Y2FzZSAxMzppZihyPWUubWVtb2l6ZWRTdGF0ZSxyIT09bnVsbClyZXR1cm4gci5kZWh5ZHJhdGVkIT09bnVsbD8oWGUoZHQsZHQuY3VycmVudCYxKSxlLmZsYWdzfD0xMjgsbnVsbCk6biZlLmNoaWxkLmNoaWxkTGFuZXM/a3codCxlLG4pOihYZShkdCxkdC5jdXJyZW50JjEpLHQ9bWkodCxlLG4pLHQhPT1udWxsP3Quc2libGluZzpudWxsKTtYZShkdCxkdC5jdXJyZW50JjEpO2JyZWFrO2Nhc2UgMTk6aWYocj0obiZlLmNoaWxkTGFuZXMpIT09MCx0LmZsYWdzJjEyOCl7aWYocilyZXR1cm4gJHcodCxlLG4pO2UuZmxhZ3N8PTEyOH1pZihpPWUubWVtb2l6ZWRTdGF0ZSxpIT09bnVsbCYmKGkucmVuZGVyaW5nPW51bGwsaS50YWlsPW51bGwsaS5sYXN0RWZmZWN0PW51bGwpLFhlKGR0LGR0LmN1cnJlbnQpLHIpYnJlYWs7cmV0dXJuIG51bGw7Y2FzZSAyMjpjYXNlIDIzOnJldHVybiBlLmxhbmVzPTAsRXcodCxlLG4pfXJldHVybiBtaSh0LGUsbil9dmFyIFR3LFdoLE53LFJ3O1R3PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPWUuY2hpbGQ7biE9PW51bGw7KXtpZihuLnRhZz09PTV8fG4udGFnPT09Nil0LmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKG4udGFnIT09NCYmbi5jaGlsZCE9PW51bGwpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT1lKWJyZWFrO2Zvcig7bi5zaWJsaW5nPT09bnVsbDspe2lmKG4ucmV0dXJuPT09bnVsbHx8bi5yZXR1cm49PT1lKXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fTtXaD1mdW5jdGlvbigpe307Tnc9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5tZW1vaXplZFByb3BzO2lmKGkhPT1yKXt0PWUuc3RhdGVOb2RlLExvKEJyLmN1cnJlbnQpO3ZhciBvPW51bGw7c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOmk9ZGgodCxpKSxyPWRoKHQsciksbz1bXTticmVhaztjYXNlInNlbGVjdCI6aT1tdCh7fSxpLHt2YWx1ZTp2b2lkIDB9KSxyPW10KHt9LHIse3ZhbHVlOnZvaWQgMH0pLG89W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6aT1oaCh0LGkpLHI9aGgodCxyKSxvPVtdO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIGkub25DbGljayE9ImZ1bmN0aW9uIiYmdHlwZW9mIHIub25DbGljaz09ImZ1bmN0aW9uIiYmKHQub25jbGljaz1vZCl9Z2gobixyKTt2YXIgbDtuPW51bGw7Zm9yKGMgaW4gaSlpZighci5oYXNPd25Qcm9wZXJ0eShjKSYmaS5oYXNPd25Qcm9wZXJ0eShjKSYmaVtjXSE9bnVsbClpZihjPT09InN0eWxlIil7dmFyIHM9aVtjXTtmb3IobCBpbiBzKXMuaGFzT3duUHJvcGVydHkobCkmJihufHwobj17fSksbltsXT0iIil9ZWxzZSBjIT09ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiYmYyE9PSJjaGlsZHJlbiImJmMhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYyE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiZjIT09ImF1dG9Gb2N1cyImJihGYS5oYXNPd25Qcm9wZXJ0eShjKT9vfHwobz1bXSk6KG89b3x8W10pLnB1c2goYyxudWxsKSk7Zm9yKGMgaW4gcil7dmFyIGE9cltjXTtpZihzPWkhPW51bGw/aVtjXTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eShjKSYmYSE9PXMmJihhIT1udWxsfHxzIT1udWxsKSlpZihjPT09InN0eWxlIilpZihzKXtmb3IobCBpbiBzKSFzLmhhc093blByb3BlcnR5KGwpfHxhJiZhLmhhc093blByb3BlcnR5KGwpfHwobnx8KG49e30pLG5bbF09IiIpO2ZvcihsIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShsKSYmc1tsXSE9PWFbbF0mJihufHwobj17fSksbltsXT1hW2xdKX1lbHNlIG58fChvfHwobz1bXSksby5wdXNoKGMsbikpLG49YTtlbHNlIGM9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPyhhPWE/YS5fX2h0bWw6dm9pZCAwLHM9cz9zLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmcyE9PWEmJihvPW98fFtdKS5wdXNoKGMsYSkpOmM9PT0iY2hpbGRyZW4iP3R5cGVvZiBhIT0ic3RyaW5nIiYmdHlwZW9mIGEhPSJudW1iZXIifHwobz1vfHxbXSkucHVzaChjLCIiK2EpOmMhPT0ic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiYmYyE9PSJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciJiYoRmEuaGFzT3duUHJvcGVydHkoYyk/KGEhPW51bGwmJmM9PT0ib25TY3JvbGwiJiZldCgic2Nyb2xsIix0KSxvfHxzPT09YXx8KG89W10pKToobz1vfHxbXSkucHVzaChjLGEpKX1uJiYobz1vfHxbXSkucHVzaCgic3R5bGUiLG4pO3ZhciBjPW87KGUudXBkYXRlUXVldWU9YykmJihlLmZsYWdzfD00KX19O1J3PWZ1bmN0aW9uKHQsZSxuLHIpe24hPT1yJiYoZS5mbGFnc3w9NCl9O2Z1bmN0aW9uIEpzKHQsZSl7aWYoIW90KXN3aXRjaCh0LnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6ZT10LnRhaWw7Zm9yKHZhciBuPW51bGw7ZSE9PW51bGw7KWUuYWx0ZXJuYXRlIT09bnVsbCYmKG49ZSksZT1lLnNpYmxpbmc7bj09PW51bGw/dC50YWlsPW51bGw6bi5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOm49dC50YWlsO2Zvcih2YXIgcj1udWxsO24hPT1udWxsOyluLmFsdGVybmF0ZSE9PW51bGwmJihyPW4pLG49bi5zaWJsaW5nO3I9PT1udWxsP2V8fHQudGFpbD09PW51bGw/dC50YWlsPW51bGw6dC50YWlsLnNpYmxpbmc9bnVsbDpyLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gWHQodCl7dmFyIGU9dC5hbHRlcm5hdGUhPT1udWxsJiZ0LmFsdGVybmF0ZS5jaGlsZD09PXQuY2hpbGQsbj0wLHI9MDtpZihlKWZvcih2YXIgaT10LmNoaWxkO2khPT1udWxsOylufD1pLmxhbmVzfGkuY2hpbGRMYW5lcyxyfD1pLnN1YnRyZWVGbGFncyYxNDY4MDA2NCxyfD1pLmZsYWdzJjE0NjgwMDY0LGkucmV0dXJuPXQsaT1pLnNpYmxpbmc7ZWxzZSBmb3IoaT10LmNoaWxkO2khPT1udWxsOylufD1pLmxhbmVzfGkuY2hpbGRMYW5lcyxyfD1pLnN1YnRyZWVGbGFncyxyfD1pLmZsYWdzLGkucmV0dXJuPXQsaT1pLnNpYmxpbmc7cmV0dXJuIHQuc3VidHJlZUZsYWdzfD1yLHQuY2hpbGRMYW5lcz1uLGV9ZnVuY3Rpb24ga1QodCxlLG4pe3ZhciByPWUucGVuZGluZ1Byb3BzO3N3aXRjaChOZyhlKSxlLnRhZyl7Y2FzZSAyOmNhc2UgMTY6Y2FzZSAxNTpjYXNlIDA6Y2FzZSAxMTpjYXNlIDc6Y2FzZSA4OmNhc2UgMTI6Y2FzZSA5OmNhc2UgMTQ6cmV0dXJuIFh0KGUpLG51bGw7Y2FzZSAxOnJldHVybiBSbihlLnR5cGUpJiZsZCgpLFh0KGUpLG51bGw7Y2FzZSAzOnJldHVybiByPWUuc3RhdGVOb2RlLHVzKCksaXQoTm4pLGl0KG9uKSxqZygpLHIucGVuZGluZ0NvbnRleHQmJihyLmNvbnRleHQ9ci5wZW5kaW5nQ29udGV4dCxyLnBlbmRpbmdDb250ZXh0PW51bGwpLCh0PT09bnVsbHx8dC5jaGlsZD09PW51bGwpJiYoYXUoZSk/ZS5mbGFnc3w9NDp0PT09bnVsbHx8dC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmIShlLmZsYWdzJjI1Nil8fChlLmZsYWdzfD0xMDI0LHhyIT09bnVsbCYmKEpoKHhyKSx4cj1udWxsKSkpLFdoKHQsZSksWHQoZSksbnVsbDtjYXNlIDU6SWcoZSk7dmFyIGk9TG8oUWEuY3VycmVudCk7aWYobj1lLnR5cGUsdCE9PW51bGwmJmUuc3RhdGVOb2RlIT1udWxsKU53KHQsZSxuLHIsaSksdC5yZWYhPT1lLnJlZiYmKGUuZmxhZ3N8PTUxMixlLmZsYWdzfD0yMDk3MTUyKTtlbHNle2lmKCFyKXtpZihlLnN0YXRlTm9kZT09PW51bGwpdGhyb3cgRXJyb3IoVygxNjYpKTtyZXR1cm4gWHQoZSksbnVsbH1pZih0PUxvKEJyLmN1cnJlbnQpLGF1KGUpKXtyPWUuc3RhdGVOb2RlLG49ZS50eXBlO3ZhciBvPWUubWVtb2l6ZWRQcm9wcztzd2l0Y2gocltMcl09ZSxyW1hhXT1vLHQ9KGUubW9kZSYxKSE9PTAsbil7Y2FzZSJkaWFsb2ciOmV0KCJjYW5jZWwiLHIpLGV0KCJjbG9zZSIscik7YnJlYWs7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjpldCgibG9hZCIscik7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGk9MDtpPHBhLmxlbmd0aDtpKyspZXQocGFbaV0scik7YnJlYWs7Y2FzZSJzb3VyY2UiOmV0KCJlcnJvciIscik7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6ZXQoImVycm9yIixyKSxldCgibG9hZCIscik7YnJlYWs7Y2FzZSJkZXRhaWxzIjpldCgidG9nZ2xlIixyKTticmVhaztjYXNlImlucHV0IjpreShyLG8pLGV0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInNlbGVjdCI6ci5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIW8ubXVsdGlwbGV9LGV0KCJpbnZhbGlkIixyKTticmVhaztjYXNlInRleHRhcmVhIjpUeShyLG8pLGV0KCJpbnZhbGlkIixyKX1naChuLG8pLGk9bnVsbDtmb3IodmFyIGwgaW4gbylpZihvLmhhc093blByb3BlcnR5KGwpKXt2YXIgcz1vW2xdO2w9PT0iY2hpbGRyZW4iP3R5cGVvZiBzPT0ic3RyaW5nIj9yLnRleHRDb250ZW50IT09cyYmKG8uc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIT09ITAmJnN1KHIudGV4dENvbnRlbnQscyx0KSxpPVsiY2hpbGRyZW4iLHNdKTp0eXBlb2Ygcz09Im51bWJlciImJnIudGV4dENvbnRlbnQhPT0iIitzJiYoby5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmc3Uoci50ZXh0Q29udGVudCxzLHQpLGk9WyJjaGlsZHJlbiIsIiIrc10pOkZhLmhhc093blByb3BlcnR5KGwpJiZzIT1udWxsJiZsPT09Im9uU2Nyb2xsIiYmZXQoInNjcm9sbCIscil9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnFjKHIpLCR5KHIsbywhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cWMociksTnkocik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OnR5cGVvZiBvLm9uQ2xpY2s9PSJmdW5jdGlvbiImJihyLm9uY2xpY2s9b2QpfXI9aSxlLnVwZGF0ZVF1ZXVlPXIsciE9PW51bGwmJihlLmZsYWdzfD00KX1lbHNle2w9aS5ub2RlVHlwZT09PTk/aTppLm93bmVyRG9jdW1lbnQsdD09PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiYmKHQ9cl8obikpLHQ9PT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI/bj09PSJzY3JpcHQiPyh0PWwuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5pbm5lckhUTUw9IjxzY3JpcHQ+PFwvc2NyaXB0PiIsdD10LnJlbW92ZUNoaWxkKHQuZmlyc3RDaGlsZCkpOnR5cGVvZiByLmlzPT0ic3RyaW5nIj90PWwuY3JlYXRlRWxlbWVudChuLHtpczpyLmlzfSk6KHQ9bC5jcmVhdGVFbGVtZW50KG4pLG49PT0ic2VsZWN0IiYmKGw9dCxyLm11bHRpcGxlP2wubXVsdGlwbGU9ITA6ci5zaXplJiYobC5zaXplPXIuc2l6ZSkpKTp0PWwuY3JlYXRlRWxlbWVudE5TKHQsbiksdFtMcl09ZSx0W1hhXT1yLFR3KHQsZSwhMSwhMSksZS5zdGF0ZU5vZGU9dDtlOntzd2l0Y2gobD12aChuLHIpLG4pe2Nhc2UiZGlhbG9nIjpldCgiY2FuY2VsIix0KSxldCgiY2xvc2UiLHQpLGk9cjticmVhaztjYXNlImlmcmFtZSI6Y2FzZSJvYmplY3QiOmNhc2UiZW1iZWQiOmV0KCJsb2FkIix0KSxpPXI7YnJlYWs7Y2FzZSJ2aWRlbyI6Y2FzZSJhdWRpbyI6Zm9yKGk9MDtpPHBhLmxlbmd0aDtpKyspZXQocGFbaV0sdCk7aT1yO2JyZWFrO2Nhc2Uic291cmNlIjpldCgiZXJyb3IiLHQpLGk9cjticmVhaztjYXNlImltZyI6Y2FzZSJpbWFnZSI6Y2FzZSJsaW5rIjpldCgiZXJyb3IiLHQpLGV0KCJsb2FkIix0KSxpPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjpldCgidG9nZ2xlIix0KSxpPXI7YnJlYWs7Y2FzZSJpbnB1dCI6a3kodCxyKSxpPWRoKHQsciksZXQoImludmFsaWQiLHQpO2JyZWFrO2Nhc2Uib3B0aW9uIjppPXI7YnJlYWs7Y2FzZSJzZWxlY3QiOnQuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFyLm11bHRpcGxlfSxpPW10KHt9LHIse3ZhbHVlOnZvaWQgMH0pLGV0KCJpbnZhbGlkIix0KTticmVhaztjYXNlInRleHRhcmVhIjpUeSh0LHIpLGk9aGgodCxyKSxldCgiaW52YWxpZCIsdCk7YnJlYWs7ZGVmYXVsdDppPXJ9Z2gobixpKSxzPWk7Zm9yKG8gaW4gcylpZihzLmhhc093blByb3BlcnR5KG8pKXt2YXIgYT1zW29dO289PT0ic3R5bGUiP2xfKHQsYSk6bz09PSJkYW5nZXJvdXNseVNldElubmVySFRNTCI/KGE9YT9hLl9faHRtbDp2b2lkIDAsYSE9bnVsbCYmaV8odCxhKSk6bz09PSJjaGlsZHJlbiI/dHlwZW9mIGE9PSJzdHJpbmciPyhuIT09InRleHRhcmVhInx8YSE9PSIiKSYmQmEodCxhKTp0eXBlb2YgYT09Im51bWJlciImJkJhKHQsIiIrYSk6byE9PSJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciJiZvIT09InN1cHByZXNzSHlkcmF0aW9uV2FybmluZyImJm8hPT0iYXV0b0ZvY3VzIiYmKEZhLmhhc093blByb3BlcnR5KG8pP2EhPW51bGwmJm89PT0ib25TY3JvbGwiJiZldCgic2Nyb2xsIix0KTphIT1udWxsJiZoZyh0LG8sYSxsKSl9c3dpdGNoKG4pe2Nhc2UiaW5wdXQiOnFjKHQpLCR5KHQsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cWModCksTnkodCk7YnJlYWs7Y2FzZSJvcHRpb24iOnIudmFsdWUhPW51bGwmJnQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIrb28oci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0Lm11bHRpcGxlPSEhci5tdWx0aXBsZSxvPXIudmFsdWUsbyE9bnVsbD9HbCh0LCEhci5tdWx0aXBsZSxvLCExKTpyLmRlZmF1bHRWYWx1ZSE9bnVsbCYmR2wodCwhIXIubXVsdGlwbGUsci5kZWZhdWx0VmFsdWUsITApO2JyZWFrO2RlZmF1bHQ6dHlwZW9mIGkub25DbGljaz09ImZ1bmN0aW9uIiYmKHQub25jbGljaz1vZCl9c3dpdGNoKG4pe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6cj0hIXIuYXV0b0ZvY3VzO2JyZWFrIGU7Y2FzZSJpbWciOnI9ITA7YnJlYWsgZTtkZWZhdWx0OnI9ITF9fXImJihlLmZsYWdzfD00KX1lLnJlZiE9PW51bGwmJihlLmZsYWdzfD01MTIsZS5mbGFnc3w9MjA5NzE1Mil9cmV0dXJuIFh0KGUpLG51bGw7Y2FzZSA2OmlmKHQmJmUuc3RhdGVOb2RlIT1udWxsKVJ3KHQsZSx0Lm1lbW9pemVkUHJvcHMscik7ZWxzZXtpZih0eXBlb2YgciE9InN0cmluZyImJmUuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihXKDE2NikpO2lmKG49TG8oUWEuY3VycmVudCksTG8oQnIuY3VycmVudCksYXUoZSkpe2lmKHI9ZS5zdGF0ZU5vZGUsbj1lLm1lbW9pemVkUHJvcHMscltMcl09ZSwobz1yLm5vZGVWYWx1ZSE9PW4pJiYodD16bix0IT09bnVsbCkpc3dpdGNoKHQudGFnKXtjYXNlIDM6c3Uoci5ub2RlVmFsdWUsbiwodC5tb2RlJjEpIT09MCk7YnJlYWs7Y2FzZSA1OnQubWVtb2l6ZWRQcm9wcy5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmchPT0hMCYmc3Uoci5ub2RlVmFsdWUsbiwodC5tb2RlJjEpIT09MCl9byYmKGUuZmxhZ3N8PTQpfWVsc2Ugcj0obi5ub2RlVHlwZT09PTk/bjpuLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHIpLHJbTHJdPWUsZS5zdGF0ZU5vZGU9cn1yZXR1cm4gWHQoZSksbnVsbDtjYXNlIDEzOmlmKGl0KGR0KSxyPWUubWVtb2l6ZWRTdGF0ZSx0PT09bnVsbHx8dC5tZW1vaXplZFN0YXRlIT09bnVsbCYmdC5tZW1vaXplZFN0YXRlLmRlaHlkcmF0ZWQhPT1udWxsKXtpZihvdCYmam4hPT1udWxsJiZlLm1vZGUmMSYmIShlLmZsYWdzJjEyOCkpWl8oKSxhcygpLGUuZmxhZ3N8PTk4NTYwLG89ITE7ZWxzZSBpZihvPWF1KGUpLHIhPT1udWxsJiZyLmRlaHlkcmF0ZWQhPT1udWxsKXtpZih0PT09bnVsbCl7aWYoIW8pdGhyb3cgRXJyb3IoVygzMTgpKTtpZihvPWUubWVtb2l6ZWRTdGF0ZSxvPW8hPT1udWxsP28uZGVoeWRyYXRlZDpudWxsLCFvKXRocm93IEVycm9yKFcoMzE3KSk7b1tMcl09ZX1lbHNlIGFzKCksIShlLmZsYWdzJjEyOCkmJihlLm1lbW9pemVkU3RhdGU9bnVsbCksZS5mbGFnc3w9NDtYdChlKSxvPSExfWVsc2UgeHIhPT1udWxsJiYoSmgoeHIpLHhyPW51bGwpLG89ITA7aWYoIW8pcmV0dXJuIGUuZmxhZ3MmNjU1MzY/ZTpudWxsfXJldHVybiBlLmZsYWdzJjEyOD8oZS5sYW5lcz1uLGUpOihyPXIhPT1udWxsLHIhPT0odCE9PW51bGwmJnQubWVtb2l6ZWRTdGF0ZSE9PW51bGwpJiZyJiYoZS5jaGlsZC5mbGFnc3w9ODE5MixlLm1vZGUmMSYmKHQ9PT1udWxsfHxkdC5jdXJyZW50JjE/UHQ9PT0wJiYoUHQ9Myk6WGcoKSkpLGUudXBkYXRlUXVldWUhPT1udWxsJiYoZS5mbGFnc3w9NCksWHQoZSksbnVsbCk7Y2FzZSA0OnJldHVybiB1cygpLFdoKHQsZSksdD09PW51bGwmJkdhKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLFh0KGUpLG51bGw7Y2FzZSAxMDpyZXR1cm4gQWcoZS50eXBlLl9jb250ZXh0KSxYdChlKSxudWxsO2Nhc2UgMTc6cmV0dXJuIFJuKGUudHlwZSkmJmxkKCksWHQoZSksbnVsbDtjYXNlIDE5OmlmKGl0KGR0KSxvPWUubWVtb2l6ZWRTdGF0ZSxvPT09bnVsbClyZXR1cm4gWHQoZSksbnVsbDtpZihyPShlLmZsYWdzJjEyOCkhPT0wLGw9by5yZW5kZXJpbmcsbD09PW51bGwpaWYocilKcyhvLCExKTtlbHNle2lmKFB0IT09MHx8dCE9PW51bGwmJnQuZmxhZ3MmMTI4KWZvcih0PWUuY2hpbGQ7dCE9PW51bGw7KXtpZihsPXBkKHQpLGwhPT1udWxsKXtmb3IoZS5mbGFnc3w9MTI4LEpzKG8sITEpLHI9bC51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKGUudXBkYXRlUXVldWU9cixlLmZsYWdzfD00KSxlLnN1YnRyZWVGbGFncz0wLHI9bixuPWUuY2hpbGQ7biE9PW51bGw7KW89bix0PXIsby5mbGFncyY9MTQ2ODAwNjYsbD1vLmFsdGVybmF0ZSxsPT09bnVsbD8oby5jaGlsZExhbmVzPTAsby5sYW5lcz10LG8uY2hpbGQ9bnVsbCxvLnN1YnRyZWVGbGFncz0wLG8ubWVtb2l6ZWRQcm9wcz1udWxsLG8ubWVtb2l6ZWRTdGF0ZT1udWxsLG8udXBkYXRlUXVldWU9bnVsbCxvLmRlcGVuZGVuY2llcz1udWxsLG8uc3RhdGVOb2RlPW51bGwpOihvLmNoaWxkTGFuZXM9bC5jaGlsZExhbmVzLG8ubGFuZXM9bC5sYW5lcyxvLmNoaWxkPWwuY2hpbGQsby5zdWJ0cmVlRmxhZ3M9MCxvLmRlbGV0aW9ucz1udWxsLG8ubWVtb2l6ZWRQcm9wcz1sLm1lbW9pemVkUHJvcHMsby5tZW1vaXplZFN0YXRlPWwubWVtb2l6ZWRTdGF0ZSxvLnVwZGF0ZVF1ZXVlPWwudXBkYXRlUXVldWUsby50eXBlPWwudHlwZSx0PWwuZGVwZW5kZW5jaWVzLG8uZGVwZW5kZW5jaWVzPXQ9PT1udWxsP251bGw6e2xhbmVzOnQubGFuZXMsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0fSksbj1uLnNpYmxpbmc7cmV0dXJuIFhlKGR0LGR0LmN1cnJlbnQmMXwyKSxlLmNoaWxkfXQ9dC5zaWJsaW5nfW8udGFpbCE9PW51bGwmJkN0KCk+ZnMmJihlLmZsYWdzfD0xMjgscj0hMCxKcyhvLCExKSxlLmxhbmVzPTQxOTQzMDQpfWVsc2V7aWYoIXIpaWYodD1wZChsKSx0IT09bnVsbCl7aWYoZS5mbGFnc3w9MTI4LHI9ITAsbj10LnVwZGF0ZVF1ZXVlLG4hPT1udWxsJiYoZS51cGRhdGVRdWV1ZT1uLGUuZmxhZ3N8PTQpLEpzKG8sITApLG8udGFpbD09PW51bGwmJm8udGFpbE1vZGU9PT0iaGlkZGVuIiYmIWwuYWx0ZXJuYXRlJiYhb3QpcmV0dXJuIFh0KGUpLG51bGx9ZWxzZSAyKkN0KCktby5yZW5kZXJpbmdTdGFydFRpbWU+ZnMmJm4hPT0xMDczNzQxODI0JiYoZS5mbGFnc3w9MTI4LHI9ITAsSnMobywhMSksZS5sYW5lcz00MTk0MzA0KTtvLmlzQmFja3dhcmRzPyhsLnNpYmxpbmc9ZS5jaGlsZCxlLmNoaWxkPWwpOihuPW8ubGFzdCxuIT09bnVsbD9uLnNpYmxpbmc9bDplLmNoaWxkPWwsby5sYXN0PWwpfXJldHVybiBvLnRhaWwhPT1udWxsPyhlPW8udGFpbCxvLnJlbmRlcmluZz1lLG8udGFpbD1lLnNpYmxpbmcsby5yZW5kZXJpbmdTdGFydFRpbWU9Q3QoKSxlLnNpYmxpbmc9bnVsbCxuPWR0LmN1cnJlbnQsWGUoZHQscj9uJjF8MjpuJjEpLGUpOihYdChlKSxudWxsKTtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIFlnKCkscj1lLm1lbW9pemVkU3RhdGUhPT1udWxsLHQhPT1udWxsJiZ0Lm1lbW9pemVkU3RhdGUhPT1udWxsIT09ciYmKGUuZmxhZ3N8PTgxOTIpLHImJmUubW9kZSYxP0xuJjEwNzM3NDE4MjQmJihYdChlKSxlLnN1YnRyZWVGbGFncyY2JiYoZS5mbGFnc3w9ODE5MikpOlh0KGUpLG51bGw7Y2FzZSAyNDpyZXR1cm4gbnVsbDtjYXNlIDI1OnJldHVybiBudWxsfXRocm93IEVycm9yKFcoMTU2LGUudGFnKSl9ZnVuY3Rpb24gJFQodCxlKXtzd2l0Y2goTmcoZSksZS50YWcpe2Nhc2UgMTpyZXR1cm4gUm4oZS50eXBlKSYmbGQoKSx0PWUuZmxhZ3MsdCY2NTUzNj8oZS5mbGFncz10Ji02NTUzN3wxMjgsZSk6bnVsbDtjYXNlIDM6cmV0dXJuIHVzKCksaXQoTm4pLGl0KG9uKSxqZygpLHQ9ZS5mbGFncyx0JjY1NTM2JiYhKHQmMTI4KT8oZS5mbGFncz10Ji02NTUzN3wxMjgsZSk6bnVsbDtjYXNlIDU6cmV0dXJuIElnKGUpLG51bGw7Y2FzZSAxMzppZihpdChkdCksdD1lLm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJnQuZGVoeWRyYXRlZCE9PW51bGwpe2lmKGUuYWx0ZXJuYXRlPT09bnVsbCl0aHJvdyBFcnJvcihXKDM0MCkpO2FzKCl9cmV0dXJuIHQ9ZS5mbGFncyx0JjY1NTM2PyhlLmZsYWdzPXQmLTY1NTM3fDEyOCxlKTpudWxsO2Nhc2UgMTk6cmV0dXJuIGl0KGR0KSxudWxsO2Nhc2UgNDpyZXR1cm4gdXMoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIEFnKGUudHlwZS5fY29udGV4dCksbnVsbDtjYXNlIDIyOmNhc2UgMjM6cmV0dXJuIFlnKCksbnVsbDtjYXNlIDI0OnJldHVybiBudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXZhciBkdT0hMSxRdD0hMSxUVD10eXBlb2YgV2Vha1NldD09ImZ1bmN0aW9uIj9XZWFrU2V0OlNldCx0ZT1udWxsO2Z1bmN0aW9uIEJsKHQsZSl7dmFyIG49dC5yZWY7aWYobiE9PW51bGwpaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpdHJ5e24obnVsbCl9Y2F0Y2gocil7dnQodCxlLHIpfWVsc2Ugbi5jdXJyZW50PW51bGx9ZnVuY3Rpb24gSGgodCxlLG4pe3RyeXtuKCl9Y2F0Y2gocil7dnQodCxlLHIpfX12YXIgeTA9ITE7ZnVuY3Rpb24gTlQodCxlKXtpZigkaD1uZCx0PU1fKCksJGcodCkpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiB0KXZhciBuPXtzdGFydDp0LnNlbGVjdGlvblN0YXJ0LGVuZDp0LnNlbGVjdGlvbkVuZH07ZWxzZSBlOntuPShuPXQub3duZXJEb2N1bWVudCkmJm4uZGVmYXVsdFZpZXd8fHdpbmRvdzt2YXIgcj1uLmdldFNlbGVjdGlvbiYmbi5nZXRTZWxlY3Rpb24oKTtpZihyJiZyLnJhbmdlQ291bnQhPT0wKXtuPXIuYW5jaG9yTm9kZTt2YXIgaT1yLmFuY2hvck9mZnNldCxvPXIuZm9jdXNOb2RlO3I9ci5mb2N1c09mZnNldDt0cnl7bi5ub2RlVHlwZSxvLm5vZGVUeXBlfWNhdGNoe249bnVsbDticmVhayBlfXZhciBsPTAscz0tMSxhPS0xLGM9MCx1PTAsZD10LGY9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBwO2QhPT1ufHxpIT09MCYmZC5ub2RlVHlwZSE9PTN8fChzPWwraSksZCE9PW98fHIhPT0wJiZkLm5vZGVUeXBlIT09M3x8KGE9bCtyKSxkLm5vZGVUeXBlPT09MyYmKGwrPWQubm9kZVZhbHVlLmxlbmd0aCksKHA9ZC5maXJzdENoaWxkKSE9PW51bGw7KWY9ZCxkPXA7Zm9yKDs7KXtpZihkPT09dClicmVhayB0O2lmKGY9PT1uJiYrK2M9PT1pJiYocz1sKSxmPT09byYmKyt1PT09ciYmKGE9bCksKHA9ZC5uZXh0U2libGluZykhPT1udWxsKWJyZWFrO2Q9ZixmPWQucGFyZW50Tm9kZX1kPXB9bj1zPT09LTF8fGE9PT0tMT9udWxsOntzdGFydDpzLGVuZDphfX1lbHNlIG49bnVsbH1uPW58fHtzdGFydDowLGVuZDowfX1lbHNlIG49bnVsbDtmb3IoVGg9e2ZvY3VzZWRFbGVtOnQsc2VsZWN0aW9uUmFuZ2U6bn0sbmQ9ITEsdGU9ZTt0ZSE9PW51bGw7KWlmKGU9dGUsdD1lLmNoaWxkLChlLnN1YnRyZWVGbGFncyYxMDI4KSE9PTAmJnQhPT1udWxsKXQucmV0dXJuPWUsdGU9dDtlbHNlIGZvcig7dGUhPT1udWxsOyl7ZT10ZTt0cnl7dmFyIGc9ZS5hbHRlcm5hdGU7aWYoZS5mbGFncyYxMDI0KXN3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpicmVhaztjYXNlIDE6aWYoZyE9PW51bGwpe3ZhciBtPWcubWVtb2l6ZWRQcm9wcyx3PWcubWVtb2l6ZWRTdGF0ZSx2PWUuc3RhdGVOb2RlLHg9di5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShlLmVsZW1lbnRUeXBlPT09ZS50eXBlP206Z3IoZS50eXBlLG0pLHcpO3YuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9eH1icmVhaztjYXNlIDM6dmFyIF89ZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztfLm5vZGVUeXBlPT09MT9fLnRleHRDb250ZW50PSIiOl8ubm9kZVR5cGU9PT05JiZfLmRvY3VtZW50RWxlbWVudCYmXy5yZW1vdmVDaGlsZChfLmRvY3VtZW50RWxlbWVudCk7YnJlYWs7Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFcoMTYzKSl9fWNhdGNoKFMpe3Z0KGUsZS5yZXR1cm4sUyl9aWYodD1lLnNpYmxpbmcsdCE9PW51bGwpe3QucmV0dXJuPWUucmV0dXJuLHRlPXQ7YnJlYWt9dGU9ZS5yZXR1cm59cmV0dXJuIGc9eTAseTA9ITEsZ31mdW5jdGlvbiBDYSh0LGUsbil7dmFyIHI9ZS51cGRhdGVRdWV1ZTtpZihyPXIhPT1udWxsP3IubGFzdEVmZmVjdDpudWxsLHIhPT1udWxsKXt2YXIgaT1yPXIubmV4dDtkb3tpZigoaS50YWcmdCk9PT10KXt2YXIgbz1pLmRlc3Ryb3k7aS5kZXN0cm95PXZvaWQgMCxvIT09dm9pZCAwJiZIaChlLG4sbyl9aT1pLm5leHR9d2hpbGUoaSE9PXIpfX1mdW5jdGlvbiB5Zih0LGUpe2lmKGU9ZS51cGRhdGVRdWV1ZSxlPWUhPT1udWxsP2UubGFzdEVmZmVjdDpudWxsLGUhPT1udWxsKXt2YXIgbj1lPWUubmV4dDtkb3tpZigobi50YWcmdCk9PT10KXt2YXIgcj1uLmNyZWF0ZTtuLmRlc3Ryb3k9cigpfW49bi5uZXh0fXdoaWxlKG4hPT1lKX19ZnVuY3Rpb24gVmgodCl7dmFyIGU9dC5yZWY7aWYoZSE9PW51bGwpe3ZhciBuPXQuc3RhdGVOb2RlO3N3aXRjaCh0LnRhZyl7Y2FzZSA1OnQ9bjticmVhaztkZWZhdWx0OnQ9bn10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHQpOmUuY3VycmVudD10fX1mdW5jdGlvbiBPdyh0KXt2YXIgZT10LmFsdGVybmF0ZTtlIT09bnVsbCYmKHQuYWx0ZXJuYXRlPW51bGwsT3coZSkpLHQuY2hpbGQ9bnVsbCx0LmRlbGV0aW9ucz1udWxsLHQuc2libGluZz1udWxsLHQudGFnPT09NSYmKGU9dC5zdGF0ZU5vZGUsZSE9PW51bGwmJihkZWxldGUgZVtMcl0sZGVsZXRlIGVbWGFdLGRlbGV0ZSBlW09oXSxkZWxldGUgZVtkVF0sZGVsZXRlIGVbZlRdKSksdC5zdGF0ZU5vZGU9bnVsbCx0LnJldHVybj1udWxsLHQuZGVwZW5kZW5jaWVzPW51bGwsdC5tZW1vaXplZFByb3BzPW51bGwsdC5tZW1vaXplZFN0YXRlPW51bGwsdC5wZW5kaW5nUHJvcHM9bnVsbCx0LnN0YXRlTm9kZT1udWxsLHQudXBkYXRlUXVldWU9bnVsbH1mdW5jdGlvbiBQdyh0KXtyZXR1cm4gdC50YWc9PT01fHx0LnRhZz09PTN8fHQudGFnPT09NH1mdW5jdGlvbiB4MCh0KXtlOmZvcig7Oyl7Zm9yKDt0LnNpYmxpbmc9PT1udWxsOyl7aWYodC5yZXR1cm49PT1udWxsfHxQdyh0LnJldHVybikpcmV0dXJuIG51bGw7dD10LnJldHVybn1mb3IodC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZzt0LnRhZyE9PTUmJnQudGFnIT09NiYmdC50YWchPT0xODspe2lmKHQuZmxhZ3MmMnx8dC5jaGlsZD09PW51bGx8fHQudGFnPT09NCljb250aW51ZSBlO3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkfWlmKCEodC5mbGFncyYyKSlyZXR1cm4gdC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIEtoKHQsZSxuKXt2YXIgcj10LnRhZztpZihyPT09NXx8cj09PTYpdD10LnN0YXRlTm9kZSxlP24ubm9kZVR5cGU9PT04P24ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxlKTpuLmluc2VydEJlZm9yZSh0LGUpOihuLm5vZGVUeXBlPT09OD8oZT1uLnBhcmVudE5vZGUsZS5pbnNlcnRCZWZvcmUodCxuKSk6KGU9bixlLmFwcGVuZENoaWxkKHQpKSxuPW4uX3JlYWN0Um9vdENvbnRhaW5lcixuIT1udWxsfHxlLm9uY2xpY2shPT1udWxsfHwoZS5vbmNsaWNrPW9kKSk7ZWxzZSBpZihyIT09NCYmKHQ9dC5jaGlsZCx0IT09bnVsbCkpZm9yKEtoKHQsZSxuKSx0PXQuc2libGluZzt0IT09bnVsbDspS2godCxlLG4pLHQ9dC5zaWJsaW5nfWZ1bmN0aW9uIFpoKHQsZSxuKXt2YXIgcj10LnRhZztpZihyPT09NXx8cj09PTYpdD10LnN0YXRlTm9kZSxlP24uaW5zZXJ0QmVmb3JlKHQsZSk6bi5hcHBlbmRDaGlsZCh0KTtlbHNlIGlmKHIhPT00JiYodD10LmNoaWxkLHQhPT1udWxsKSlmb3IoWmgodCxlLG4pLHQ9dC5zaWJsaW5nO3QhPT1udWxsOylaaCh0LGUsbiksdD10LnNpYmxpbmd9dmFyIFZ0PW51bGwsdnI9ITE7ZnVuY3Rpb24gUmkodCxlLG4pe2ZvcihuPW4uY2hpbGQ7biE9PW51bGw7KUF3KHQsZSxuKSxuPW4uc2libGluZ31mdW5jdGlvbiBBdyh0LGUsbil7aWYoRnImJnR5cGVvZiBGci5vbkNvbW1pdEZpYmVyVW5tb3VudD09ImZ1bmN0aW9uIil0cnl7RnIub25Db21taXRGaWJlclVubW91bnQodWYsbil9Y2F0Y2h7fXN3aXRjaChuLnRhZyl7Y2FzZSA1OlF0fHxCbChuLGUpO2Nhc2UgNjp2YXIgcj1WdCxpPXZyO1Z0PW51bGwsUmkodCxlLG4pLFZ0PXIsdnI9aSxWdCE9PW51bGwmJih2cj8odD1WdCxuPW4uc3RhdGVOb2RlLHQubm9kZVR5cGU9PT04P3QucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKTp0LnJlbW92ZUNoaWxkKG4pKTpWdC5yZW1vdmVDaGlsZChuLnN0YXRlTm9kZSkpO2JyZWFrO2Nhc2UgMTg6VnQhPT1udWxsJiYodnI/KHQ9VnQsbj1uLnN0YXRlTm9kZSx0Lm5vZGVUeXBlPT09OD8kcCh0LnBhcmVudE5vZGUsbik6dC5ub2RlVHlwZT09PTEmJiRwKHQsbiksVmEodCkpOiRwKFZ0LG4uc3RhdGVOb2RlKSk7YnJlYWs7Y2FzZSA0OnI9VnQsaT12cixWdD1uLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHZyPSEwLFJpKHQsZSxuKSxWdD1yLHZyPWk7YnJlYWs7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKCFRdCYmKHI9bi51cGRhdGVRdWV1ZSxyIT09bnVsbCYmKHI9ci5sYXN0RWZmZWN0LHIhPT1udWxsKSkpe2k9cj1yLm5leHQ7ZG97dmFyIG89aSxsPW8uZGVzdHJveTtvPW8udGFnLGwhPT12b2lkIDAmJihvJjJ8fG8mNCkmJkhoKG4sZSxsKSxpPWkubmV4dH13aGlsZShpIT09cil9UmkodCxlLG4pO2JyZWFrO2Nhc2UgMTppZighUXQmJihCbChuLGUpLHI9bi5zdGF0ZU5vZGUsdHlwZW9mIHIuY29tcG9uZW50V2lsbFVubW91bnQ9PSJmdW5jdGlvbiIpKXRyeXtyLnByb3BzPW4ubWVtb2l6ZWRQcm9wcyxyLnN0YXRlPW4ubWVtb2l6ZWRTdGF0ZSxyLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gocyl7dnQobixlLHMpfVJpKHQsZSxuKTticmVhaztjYXNlIDIxOlJpKHQsZSxuKTticmVhaztjYXNlIDIyOm4ubW9kZSYxPyhRdD0ocj1RdCl8fG4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsUmkodCxlLG4pLFF0PXIpOlJpKHQsZSxuKTticmVhaztkZWZhdWx0OlJpKHQsZSxuKX19ZnVuY3Rpb24gXzAodCl7dmFyIGU9dC51cGRhdGVRdWV1ZTtpZihlIT09bnVsbCl7dC51cGRhdGVRdWV1ZT1udWxsO3ZhciBuPXQuc3RhdGVOb2RlO249PT1udWxsJiYobj10LnN0YXRlTm9kZT1uZXcgVFQpLGUuZm9yRWFjaChmdW5jdGlvbihyKXt2YXIgaT1qVC5iaW5kKG51bGwsdCxyKTtuLmhhcyhyKXx8KG4uYWRkKHIpLHIudGhlbihpLGkpKX0pfX1mdW5jdGlvbiBmcih0LGUpe3ZhciBuPWUuZGVsZXRpb25zO2lmKG4hPT1udWxsKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgaT1uW3JdO3RyeXt2YXIgbz10LGw9ZSxzPWw7ZTpmb3IoO3MhPT1udWxsOyl7c3dpdGNoKHMudGFnKXtjYXNlIDU6VnQ9cy5zdGF0ZU5vZGUsdnI9ITE7YnJlYWsgZTtjYXNlIDM6VnQ9cy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyx2cj0hMDticmVhayBlO2Nhc2UgNDpWdD1zLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLHZyPSEwO2JyZWFrIGV9cz1zLnJldHVybn1pZihWdD09PW51bGwpdGhyb3cgRXJyb3IoVygxNjApKTtBdyhvLGwsaSksVnQ9bnVsbCx2cj0hMTt2YXIgYT1pLmFsdGVybmF0ZTthIT09bnVsbCYmKGEucmV0dXJuPW51bGwpLGkucmV0dXJuPW51bGx9Y2F0Y2goYyl7dnQoaSxlLGMpfX1pZihlLnN1YnRyZWVGbGFncyYxMjg1NClmb3IoZT1lLmNoaWxkO2UhPT1udWxsOylNdyhlLHQpLGU9ZS5zaWJsaW5nfWZ1bmN0aW9uIE13KHQsZSl7dmFyIG49dC5hbHRlcm5hdGUscj10LmZsYWdzO3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKGZyKGUsdCksUHIodCksciY0KXt0cnl7Q2EoMyx0LHQucmV0dXJuKSx5ZigzLHQpfWNhdGNoKG0pe3Z0KHQsdC5yZXR1cm4sbSl9dHJ5e0NhKDUsdCx0LnJldHVybil9Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19YnJlYWs7Y2FzZSAxOmZyKGUsdCksUHIodCksciY1MTImJm4hPT1udWxsJiZCbChuLG4ucmV0dXJuKTticmVhaztjYXNlIDU6aWYoZnIoZSx0KSxQcih0KSxyJjUxMiYmbiE9PW51bGwmJkJsKG4sbi5yZXR1cm4pLHQuZmxhZ3MmMzIpe3ZhciBpPXQuc3RhdGVOb2RlO3RyeXtCYShpLCIiKX1jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfX1pZihyJjQmJihpPXQuc3RhdGVOb2RlLGkhPW51bGwpKXt2YXIgbz10Lm1lbW9pemVkUHJvcHMsbD1uIT09bnVsbD9uLm1lbW9pemVkUHJvcHM6byxzPXQudHlwZSxhPXQudXBkYXRlUXVldWU7aWYodC51cGRhdGVRdWV1ZT1udWxsLGEhPT1udWxsKXRyeXtzPT09ImlucHV0IiYmby50eXBlPT09InJhZGlvIiYmby5uYW1lIT1udWxsJiZ0XyhpLG8pLHZoKHMsbCk7dmFyIGM9dmgocyxvKTtmb3IobD0wO2w8YS5sZW5ndGg7bCs9Mil7dmFyIHU9YVtsXSxkPWFbbCsxXTt1PT09InN0eWxlIj9sXyhpLGQpOnU9PT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP2lfKGksZCk6dT09PSJjaGlsZHJlbiI/QmEoaSxkKTpoZyhpLHUsZCxjKX1zd2l0Y2gocyl7Y2FzZSJpbnB1dCI6ZmgoaSxvKTticmVhaztjYXNlInRleHRhcmVhIjpuXyhpLG8pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp2YXIgZj1pLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7aS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlPSEhby5tdWx0aXBsZTt2YXIgcD1vLnZhbHVlO3AhPW51bGw/R2woaSwhIW8ubXVsdGlwbGUscCwhMSk6ZiE9PSEhby5tdWx0aXBsZSYmKG8uZGVmYXVsdFZhbHVlIT1udWxsP0dsKGksISFvLm11bHRpcGxlLG8uZGVmYXVsdFZhbHVlLCEwKTpHbChpLCEhby5tdWx0aXBsZSxvLm11bHRpcGxlP1tdOiIiLCExKSl9aVtYYV09b31jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfX1icmVhaztjYXNlIDY6aWYoZnIoZSx0KSxQcih0KSxyJjQpe2lmKHQuc3RhdGVOb2RlPT09bnVsbCl0aHJvdyBFcnJvcihXKDE2MikpO2k9dC5zdGF0ZU5vZGUsbz10Lm1lbW9pemVkUHJvcHM7dHJ5e2kubm9kZVZhbHVlPW99Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19YnJlYWs7Y2FzZSAzOmlmKGZyKGUsdCksUHIodCksciY0JiZuIT09bnVsbCYmbi5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl0cnl7VmEoZS5jb250YWluZXJJbmZvKX1jYXRjaChtKXt2dCh0LHQucmV0dXJuLG0pfWJyZWFrO2Nhc2UgNDpmcihlLHQpLFByKHQpO2JyZWFrO2Nhc2UgMTM6ZnIoZSx0KSxQcih0KSxpPXQuY2hpbGQsaS5mbGFncyY4MTkyJiYobz1pLm1lbW9pemVkU3RhdGUhPT1udWxsLGkuc3RhdGVOb2RlLmlzSGlkZGVuPW8sIW98fGkuYWx0ZXJuYXRlIT09bnVsbCYmaS5hbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fChaZz1DdCgpKSksciY0JiZfMCh0KTticmVhaztjYXNlIDIyOmlmKHU9biE9PW51bGwmJm4ubWVtb2l6ZWRTdGF0ZSE9PW51bGwsdC5tb2RlJjE/KFF0PShjPVF0KXx8dSxmcihlLHQpLFF0PWMpOmZyKGUsdCksUHIodCksciY4MTkyKXtpZihjPXQubWVtb2l6ZWRTdGF0ZSE9PW51bGwsKHQuc3RhdGVOb2RlLmlzSGlkZGVuPWMpJiYhdSYmdC5tb2RlJjEpZm9yKHRlPXQsdT10LmNoaWxkO3UhPT1udWxsOyl7Zm9yKGQ9dGU9dTt0ZSE9PW51bGw7KXtzd2l0Y2goZj10ZSxwPWYuY2hpbGQsZi50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpDYSg0LGYsZi5yZXR1cm4pO2JyZWFrO2Nhc2UgMTpCbChmLGYucmV0dXJuKTt2YXIgZz1mLnN0YXRlTm9kZTtpZih0eXBlb2YgZy5jb21wb25lbnRXaWxsVW5tb3VudD09ImZ1bmN0aW9uIil7cj1mLG49Zi5yZXR1cm47dHJ5e2U9cixnLnByb3BzPWUubWVtb2l6ZWRQcm9wcyxnLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxnLmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2gobSl7dnQocixuLG0pfX1icmVhaztjYXNlIDU6QmwoZixmLnJldHVybik7YnJlYWs7Y2FzZSAyMjppZihmLm1lbW9pemVkU3RhdGUhPT1udWxsKXtTMChkKTtjb250aW51ZX19cCE9PW51bGw/KHAucmV0dXJuPWYsdGU9cCk6UzAoZCl9dT11LnNpYmxpbmd9ZTpmb3IodT1udWxsLGQ9dDs7KXtpZihkLnRhZz09PTUpe2lmKHU9PT1udWxsKXt1PWQ7dHJ5e2k9ZC5zdGF0ZU5vZGUsYz8obz1pLnN0eWxlLHR5cGVvZiBvLnNldFByb3BlcnR5PT0iZnVuY3Rpb24iP28uc2V0UHJvcGVydHkoImRpc3BsYXkiLCJub25lIiwiaW1wb3J0YW50Iik6by5kaXNwbGF5PSJub25lIik6KHM9ZC5zdGF0ZU5vZGUsYT1kLm1lbW9pemVkUHJvcHMuc3R5bGUsbD1hIT1udWxsJiZhLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/YS5kaXNwbGF5Om51bGwscy5zdHlsZS5kaXNwbGF5PW9fKCJkaXNwbGF5IixsKSl9Y2F0Y2gobSl7dnQodCx0LnJldHVybixtKX19fWVsc2UgaWYoZC50YWc9PT02KXtpZih1PT09bnVsbCl0cnl7ZC5zdGF0ZU5vZGUubm9kZVZhbHVlPWM/IiI6ZC5tZW1vaXplZFByb3BzfWNhdGNoKG0pe3Z0KHQsdC5yZXR1cm4sbSl9fWVsc2UgaWYoKGQudGFnIT09MjImJmQudGFnIT09MjN8fGQubWVtb2l6ZWRTdGF0ZT09PW51bGx8fGQ9PT10KSYmZC5jaGlsZCE9PW51bGwpe2QuY2hpbGQucmV0dXJuPWQsZD1kLmNoaWxkO2NvbnRpbnVlfWlmKGQ9PT10KWJyZWFrIGU7Zm9yKDtkLnNpYmxpbmc9PT1udWxsOyl7aWYoZC5yZXR1cm49PT1udWxsfHxkLnJldHVybj09PXQpYnJlYWsgZTt1PT09ZCYmKHU9bnVsbCksZD1kLnJldHVybn11PT09ZCYmKHU9bnVsbCksZC5zaWJsaW5nLnJldHVybj1kLnJldHVybixkPWQuc2libGluZ319YnJlYWs7Y2FzZSAxOTpmcihlLHQpLFByKHQpLHImNCYmXzAodCk7YnJlYWs7Y2FzZSAyMTpicmVhaztkZWZhdWx0OmZyKGUsdCksUHIodCl9fWZ1bmN0aW9uIFByKHQpe3ZhciBlPXQuZmxhZ3M7aWYoZSYyKXt0cnl7ZTp7Zm9yKHZhciBuPXQucmV0dXJuO24hPT1udWxsOyl7aWYoUHcobikpe3ZhciByPW47YnJlYWsgZX1uPW4ucmV0dXJufXRocm93IEVycm9yKFcoMTYwKSl9c3dpdGNoKHIudGFnKXtjYXNlIDU6dmFyIGk9ci5zdGF0ZU5vZGU7ci5mbGFncyYzMiYmKEJhKGksIiIpLHIuZmxhZ3MmPS0zMyk7dmFyIG89eDAodCk7WmgodCxvLGkpO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6dmFyIGw9ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxzPXgwKHQpO0toKHQscyxsKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKFcoMTYxKSl9fWNhdGNoKGEpe3Z0KHQsdC5yZXR1cm4sYSl9dC5mbGFncyY9LTN9ZSY0MDk2JiYodC5mbGFncyY9LTQwOTcpfWZ1bmN0aW9uIFJUKHQsZSxuKXt0ZT10LEx3KHQpfWZ1bmN0aW9uIEx3KHQsZSxuKXtmb3IodmFyIHI9KHQubW9kZSYxKSE9PTA7dGUhPT1udWxsOyl7dmFyIGk9dGUsbz1pLmNoaWxkO2lmKGkudGFnPT09MjImJnIpe3ZhciBsPWkubWVtb2l6ZWRTdGF0ZSE9PW51bGx8fGR1O2lmKCFsKXt2YXIgcz1pLmFsdGVybmF0ZSxhPXMhPT1udWxsJiZzLm1lbW9pemVkU3RhdGUhPT1udWxsfHxRdDtzPWR1O3ZhciBjPVF0O2lmKGR1PWwsKFF0PWEpJiYhYylmb3IodGU9aTt0ZSE9PW51bGw7KWw9dGUsYT1sLmNoaWxkLGwudGFnPT09MjImJmwubWVtb2l6ZWRTdGF0ZSE9PW51bGw/RTAoaSk6YSE9PW51bGw/KGEucmV0dXJuPWwsdGU9YSk6RTAoaSk7Zm9yKDtvIT09bnVsbDspdGU9byxMdyhvKSxvPW8uc2libGluZzt0ZT1pLGR1PXMsUXQ9Y313MCh0KX1lbHNlIGkuc3VidHJlZUZsYWdzJjg3NzImJm8hPT1udWxsPyhvLnJldHVybj1pLHRlPW8pOncwKHQpfX1mdW5jdGlvbiB3MCh0KXtmb3IoO3RlIT09bnVsbDspe3ZhciBlPXRlO2lmKGUuZmxhZ3MmODc3Mil7dmFyIG49ZS5hbHRlcm5hdGU7dHJ5e2lmKGUuZmxhZ3MmODc3Milzd2l0Y2goZS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6UXR8fHlmKDUsZSk7YnJlYWs7Y2FzZSAxOnZhciByPWUuc3RhdGVOb2RlO2lmKGUuZmxhZ3MmNCYmIVF0KWlmKG49PT1udWxsKXIuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBpPWUuZWxlbWVudFR5cGU9PT1lLnR5cGU/bi5tZW1vaXplZFByb3BzOmdyKGUudHlwZSxuLm1lbW9pemVkUHJvcHMpO3IuY29tcG9uZW50RGlkVXBkYXRlKGksbi5tZW1vaXplZFN0YXRlLHIuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBvPWUudXBkYXRlUXVldWU7byE9PW51bGwmJmkwKGUsbyxyKTticmVhaztjYXNlIDM6dmFyIGw9ZS51cGRhdGVRdWV1ZTtpZihsIT09bnVsbCl7aWYobj1udWxsLGUuY2hpbGQhPT1udWxsKXN3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1Om49ZS5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOm49ZS5jaGlsZC5zdGF0ZU5vZGV9aTAoZSxsLG4pfWJyZWFrO2Nhc2UgNTp2YXIgcz1lLnN0YXRlTm9kZTtpZihuPT09bnVsbCYmZS5mbGFncyY0KXtuPXM7dmFyIGE9ZS5tZW1vaXplZFByb3BzO3N3aXRjaChlLnR5cGUpe2Nhc2UiYnV0dG9uIjpjYXNlImlucHV0IjpjYXNlInNlbGVjdCI6Y2FzZSJ0ZXh0YXJlYSI6YS5hdXRvRm9jdXMmJm4uZm9jdXMoKTticmVhaztjYXNlImltZyI6YS5zcmMmJihuLnNyYz1hLnNyYyl9fWJyZWFrO2Nhc2UgNjpicmVhaztjYXNlIDQ6YnJlYWs7Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKGUubWVtb2l6ZWRTdGF0ZT09PW51bGwpe3ZhciBjPWUuYWx0ZXJuYXRlO2lmKGMhPT1udWxsKXt2YXIgdT1jLm1lbW9pemVkU3RhdGU7aWYodSE9PW51bGwpe3ZhciBkPXUuZGVoeWRyYXRlZDtkIT09bnVsbCYmVmEoZCl9fX1icmVhaztjYXNlIDE5OmNhc2UgMTc6Y2FzZSAyMTpjYXNlIDIyOmNhc2UgMjM6Y2FzZSAyNTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKFcoMTYzKSl9UXR8fGUuZmxhZ3MmNTEyJiZWaChlKX1jYXRjaChmKXt2dChlLGUucmV0dXJuLGYpfX1pZihlPT09dCl7dGU9bnVsbDticmVha31pZihuPWUuc2libGluZyxuIT09bnVsbCl7bi5yZXR1cm49ZS5yZXR1cm4sdGU9bjticmVha310ZT1lLnJldHVybn19ZnVuY3Rpb24gUzAodCl7Zm9yKDt0ZSE9PW51bGw7KXt2YXIgZT10ZTtpZihlPT09dCl7dGU9bnVsbDticmVha312YXIgbj1lLnNpYmxpbmc7aWYobiE9PW51bGwpe24ucmV0dXJuPWUucmV0dXJuLHRlPW47YnJlYWt9dGU9ZS5yZXR1cm59fWZ1bmN0aW9uIEUwKHQpe2Zvcig7dGUhPT1udWxsOyl7dmFyIGU9dGU7dHJ5e3N3aXRjaChlLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp2YXIgbj1lLnJldHVybjt0cnl7eWYoNCxlKX1jYXRjaChhKXt2dChlLG4sYSl9YnJlYWs7Y2FzZSAxOnZhciByPWUuc3RhdGVOb2RlO2lmKHR5cGVvZiByLmNvbXBvbmVudERpZE1vdW50PT0iZnVuY3Rpb24iKXt2YXIgaT1lLnJldHVybjt0cnl7ci5jb21wb25lbnREaWRNb3VudCgpfWNhdGNoKGEpe3Z0KGUsaSxhKX19dmFyIG89ZS5yZXR1cm47dHJ5e1ZoKGUpfWNhdGNoKGEpe3Z0KGUsbyxhKX1icmVhaztjYXNlIDU6dmFyIGw9ZS5yZXR1cm47dHJ5e1ZoKGUpfWNhdGNoKGEpe3Z0KGUsbCxhKX19fWNhdGNoKGEpe3Z0KGUsZS5yZXR1cm4sYSl9aWYoZT09PXQpe3RlPW51bGw7YnJlYWt9dmFyIHM9ZS5zaWJsaW5nO2lmKHMhPT1udWxsKXtzLnJldHVybj1lLnJldHVybix0ZT1zO2JyZWFrfXRlPWUucmV0dXJufX12YXIgT1Q9TWF0aC5jZWlsLGdkPV9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsVmc9X2kuUmVhY3RDdXJyZW50T3duZXIsb3I9X2kuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsTWU9MCxCdD1udWxsLGt0PW51bGwsWnQ9MCxMbj0wLFVsPV9vKDApLFB0PTAsbmM9bnVsbCxZbz0wLHhmPTAsS2c9MCxiYT1udWxsLCRuPW51bGwsWmc9MCxmcz0xLzAsbmk9bnVsbCx2ZD0hMSxHaD1udWxsLHFpPW51bGwsZnU9ITEsVmk9bnVsbCx5ZD0wLGthPTAsWWg9bnVsbCx6dT0tMSxGdT0wO2Z1bmN0aW9uIHhuKCl7cmV0dXJuIE1lJjY/Q3QoKTp6dSE9PS0xP3p1Onp1PUN0KCl9ZnVuY3Rpb24gZW8odCl7cmV0dXJuIHQubW9kZSYxP01lJjImJlp0IT09MD9adCYtWnQ6aFQudHJhbnNpdGlvbiE9PW51bGw/KEZ1PT09MCYmKEZ1PXlfKCkpLEZ1KToodD1VZSx0IT09MHx8KHQ9d2luZG93LmV2ZW50LHQ9dD09PXZvaWQgMD8xNjpiXyh0LnR5cGUpKSx0KToxfWZ1bmN0aW9uIEVyKHQsZSxuLHIpe2lmKDUwPGthKXRocm93IGthPTAsWWg9bnVsbCxFcnJvcihXKDE4NSkpO0FjKHQsbixyKSwoIShNZSYyKXx8dCE9PUJ0KSYmKHQ9PT1CdCYmKCEoTWUmMikmJih4Znw9biksUHQ9PT00JiZCaSh0LFp0KSksT24odCxyKSxuPT09MSYmTWU9PT0wJiYhKGUubW9kZSYxKSYmKGZzPUN0KCkrNTAwLG1mJiZ3bygpKSl9ZnVuY3Rpb24gT24odCxlKXt2YXIgbj10LmNhbGxiYWNrTm9kZTtoJCh0LGUpO3ZhciByPXRkKHQsdD09PUJ0P1p0OjApO2lmKHI9PT0wKW4hPT1udWxsJiZQeShuKSx0LmNhbGxiYWNrTm9kZT1udWxsLHQuY2FsbGJhY2tQcmlvcml0eT0wO2Vsc2UgaWYoZT1yJi1yLHQuY2FsbGJhY2tQcmlvcml0eSE9PWUpe2lmKG4hPW51bGwmJlB5KG4pLGU9PT0xKXQudGFnPT09MD9wVChDMC5iaW5kKG51bGwsdCkpOkhfKEMwLmJpbmQobnVsbCx0KSksY1QoZnVuY3Rpb24oKXshKE1lJjYpJiZ3bygpfSksbj1udWxsO2Vsc2V7c3dpdGNoKHhfKHIpKXtjYXNlIDE6bj14ZzticmVhaztjYXNlIDQ6bj1nXzticmVhaztjYXNlIDE2Om49ZWQ7YnJlYWs7Y2FzZSA1MzY4NzA5MTI6bj12XzticmVhaztkZWZhdWx0Om49ZWR9bj1XdyhuLER3LmJpbmQobnVsbCx0KSl9dC5jYWxsYmFja1ByaW9yaXR5PWUsdC5jYWxsYmFja05vZGU9bn19ZnVuY3Rpb24gRHcodCxlKXtpZih6dT0tMSxGdT0wLE1lJjYpdGhyb3cgRXJyb3IoVygzMjcpKTt2YXIgbj10LmNhbGxiYWNrTm9kZTtpZihxbCgpJiZ0LmNhbGxiYWNrTm9kZSE9PW4pcmV0dXJuIG51bGw7dmFyIHI9dGQodCx0PT09QnQ/WnQ6MCk7aWYocj09PTApcmV0dXJuIG51bGw7aWYociYzMHx8ciZ0LmV4cGlyZWRMYW5lc3x8ZSllPXhkKHQscik7ZWxzZXtlPXI7dmFyIGk9TWU7TWV8PTI7dmFyIG89ancoKTsoQnQhPT10fHxadCE9PWUpJiYobmk9bnVsbCxmcz1DdCgpKzUwMCxqbyh0LGUpKTtkbyB0cnl7TVQoKTticmVha31jYXRjaChzKXtJdyh0LHMpfXdoaWxlKCEwKTtQZygpLGdkLmN1cnJlbnQ9byxNZT1pLGt0IT09bnVsbD9lPTA6KEJ0PW51bGwsWnQ9MCxlPVB0KX1pZihlIT09MCl7aWYoZT09PTImJihpPVNoKHQpLGkhPT0wJiYocj1pLGU9WGgodCxpKSkpLGU9PT0xKXRocm93IG49bmMsam8odCwwKSxCaSh0LHIpLE9uKHQsQ3QoKSksbjtpZihlPT09NilCaSh0LHIpO2Vsc2V7aWYoaT10LmN1cnJlbnQuYWx0ZXJuYXRlLCEociYzMCkmJiFQVChpKSYmKGU9eGQodCxyKSxlPT09MiYmKG89U2godCksbyE9PTAmJihyPW8sZT1YaCh0LG8pKSksZT09PTEpKXRocm93IG49bmMsam8odCwwKSxCaSh0LHIpLE9uKHQsQ3QoKSksbjtzd2l0Y2godC5maW5pc2hlZFdvcms9aSx0LmZpbmlzaGVkTGFuZXM9cixlKXtjYXNlIDA6Y2FzZSAxOnRocm93IEVycm9yKFcoMzQ1KSk7Y2FzZSAyOlJvKHQsJG4sbmkpO2JyZWFrO2Nhc2UgMzppZihCaSh0LHIpLChyJjEzMDAyMzQyNCk9PT1yJiYoZT1aZys1MDAtQ3QoKSwxMDxlKSl7aWYodGQodCwwKSE9PTApYnJlYWs7aWYoaT10LnN1c3BlbmRlZExhbmVzLChpJnIpIT09cil7eG4oKSx0LnBpbmdlZExhbmVzfD10LnN1c3BlbmRlZExhbmVzJmk7YnJlYWt9dC50aW1lb3V0SGFuZGxlPVJoKFJvLmJpbmQobnVsbCx0LCRuLG5pKSxlKTticmVha31Sbyh0LCRuLG5pKTticmVhaztjYXNlIDQ6aWYoQmkodCxyKSwociY0MTk0MjQwKT09PXIpYnJlYWs7Zm9yKGU9dC5ldmVudFRpbWVzLGk9LTE7MDxyOyl7dmFyIGw9MzEtU3Iocik7bz0xPDxsLGw9ZVtsXSxsPmkmJihpPWwpLHImPX5vfWlmKHI9aSxyPUN0KCktcixyPSgxMjA+cj8xMjA6NDgwPnI/NDgwOjEwODA+cj8xMDgwOjE5MjA+cj8xOTIwOjNlMz5yPzNlMzo0MzIwPnI/NDMyMDoxOTYwKk9UKHIvMTk2MCkpLXIsMTA8cil7dC50aW1lb3V0SGFuZGxlPVJoKFJvLmJpbmQobnVsbCx0LCRuLG5pKSxyKTticmVha31Sbyh0LCRuLG5pKTticmVhaztjYXNlIDU6Um8odCwkbixuaSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihXKDMyOSkpfX19cmV0dXJuIE9uKHQsQ3QoKSksdC5jYWxsYmFja05vZGU9PT1uP0R3LmJpbmQobnVsbCx0KTpudWxsfWZ1bmN0aW9uIFhoKHQsZSl7dmFyIG49YmE7cmV0dXJuIHQuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCYmKGpvKHQsZSkuZmxhZ3N8PTI1NiksdD14ZCh0LGUpLHQhPT0yJiYoZT0kbiwkbj1uLGUhPT1udWxsJiZKaChlKSksdH1mdW5jdGlvbiBKaCh0KXskbj09PW51bGw/JG49dDokbi5wdXNoLmFwcGx5KCRuLHQpfWZ1bmN0aW9uIFBUKHQpe2Zvcih2YXIgZT10Ozspe2lmKGUuZmxhZ3MmMTYzODQpe3ZhciBuPWUudXBkYXRlUXVldWU7aWYobiE9PW51bGwmJihuPW4uc3RvcmVzLG4hPT1udWxsKSlmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGk9bltyXSxvPWkuZ2V0U25hcHNob3Q7aT1pLnZhbHVlO3RyeXtpZigha3IobygpLGkpKXJldHVybiExfWNhdGNoe3JldHVybiExfX19aWYobj1lLmNoaWxkLGUuc3VidHJlZUZsYWdzJjE2Mzg0JiZuIT09bnVsbCluLnJldHVybj1lLGU9bjtlbHNle2lmKGU9PT10KWJyZWFrO2Zvcig7ZS5zaWJsaW5nPT09bnVsbDspe2lmKGUucmV0dXJuPT09bnVsbHx8ZS5yZXR1cm49PT10KXJldHVybiEwO2U9ZS5yZXR1cm59ZS5zaWJsaW5nLnJldHVybj1lLnJldHVybixlPWUuc2libGluZ319cmV0dXJuITB9ZnVuY3Rpb24gQmkodCxlKXtmb3IoZSY9fktnLGUmPX54Zix0LnN1c3BlbmRlZExhbmVzfD1lLHQucGluZ2VkTGFuZXMmPX5lLHQ9dC5leHBpcmF0aW9uVGltZXM7MDxlOyl7dmFyIG49MzEtU3IoZSkscj0xPDxuO3Rbbl09LTEsZSY9fnJ9fWZ1bmN0aW9uIEMwKHQpe2lmKE1lJjYpdGhyb3cgRXJyb3IoVygzMjcpKTtxbCgpO3ZhciBlPXRkKHQsMCk7aWYoIShlJjEpKXJldHVybiBPbih0LEN0KCkpLG51bGw7dmFyIG49eGQodCxlKTtpZih0LnRhZyE9PTAmJm49PT0yKXt2YXIgcj1TaCh0KTtyIT09MCYmKGU9cixuPVhoKHQscikpfWlmKG49PT0xKXRocm93IG49bmMsam8odCwwKSxCaSh0LGUpLE9uKHQsQ3QoKSksbjtpZihuPT09Nil0aHJvdyBFcnJvcihXKDM0NSkpO3JldHVybiB0LmZpbmlzaGVkV29yaz10LmN1cnJlbnQuYWx0ZXJuYXRlLHQuZmluaXNoZWRMYW5lcz1lLFJvKHQsJG4sbmkpLE9uKHQsQ3QoKSksbnVsbH1mdW5jdGlvbiBHZyh0LGUpe3ZhciBuPU1lO01lfD0xO3RyeXtyZXR1cm4gdChlKX1maW5hbGx5e01lPW4sTWU9PT0wJiYoZnM9Q3QoKSs1MDAsbWYmJndvKCkpfX1mdW5jdGlvbiBYbyh0KXtWaSE9PW51bGwmJlZpLnRhZz09PTAmJiEoTWUmNikmJnFsKCk7dmFyIGU9TWU7TWV8PTE7dmFyIG49b3IudHJhbnNpdGlvbixyPVVlO3RyeXtpZihvci50cmFuc2l0aW9uPW51bGwsVWU9MSx0KXJldHVybiB0KCl9ZmluYWxseXtVZT1yLG9yLnRyYW5zaXRpb249bixNZT1lLCEoTWUmNikmJndvKCl9fWZ1bmN0aW9uIFlnKCl7TG49VWwuY3VycmVudCxpdChVbCl9ZnVuY3Rpb24gam8odCxlKXt0LmZpbmlzaGVkV29yaz1udWxsLHQuZmluaXNoZWRMYW5lcz0wO3ZhciBuPXQudGltZW91dEhhbmRsZTtpZihuIT09LTEmJih0LnRpbWVvdXRIYW5kbGU9LTEsYVQobikpLGt0IT09bnVsbClmb3Iobj1rdC5yZXR1cm47biE9PW51bGw7KXt2YXIgcj1uO3N3aXRjaChOZyhyKSxyLnRhZyl7Y2FzZSAxOnI9ci50eXBlLmNoaWxkQ29udGV4dFR5cGVzLHIhPW51bGwmJmxkKCk7YnJlYWs7Y2FzZSAzOnVzKCksaXQoTm4pLGl0KG9uKSxqZygpO2JyZWFrO2Nhc2UgNTpJZyhyKTticmVhaztjYXNlIDQ6dXMoKTticmVhaztjYXNlIDEzOml0KGR0KTticmVhaztjYXNlIDE5Oml0KGR0KTticmVhaztjYXNlIDEwOkFnKHIudHlwZS5fY29udGV4dCk7YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOllnKCl9bj1uLnJldHVybn1pZihCdD10LGt0PXQ9dG8odC5jdXJyZW50LG51bGwpLFp0PUxuPWUsUHQ9MCxuYz1udWxsLEtnPXhmPVlvPTAsJG49YmE9bnVsbCxNbyE9PW51bGwpe2ZvcihlPTA7ZTxNby5sZW5ndGg7ZSsrKWlmKG49TW9bZV0scj1uLmludGVybGVhdmVkLHIhPT1udWxsKXtuLmludGVybGVhdmVkPW51bGw7dmFyIGk9ci5uZXh0LG89bi5wZW5kaW5nO2lmKG8hPT1udWxsKXt2YXIgbD1vLm5leHQ7by5uZXh0PWksci5uZXh0PWx9bi5wZW5kaW5nPXJ9TW89bnVsbH1yZXR1cm4gdH1mdW5jdGlvbiBJdyh0LGUpe2Rve3ZhciBuPWt0O3RyeXtpZihQZygpLER1LmN1cnJlbnQ9bWQsaGQpe2Zvcih2YXIgcj1wdC5tZW1vaXplZFN0YXRlO3IhPT1udWxsOyl7dmFyIGk9ci5xdWV1ZTtpIT09bnVsbCYmKGkucGVuZGluZz1udWxsKSxyPXIubmV4dH1oZD0hMX1pZihHbz0wLER0PVJ0PXB0PW51bGwsRWE9ITEscWE9MCxWZy5jdXJyZW50PW51bGwsbj09PW51bGx8fG4ucmV0dXJuPT09bnVsbCl7UHQ9MSxuYz1lLGt0PW51bGw7YnJlYWt9ZTp7dmFyIG89dCxsPW4ucmV0dXJuLHM9bixhPWU7aWYoZT1adCxzLmZsYWdzfD0zMjc2OCxhIT09bnVsbCYmdHlwZW9mIGE9PSJvYmplY3QiJiZ0eXBlb2YgYS50aGVuPT0iZnVuY3Rpb24iKXt2YXIgYz1hLHU9cyxkPXUudGFnO2lmKCEodS5tb2RlJjEpJiYoZD09PTB8fGQ9PT0xMXx8ZD09PTE1KSl7dmFyIGY9dS5hbHRlcm5hdGU7Zj8odS51cGRhdGVRdWV1ZT1mLnVwZGF0ZVF1ZXVlLHUubWVtb2l6ZWRTdGF0ZT1mLm1lbW9pemVkU3RhdGUsdS5sYW5lcz1mLmxhbmVzKToodS51cGRhdGVRdWV1ZT1udWxsLHUubWVtb2l6ZWRTdGF0ZT1udWxsKX12YXIgcD1kMChsKTtpZihwIT09bnVsbCl7cC5mbGFncyY9LTI1NyxmMChwLGwscyxvLGUpLHAubW9kZSYxJiZ1MChvLGMsZSksZT1wLGE9Yzt2YXIgZz1lLnVwZGF0ZVF1ZXVlO2lmKGc9PT1udWxsKXt2YXIgbT1uZXcgU2V0O20uYWRkKGEpLGUudXBkYXRlUXVldWU9bX1lbHNlIGcuYWRkKGEpO2JyZWFrIGV9ZWxzZXtpZighKGUmMSkpe3UwKG8sYyxlKSxYZygpO2JyZWFrIGV9YT1FcnJvcihXKDQyNikpfX1lbHNlIGlmKG90JiZzLm1vZGUmMSl7dmFyIHc9ZDAobCk7aWYodyE9PW51bGwpeyEody5mbGFncyY2NTUzNikmJih3LmZsYWdzfD0yNTYpLGYwKHcsbCxzLG8sZSksUmcoZHMoYSxzKSk7YnJlYWsgZX19bz1hPWRzKGEscyksUHQhPT00JiYoUHQ9MiksYmE9PT1udWxsP2JhPVtvXTpiYS5wdXNoKG8pLG89bDtkb3tzd2l0Y2goby50YWcpe2Nhc2UgMzpvLmZsYWdzfD02NTUzNixlJj0tZSxvLmxhbmVzfD1lO3ZhciB2PV93KG8sYSxlKTtyMChvLHYpO2JyZWFrIGU7Y2FzZSAxOnM9YTt2YXIgeD1vLnR5cGUsXz1vLnN0YXRlTm9kZTtpZighKG8uZmxhZ3MmMTI4KSYmKHR5cGVvZiB4LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8XyE9PW51bGwmJnR5cGVvZiBfLmNvbXBvbmVudERpZENhdGNoPT0iZnVuY3Rpb24iJiYocWk9PT1udWxsfHwhcWkuaGFzKF8pKSkpe28uZmxhZ3N8PTY1NTM2LGUmPS1lLG8ubGFuZXN8PWU7dmFyIFM9d3cobyxzLGUpO3IwKG8sUyk7YnJlYWsgZX19bz1vLnJldHVybn13aGlsZShvIT09bnVsbCl9Rncobil9Y2F0Y2goRSl7ZT1FLGt0PT09biYmbiE9PW51bGwmJihrdD1uPW4ucmV0dXJuKTtjb250aW51ZX1icmVha313aGlsZSghMCl9ZnVuY3Rpb24gancoKXt2YXIgdD1nZC5jdXJyZW50O3JldHVybiBnZC5jdXJyZW50PW1kLHQ9PT1udWxsP21kOnR9ZnVuY3Rpb24gWGcoKXsoUHQ9PT0wfHxQdD09PTN8fFB0PT09MikmJihQdD00KSxCdD09PW51bGx8fCEoWW8mMjY4NDM1NDU1KSYmISh4ZiYyNjg0MzU0NTUpfHxCaShCdCxadCl9ZnVuY3Rpb24geGQodCxlKXt2YXIgbj1NZTtNZXw9Mjt2YXIgcj1qdygpOyhCdCE9PXR8fFp0IT09ZSkmJihuaT1udWxsLGpvKHQsZSkpO2RvIHRyeXtBVCgpO2JyZWFrfWNhdGNoKGkpe0l3KHQsaSl9d2hpbGUoITApO2lmKFBnKCksTWU9bixnZC5jdXJyZW50PXIsa3QhPT1udWxsKXRocm93IEVycm9yKFcoMjYxKSk7cmV0dXJuIEJ0PW51bGwsWnQ9MCxQdH1mdW5jdGlvbiBBVCgpe2Zvcig7a3QhPT1udWxsOyl6dyhrdCl9ZnVuY3Rpb24gTVQoKXtmb3IoO2t0IT09bnVsbCYmIW8kKCk7KXp3KGt0KX1mdW5jdGlvbiB6dyh0KXt2YXIgZT1Vdyh0LmFsdGVybmF0ZSx0LExuKTt0Lm1lbW9pemVkUHJvcHM9dC5wZW5kaW5nUHJvcHMsZT09PW51bGw/RncodCk6a3Q9ZSxWZy5jdXJyZW50PW51bGx9ZnVuY3Rpb24gRncodCl7dmFyIGU9dDtkb3t2YXIgbj1lLmFsdGVybmF0ZTtpZih0PWUucmV0dXJuLGUuZmxhZ3MmMzI3Njgpe2lmKG49JFQobixlKSxuIT09bnVsbCl7bi5mbGFncyY9MzI3Njcsa3Q9bjtyZXR1cm59aWYodCE9PW51bGwpdC5mbGFnc3w9MzI3NjgsdC5zdWJ0cmVlRmxhZ3M9MCx0LmRlbGV0aW9ucz1udWxsO2Vsc2V7UHQ9NixrdD1udWxsO3JldHVybn19ZWxzZSBpZihuPWtUKG4sZSxMbiksbiE9PW51bGwpe2t0PW47cmV0dXJufWlmKGU9ZS5zaWJsaW5nLGUhPT1udWxsKXtrdD1lO3JldHVybn1rdD1lPXR9d2hpbGUoZSE9PW51bGwpO1B0PT09MCYmKFB0PTUpfWZ1bmN0aW9uIFJvKHQsZSxuKXt2YXIgcj1VZSxpPW9yLnRyYW5zaXRpb247dHJ5e29yLnRyYW5zaXRpb249bnVsbCxVZT0xLExUKHQsZSxuLHIpfWZpbmFsbHl7b3IudHJhbnNpdGlvbj1pLFVlPXJ9cmV0dXJuIG51bGx9ZnVuY3Rpb24gTFQodCxlLG4scil7ZG8gcWwoKTt3aGlsZShWaSE9PW51bGwpO2lmKE1lJjYpdGhyb3cgRXJyb3IoVygzMjcpKTtuPXQuZmluaXNoZWRXb3JrO3ZhciBpPXQuZmluaXNoZWRMYW5lcztpZihuPT09bnVsbClyZXR1cm4gbnVsbDtpZih0LmZpbmlzaGVkV29yaz1udWxsLHQuZmluaXNoZWRMYW5lcz0wLG49PT10LmN1cnJlbnQpdGhyb3cgRXJyb3IoVygxNzcpKTt0LmNhbGxiYWNrTm9kZT1udWxsLHQuY2FsbGJhY2tQcmlvcml0eT0wO3ZhciBvPW4ubGFuZXN8bi5jaGlsZExhbmVzO2lmKG0kKHQsbyksdD09PUJ0JiYoa3Q9QnQ9bnVsbCxadD0wKSwhKG4uc3VidHJlZUZsYWdzJjIwNjQpJiYhKG4uZmxhZ3MmMjA2NCl8fGZ1fHwoZnU9ITAsV3coZWQsZnVuY3Rpb24oKXtyZXR1cm4gcWwoKSxudWxsfSkpLG89KG4uZmxhZ3MmMTU5OTApIT09MCxuLnN1YnRyZWVGbGFncyYxNTk5MHx8byl7bz1vci50cmFuc2l0aW9uLG9yLnRyYW5zaXRpb249bnVsbDt2YXIgbD1VZTtVZT0xO3ZhciBzPU1lO01lfD00LFZnLmN1cnJlbnQ9bnVsbCxOVCh0LG4pLE13KG4sdCksdFQoVGgpLG5kPSEhJGgsVGg9JGg9bnVsbCx0LmN1cnJlbnQ9bixSVChuKSxsJCgpLE1lPXMsVWU9bCxvci50cmFuc2l0aW9uPW99ZWxzZSB0LmN1cnJlbnQ9bjtpZihmdSYmKGZ1PSExLFZpPXQseWQ9aSksbz10LnBlbmRpbmdMYW5lcyxvPT09MCYmKHFpPW51bGwpLGMkKG4uc3RhdGVOb2RlKSxPbih0LEN0KCkpLGUhPT1udWxsKWZvcihyPXQub25SZWNvdmVyYWJsZUVycm9yLG49MDtuPGUubGVuZ3RoO24rKylpPWVbbl0scihpLnZhbHVlLHtjb21wb25lbnRTdGFjazppLnN0YWNrLGRpZ2VzdDppLmRpZ2VzdH0pO2lmKHZkKXRocm93IHZkPSExLHQ9R2gsR2g9bnVsbCx0O3JldHVybiB5ZCYxJiZ0LnRhZyE9PTAmJnFsKCksbz10LnBlbmRpbmdMYW5lcyxvJjE/dD09PVloP2thKys6KGthPTAsWWg9dCk6a2E9MCx3bygpLG51bGx9ZnVuY3Rpb24gcWwoKXtpZihWaSE9PW51bGwpe3ZhciB0PXhfKHlkKSxlPW9yLnRyYW5zaXRpb24sbj1VZTt0cnl7aWYob3IudHJhbnNpdGlvbj1udWxsLFVlPTE2PnQ/MTY6dCxWaT09PW51bGwpdmFyIHI9ITE7ZWxzZXtpZih0PVZpLFZpPW51bGwseWQ9MCxNZSY2KXRocm93IEVycm9yKFcoMzMxKSk7dmFyIGk9TWU7Zm9yKE1lfD00LHRlPXQuY3VycmVudDt0ZSE9PW51bGw7KXt2YXIgbz10ZSxsPW8uY2hpbGQ7aWYodGUuZmxhZ3MmMTYpe3ZhciBzPW8uZGVsZXRpb25zO2lmKHMhPT1udWxsKXtmb3IodmFyIGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtmb3IodGU9Yzt0ZSE9PW51bGw7KXt2YXIgdT10ZTtzd2l0Y2godS50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Q2EoOCx1LG8pfXZhciBkPXUuY2hpbGQ7aWYoZCE9PW51bGwpZC5yZXR1cm49dSx0ZT1kO2Vsc2UgZm9yKDt0ZSE9PW51bGw7KXt1PXRlO3ZhciBmPXUuc2libGluZyxwPXUucmV0dXJuO2lmKE93KHUpLHU9PT1jKXt0ZT1udWxsO2JyZWFrfWlmKGYhPT1udWxsKXtmLnJldHVybj1wLHRlPWY7YnJlYWt9dGU9cH19fXZhciBnPW8uYWx0ZXJuYXRlO2lmKGchPT1udWxsKXt2YXIgbT1nLmNoaWxkO2lmKG0hPT1udWxsKXtnLmNoaWxkPW51bGw7ZG97dmFyIHc9bS5zaWJsaW5nO20uc2libGluZz1udWxsLG09d313aGlsZShtIT09bnVsbCl9fXRlPW99fWlmKG8uc3VidHJlZUZsYWdzJjIwNjQmJmwhPT1udWxsKWwucmV0dXJuPW8sdGU9bDtlbHNlIGU6Zm9yKDt0ZSE9PW51bGw7KXtpZihvPXRlLG8uZmxhZ3MmMjA0OClzd2l0Y2goby50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6Q2EoOSxvLG8ucmV0dXJuKX12YXIgdj1vLnNpYmxpbmc7aWYodiE9PW51bGwpe3YucmV0dXJuPW8ucmV0dXJuLHRlPXY7YnJlYWsgZX10ZT1vLnJldHVybn19dmFyIHg9dC5jdXJyZW50O2Zvcih0ZT14O3RlIT09bnVsbDspe2w9dGU7dmFyIF89bC5jaGlsZDtpZihsLnN1YnRyZWVGbGFncyYyMDY0JiZfIT09bnVsbClfLnJldHVybj1sLHRlPV87ZWxzZSBlOmZvcihsPXg7dGUhPT1udWxsOyl7aWYocz10ZSxzLmZsYWdzJjIwNDgpdHJ5e3N3aXRjaChzLnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTp5Zig5LHMpfX1jYXRjaChFKXt2dChzLHMucmV0dXJuLEUpfWlmKHM9PT1sKXt0ZT1udWxsO2JyZWFrIGV9dmFyIFM9cy5zaWJsaW5nO2lmKFMhPT1udWxsKXtTLnJldHVybj1zLnJldHVybix0ZT1TO2JyZWFrIGV9dGU9cy5yZXR1cm59fWlmKE1lPWksd28oKSxGciYmdHlwZW9mIEZyLm9uUG9zdENvbW1pdEZpYmVyUm9vdD09ImZ1bmN0aW9uIil0cnl7RnIub25Qb3N0Q29tbWl0RmliZXJSb290KHVmLHQpfWNhdGNoe31yPSEwfXJldHVybiByfWZpbmFsbHl7VWU9bixvci50cmFuc2l0aW9uPWV9fXJldHVybiExfWZ1bmN0aW9uIGIwKHQsZSxuKXtlPWRzKG4sZSksZT1fdyh0LGUsMSksdD1RaSh0LGUsMSksZT14bigpLHQhPT1udWxsJiYoQWModCwxLGUpLE9uKHQsZSkpfWZ1bmN0aW9uIHZ0KHQsZSxuKXtpZih0LnRhZz09PTMpYjAodCx0LG4pO2Vsc2UgZm9yKDtlIT09bnVsbDspe2lmKGUudGFnPT09Myl7YjAoZSx0LG4pO2JyZWFrfWVsc2UgaWYoZS50YWc9PT0xKXt2YXIgcj1lLnN0YXRlTm9kZTtpZih0eXBlb2YgZS50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj09ImZ1bmN0aW9uInx8dHlwZW9mIHIuY29tcG9uZW50RGlkQ2F0Y2g9PSJmdW5jdGlvbiImJihxaT09PW51bGx8fCFxaS5oYXMocikpKXt0PWRzKG4sdCksdD13dyhlLHQsMSksZT1RaShlLHQsMSksdD14bigpLGUhPT1udWxsJiYoQWMoZSwxLHQpLE9uKGUsdCkpO2JyZWFrfX1lPWUucmV0dXJufX1mdW5jdGlvbiBEVCh0LGUsbil7dmFyIHI9dC5waW5nQ2FjaGU7ciE9PW51bGwmJnIuZGVsZXRlKGUpLGU9eG4oKSx0LnBpbmdlZExhbmVzfD10LnN1c3BlbmRlZExhbmVzJm4sQnQ9PT10JiYoWnQmbik9PT1uJiYoUHQ9PT00fHxQdD09PTMmJihadCYxMzAwMjM0MjQpPT09WnQmJjUwMD5DdCgpLVpnP2pvKHQsMCk6S2d8PW4pLE9uKHQsZSl9ZnVuY3Rpb24gQncodCxlKXtlPT09MCYmKHQubW9kZSYxPyhlPW51LG51PDw9MSwhKG51JjEzMDAyMzQyNCkmJihudT00MTk0MzA0KSk6ZT0xKTt2YXIgbj14bigpO3Q9aGkodCxlKSx0IT09bnVsbCYmKEFjKHQsZSxuKSxPbih0LG4pKX1mdW5jdGlvbiBJVCh0KXt2YXIgZT10Lm1lbW9pemVkU3RhdGUsbj0wO2UhPT1udWxsJiYobj1lLnJldHJ5TGFuZSksQncodCxuKX1mdW5jdGlvbiBqVCh0LGUpe3ZhciBuPTA7c3dpdGNoKHQudGFnKXtjYXNlIDEzOnZhciByPXQuc3RhdGVOb2RlLGk9dC5tZW1vaXplZFN0YXRlO2khPT1udWxsJiYobj1pLnJldHJ5TGFuZSk7YnJlYWs7Y2FzZSAxOTpyPXQuc3RhdGVOb2RlO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IoVygzMTQpKX1yIT09bnVsbCYmci5kZWxldGUoZSksQncodCxuKX12YXIgVXc7VXc9ZnVuY3Rpb24odCxlLG4pe2lmKHQhPT1udWxsKWlmKHQubWVtb2l6ZWRQcm9wcyE9PWUucGVuZGluZ1Byb3BzfHxObi5jdXJyZW50KVRuPSEwO2Vsc2V7aWYoISh0LmxhbmVzJm4pJiYhKGUuZmxhZ3MmMTI4KSlyZXR1cm4gVG49ITEsYlQodCxlLG4pO1RuPSEhKHQuZmxhZ3MmMTMxMDcyKX1lbHNlIFRuPSExLG90JiZlLmZsYWdzJjEwNDg1NzYmJlZfKGUsY2QsZS5pbmRleCk7c3dpdGNoKGUubGFuZXM9MCxlLnRhZyl7Y2FzZSAyOnZhciByPWUudHlwZTtqdSh0LGUpLHQ9ZS5wZW5kaW5nUHJvcHM7dmFyIGk9c3MoZSxvbi5jdXJyZW50KTtRbChlLG4pLGk9RmcobnVsbCxlLHIsdCxpLG4pO3ZhciBvPUJnKCk7cmV0dXJuIGUuZmxhZ3N8PTEsdHlwZW9mIGk9PSJvYmplY3QiJiZpIT09bnVsbCYmdHlwZW9mIGkucmVuZGVyPT0iZnVuY3Rpb24iJiZpLiQkdHlwZW9mPT09dm9pZCAwPyhlLnRhZz0xLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxSbihyKT8obz0hMCxzZChlKSk6bz0hMSxlLm1lbW9pemVkU3RhdGU9aS5zdGF0ZSE9PW51bGwmJmkuc3RhdGUhPT12b2lkIDA/aS5zdGF0ZTpudWxsLExnKGUpLGkudXBkYXRlcj1nZixlLnN0YXRlTm9kZT1pLGkuX3JlYWN0SW50ZXJuYWxzPWUsSWgoZSxyLHQsbiksZT1GaChudWxsLGUsciwhMCxvLG4pKTooZS50YWc9MCxvdCYmbyYmVGcoZSksZG4obnVsbCxlLGksbiksZT1lLmNoaWxkKSxlO2Nhc2UgMTY6cj1lLmVsZW1lbnRUeXBlO2U6e3N3aXRjaChqdSh0LGUpLHQ9ZS5wZW5kaW5nUHJvcHMsaT1yLl9pbml0LHI9aShyLl9wYXlsb2FkKSxlLnR5cGU9cixpPWUudGFnPUZUKHIpLHQ9Z3Iocix0KSxpKXtjYXNlIDA6ZT16aChudWxsLGUscix0LG4pO2JyZWFrIGU7Y2FzZSAxOmU9bTAobnVsbCxlLHIsdCxuKTticmVhayBlO2Nhc2UgMTE6ZT1wMChudWxsLGUscix0LG4pO2JyZWFrIGU7Y2FzZSAxNDplPWgwKG51bGwsZSxyLGdyKHIudHlwZSx0KSxuKTticmVhayBlfXRocm93IEVycm9yKFcoMzA2LHIsIiIpKX1yZXR1cm4gZTtjYXNlIDA6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksemgodCxlLHIsaSxuKTtjYXNlIDE6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksbTAodCxlLHIsaSxuKTtjYXNlIDM6ZTp7aWYoYncoZSksdD09PW51bGwpdGhyb3cgRXJyb3IoVygzODcpKTtyPWUucGVuZGluZ1Byb3BzLG89ZS5tZW1vaXplZFN0YXRlLGk9by5lbGVtZW50LFlfKHQsZSksZmQoZSxyLG51bGwsbik7dmFyIGw9ZS5tZW1vaXplZFN0YXRlO2lmKHI9bC5lbGVtZW50LG8uaXNEZWh5ZHJhdGVkKWlmKG89e2VsZW1lbnQ6cixpc0RlaHlkcmF0ZWQ6ITEsY2FjaGU6bC5jYWNoZSxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOmwucGVuZGluZ1N1c3BlbnNlQm91bmRhcmllcyx0cmFuc2l0aW9uczpsLnRyYW5zaXRpb25zfSxlLnVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZT1vLGUubWVtb2l6ZWRTdGF0ZT1vLGUuZmxhZ3MmMjU2KXtpPWRzKEVycm9yKFcoNDIzKSksZSksZT1nMCh0LGUscixuLGkpO2JyZWFrIGV9ZWxzZSBpZihyIT09aSl7aT1kcyhFcnJvcihXKDQyNCkpLGUpLGU9ZzAodCxlLHIsbixpKTticmVhayBlfWVsc2UgZm9yKGpuPUppKGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8uZmlyc3RDaGlsZCksem49ZSxvdD0hMCx4cj1udWxsLG49cV8oZSxudWxsLHIsbiksZS5jaGlsZD1uO247KW4uZmxhZ3M9bi5mbGFncyYtM3w0MDk2LG49bi5zaWJsaW5nO2Vsc2V7aWYoYXMoKSxyPT09aSl7ZT1taSh0LGUsbik7YnJlYWsgZX1kbih0LGUscixuKX1lPWUuY2hpbGR9cmV0dXJuIGU7Y2FzZSA1OnJldHVybiBldyhlKSx0PT09bnVsbCYmTWgoZSkscj1lLnR5cGUsaT1lLnBlbmRpbmdQcm9wcyxvPXQhPT1udWxsP3QubWVtb2l6ZWRQcm9wczpudWxsLGw9aS5jaGlsZHJlbixOaChyLGkpP2w9bnVsbDpvIT09bnVsbCYmTmgocixvKSYmKGUuZmxhZ3N8PTMyKSxDdyh0LGUpLGRuKHQsZSxsLG4pLGUuY2hpbGQ7Y2FzZSA2OnJldHVybiB0PT09bnVsbCYmTWgoZSksbnVsbDtjYXNlIDEzOnJldHVybiBrdyh0LGUsbik7Y2FzZSA0OnJldHVybiBEZyhlLGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLHI9ZS5wZW5kaW5nUHJvcHMsdD09PW51bGw/ZS5jaGlsZD1jcyhlLG51bGwscixuKTpkbih0LGUscixuKSxlLmNoaWxkO2Nhc2UgMTE6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSkscDAodCxlLHIsaSxuKTtjYXNlIDc6cmV0dXJuIGRuKHQsZSxlLnBlbmRpbmdQcm9wcyxuKSxlLmNoaWxkO2Nhc2UgODpyZXR1cm4gZG4odCxlLGUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLGUuY2hpbGQ7Y2FzZSAxMjpyZXR1cm4gZG4odCxlLGUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLG4pLGUuY2hpbGQ7Y2FzZSAxMDplOntpZihyPWUudHlwZS5fY29udGV4dCxpPWUucGVuZGluZ1Byb3BzLG89ZS5tZW1vaXplZFByb3BzLGw9aS52YWx1ZSxYZSh1ZCxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT1sLG8hPT1udWxsKWlmKGtyKG8udmFsdWUsbCkpe2lmKG8uY2hpbGRyZW49PT1pLmNoaWxkcmVuJiYhTm4uY3VycmVudCl7ZT1taSh0LGUsbik7YnJlYWsgZX19ZWxzZSBmb3Iobz1lLmNoaWxkLG8hPT1udWxsJiYoby5yZXR1cm49ZSk7byE9PW51bGw7KXt2YXIgcz1vLmRlcGVuZGVuY2llcztpZihzIT09bnVsbCl7bD1vLmNoaWxkO2Zvcih2YXIgYT1zLmZpcnN0Q29udGV4dDthIT09bnVsbDspe2lmKGEuY29udGV4dD09PXIpe2lmKG8udGFnPT09MSl7YT11aSgtMSxuJi1uKSxhLnRhZz0yO3ZhciBjPW8udXBkYXRlUXVldWU7aWYoYyE9PW51bGwpe2M9Yy5zaGFyZWQ7dmFyIHU9Yy5wZW5kaW5nO3U9PT1udWxsP2EubmV4dD1hOihhLm5leHQ9dS5uZXh0LHUubmV4dD1hKSxjLnBlbmRpbmc9YX19by5sYW5lc3w9bixhPW8uYWx0ZXJuYXRlLGEhPT1udWxsJiYoYS5sYW5lc3w9biksTGgoby5yZXR1cm4sbixlKSxzLmxhbmVzfD1uO2JyZWFrfWE9YS5uZXh0fX1lbHNlIGlmKG8udGFnPT09MTApbD1vLnR5cGU9PT1lLnR5cGU/bnVsbDpvLmNoaWxkO2Vsc2UgaWYoby50YWc9PT0xOCl7aWYobD1vLnJldHVybixsPT09bnVsbCl0aHJvdyBFcnJvcihXKDM0MSkpO2wubGFuZXN8PW4scz1sLmFsdGVybmF0ZSxzIT09bnVsbCYmKHMubGFuZXN8PW4pLExoKGwsbixlKSxsPW8uc2libGluZ31lbHNlIGw9by5jaGlsZDtpZihsIT09bnVsbClsLnJldHVybj1vO2Vsc2UgZm9yKGw9bztsIT09bnVsbDspe2lmKGw9PT1lKXtsPW51bGw7YnJlYWt9aWYobz1sLnNpYmxpbmcsbyE9PW51bGwpe28ucmV0dXJuPWwucmV0dXJuLGw9bzticmVha31sPWwucmV0dXJufW89bH1kbih0LGUsaS5jaGlsZHJlbixuKSxlPWUuY2hpbGR9cmV0dXJuIGU7Y2FzZSA5OnJldHVybiBpPWUudHlwZSxyPWUucGVuZGluZ1Byb3BzLmNoaWxkcmVuLFFsKGUsbiksaT1scihpKSxyPXIoaSksZS5mbGFnc3w9MSxkbih0LGUscixuKSxlLmNoaWxkO2Nhc2UgMTQ6cmV0dXJuIHI9ZS50eXBlLGk9Z3IocixlLnBlbmRpbmdQcm9wcyksaT1ncihyLnR5cGUsaSksaDAodCxlLHIsaSxuKTtjYXNlIDE1OnJldHVybiBTdyh0LGUsZS50eXBlLGUucGVuZGluZ1Byb3BzLG4pO2Nhc2UgMTc6cmV0dXJuIHI9ZS50eXBlLGk9ZS5wZW5kaW5nUHJvcHMsaT1lLmVsZW1lbnRUeXBlPT09cj9pOmdyKHIsaSksanUodCxlKSxlLnRhZz0xLFJuKHIpPyh0PSEwLHNkKGUpKTp0PSExLFFsKGUsbiksSl8oZSxyLGkpLEloKGUscixpLG4pLEZoKG51bGwsZSxyLCEwLHQsbik7Y2FzZSAxOTpyZXR1cm4gJHcodCxlLG4pO2Nhc2UgMjI6cmV0dXJuIEV3KHQsZSxuKX10aHJvdyBFcnJvcihXKDE1NixlLnRhZykpfTtmdW5jdGlvbiBXdyh0LGUpe3JldHVybiBtXyh0LGUpfWZ1bmN0aW9uIHpUKHQsZSxuLHIpe3RoaXMudGFnPXQsdGhpcy5rZXk9bix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPWUsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5zdWJ0cmVlRmxhZ3M9dGhpcy5mbGFncz0wLHRoaXMuZGVsZXRpb25zPW51bGwsdGhpcy5jaGlsZExhbmVzPXRoaXMubGFuZXM9MCx0aGlzLmFsdGVybmF0ZT1udWxsfWZ1bmN0aW9uIG5yKHQsZSxuLHIpe3JldHVybiBuZXcgelQodCxlLG4scil9ZnVuY3Rpb24gSmcodCl7cmV0dXJuIHQ9dC5wcm90b3R5cGUsISghdHx8IXQuaXNSZWFjdENvbXBvbmVudCl9ZnVuY3Rpb24gRlQodCl7aWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpcmV0dXJuIEpnKHQpPzE6MDtpZih0IT1udWxsKXtpZih0PXQuJCR0eXBlb2YsdD09PWdnKXJldHVybiAxMTtpZih0PT09dmcpcmV0dXJuIDE0fXJldHVybiAyfWZ1bmN0aW9uIHRvKHQsZSl7dmFyIG49dC5hbHRlcm5hdGU7cmV0dXJuIG49PT1udWxsPyhuPW5yKHQudGFnLGUsdC5rZXksdC5tb2RlKSxuLmVsZW1lbnRUeXBlPXQuZWxlbWVudFR5cGUsbi50eXBlPXQudHlwZSxuLnN0YXRlTm9kZT10LnN0YXRlTm9kZSxuLmFsdGVybmF0ZT10LHQuYWx0ZXJuYXRlPW4pOihuLnBlbmRpbmdQcm9wcz1lLG4udHlwZT10LnR5cGUsbi5mbGFncz0wLG4uc3VidHJlZUZsYWdzPTAsbi5kZWxldGlvbnM9bnVsbCksbi5mbGFncz10LmZsYWdzJjE0NjgwMDY0LG4uY2hpbGRMYW5lcz10LmNoaWxkTGFuZXMsbi5sYW5lcz10LmxhbmVzLG4uY2hpbGQ9dC5jaGlsZCxuLm1lbW9pemVkUHJvcHM9dC5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT10Lm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT10LnVwZGF0ZVF1ZXVlLGU9dC5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9ZT09PW51bGw/bnVsbDp7bGFuZXM6ZS5sYW5lcyxmaXJzdENvbnRleHQ6ZS5maXJzdENvbnRleHR9LG4uc2libGluZz10LnNpYmxpbmcsbi5pbmRleD10LmluZGV4LG4ucmVmPXQucmVmLG59ZnVuY3Rpb24gQnUodCxlLG4scixpLG8pe3ZhciBsPTI7aWYocj10LHR5cGVvZiB0PT0iZnVuY3Rpb24iKUpnKHQpJiYobD0xKTtlbHNlIGlmKHR5cGVvZiB0PT0ic3RyaW5nIilsPTU7ZWxzZSBlOnN3aXRjaCh0KXtjYXNlIFBsOnJldHVybiB6byhuLmNoaWxkcmVuLGksbyxlKTtjYXNlIG1nOmw9OCxpfD04O2JyZWFrO2Nhc2Ugc2g6cmV0dXJuIHQ9bnIoMTIsbixlLGl8MiksdC5lbGVtZW50VHlwZT1zaCx0LmxhbmVzPW8sdDtjYXNlIGFoOnJldHVybiB0PW5yKDEzLG4sZSxpKSx0LmVsZW1lbnRUeXBlPWFoLHQubGFuZXM9byx0O2Nhc2UgY2g6cmV0dXJuIHQ9bnIoMTksbixlLGkpLHQuZWxlbWVudFR5cGU9Y2gsdC5sYW5lcz1vLHQ7Y2FzZSBRMTpyZXR1cm4gX2YobixpLG8sZSk7ZGVmYXVsdDppZih0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsKXN3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIFgxOmw9MTA7YnJlYWsgZTtjYXNlIEoxOmw9OTticmVhayBlO2Nhc2UgZ2c6bD0xMTticmVhayBlO2Nhc2Ugdmc6bD0xNDticmVhayBlO2Nhc2UgSWk6bD0xNixyPW51bGw7YnJlYWsgZX10aHJvdyBFcnJvcihXKDEzMCx0PT1udWxsP3Q6dHlwZW9mIHQsIiIpKX1yZXR1cm4gZT1ucihsLG4sZSxpKSxlLmVsZW1lbnRUeXBlPXQsZS50eXBlPXIsZS5sYW5lcz1vLGV9ZnVuY3Rpb24gem8odCxlLG4scil7cmV0dXJuIHQ9bnIoNyx0LHIsZSksdC5sYW5lcz1uLHR9ZnVuY3Rpb24gX2YodCxlLG4scil7cmV0dXJuIHQ9bnIoMjIsdCxyLGUpLHQuZWxlbWVudFR5cGU9UTEsdC5sYW5lcz1uLHQuc3RhdGVOb2RlPXtpc0hpZGRlbjohMX0sdH1mdW5jdGlvbiBMcCh0LGUsbil7cmV0dXJuIHQ9bnIoNix0LG51bGwsZSksdC5sYW5lcz1uLHR9ZnVuY3Rpb24gRHAodCxlLG4pe3JldHVybiBlPW5yKDQsdC5jaGlsZHJlbiE9PW51bGw/dC5jaGlsZHJlbjpbXSx0LmtleSxlKSxlLmxhbmVzPW4sZS5zdGF0ZU5vZGU9e2NvbnRhaW5lckluZm86dC5jb250YWluZXJJbmZvLHBlbmRpbmdDaGlsZHJlbjpudWxsLGltcGxlbWVudGF0aW9uOnQuaW1wbGVtZW50YXRpb259LGV9ZnVuY3Rpb24gQlQodCxlLG4scixpKXt0aGlzLnRhZz1lLHRoaXMuY29udGFpbmVySW5mbz10LHRoaXMuZmluaXNoZWRXb3JrPXRoaXMucGluZ0NhY2hlPXRoaXMuY3VycmVudD10aGlzLnBlbmRpbmdDaGlsZHJlbj1udWxsLHRoaXMudGltZW91dEhhbmRsZT0tMSx0aGlzLmNhbGxiYWNrTm9kZT10aGlzLnBlbmRpbmdDb250ZXh0PXRoaXMuY29udGV4dD1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT0wLHRoaXMuZXZlbnRUaW1lcz1ncCgwKSx0aGlzLmV4cGlyYXRpb25UaW1lcz1ncCgtMSksdGhpcy5lbnRhbmdsZWRMYW5lcz10aGlzLmZpbmlzaGVkTGFuZXM9dGhpcy5tdXRhYmxlUmVhZExhbmVzPXRoaXMuZXhwaXJlZExhbmVzPXRoaXMucGluZ2VkTGFuZXM9dGhpcy5zdXNwZW5kZWRMYW5lcz10aGlzLnBlbmRpbmdMYW5lcz0wLHRoaXMuZW50YW5nbGVtZW50cz1ncCgwKSx0aGlzLmlkZW50aWZpZXJQcmVmaXg9cix0aGlzLm9uUmVjb3ZlcmFibGVFcnJvcj1pLHRoaXMubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YT1udWxsfWZ1bmN0aW9uIFFnKHQsZSxuLHIsaSxvLGwscyxhKXtyZXR1cm4gdD1uZXcgQlQodCxlLG4scyxhKSxlPT09MT8oZT0xLG89PT0hMCYmKGV8PTgpKTplPTAsbz1ucigzLG51bGwsbnVsbCxlKSx0LmN1cnJlbnQ9byxvLnN0YXRlTm9kZT10LG8ubWVtb2l6ZWRTdGF0ZT17ZWxlbWVudDpyLGlzRGVoeWRyYXRlZDpuLGNhY2hlOm51bGwsdHJhbnNpdGlvbnM6bnVsbCxwZW5kaW5nU3VzcGVuc2VCb3VuZGFyaWVzOm51bGx9LExnKG8pLHR9ZnVuY3Rpb24gVVQodCxlLG4pe3ZhciByPTM8YXJndW1lbnRzLmxlbmd0aCYmYXJndW1lbnRzWzNdIT09dm9pZCAwP2FyZ3VtZW50c1szXTpudWxsO3JldHVybnskJHR5cGVvZjpPbCxrZXk6cj09bnVsbD9udWxsOiIiK3IsY2hpbGRyZW46dCxjb250YWluZXJJbmZvOmUsaW1wbGVtZW50YXRpb246bn19ZnVuY3Rpb24gSHcodCl7aWYoIXQpcmV0dXJuIGxvO3Q9dC5fcmVhY3RJbnRlcm5hbHM7ZTp7aWYoYWwodCkhPT10fHx0LnRhZyE9PTEpdGhyb3cgRXJyb3IoVygxNzApKTt2YXIgZT10O2Rve3N3aXRjaChlLnRhZyl7Y2FzZSAzOmU9ZS5zdGF0ZU5vZGUuY29udGV4dDticmVhayBlO2Nhc2UgMTppZihSbihlLnR5cGUpKXtlPWUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIGV9fWU9ZS5yZXR1cm59d2hpbGUoZSE9PW51bGwpO3Rocm93IEVycm9yKFcoMTcxKSl9aWYodC50YWc9PT0xKXt2YXIgbj10LnR5cGU7aWYoUm4obikpcmV0dXJuIFdfKHQsbixlKX1yZXR1cm4gZX1mdW5jdGlvbiBWdyh0LGUsbixyLGksbyxsLHMsYSl7cmV0dXJuIHQ9UWcobixyLCEwLHQsaSxvLGwscyxhKSx0LmNvbnRleHQ9SHcobnVsbCksbj10LmN1cnJlbnQscj14bigpLGk9ZW8obiksbz11aShyLGkpLG8uY2FsbGJhY2s9ZT8/bnVsbCxRaShuLG8saSksdC5jdXJyZW50LmxhbmVzPWksQWModCxpLHIpLE9uKHQsciksdH1mdW5jdGlvbiB3Zih0LGUsbixyKXt2YXIgaT1lLmN1cnJlbnQsbz14bigpLGw9ZW8oaSk7cmV0dXJuIG49SHcobiksZS5jb250ZXh0PT09bnVsbD9lLmNvbnRleHQ9bjplLnBlbmRpbmdDb250ZXh0PW4sZT11aShvLGwpLGUucGF5bG9hZD17ZWxlbWVudDp0fSxyPXI9PT12b2lkIDA/bnVsbDpyLHIhPT1udWxsJiYoZS5jYWxsYmFjaz1yKSx0PVFpKGksZSxsKSx0IT09bnVsbCYmKEVyKHQsaSxsLG8pLEx1KHQsaSxsKSksbH1mdW5jdGlvbiBfZCh0KXtpZih0PXQuY3VycmVudCwhdC5jaGlsZClyZXR1cm4gbnVsbDtzd2l0Y2godC5jaGlsZC50YWcpe2Nhc2UgNTpyZXR1cm4gdC5jaGlsZC5zdGF0ZU5vZGU7ZGVmYXVsdDpyZXR1cm4gdC5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uIGswKHQsZSl7aWYodD10Lm1lbW9pemVkU3RhdGUsdCE9PW51bGwmJnQuZGVoeWRyYXRlZCE9PW51bGwpe3ZhciBuPXQucmV0cnlMYW5lO3QucmV0cnlMYW5lPW4hPT0wJiZuPGU/bjplfX1mdW5jdGlvbiBxZyh0LGUpe2swKHQsZSksKHQ9dC5hbHRlcm5hdGUpJiZrMCh0LGUpfWZ1bmN0aW9uIFdUKCl7cmV0dXJuIG51bGx9dmFyIEt3PXR5cGVvZiByZXBvcnRFcnJvcj09ImZ1bmN0aW9uIj9yZXBvcnRFcnJvcjpmdW5jdGlvbih0KXtjb25zb2xlLmVycm9yKHQpfTtmdW5jdGlvbiBldih0KXt0aGlzLl9pbnRlcm5hbFJvb3Q9dH1TZi5wcm90b3R5cGUucmVuZGVyPWV2LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faW50ZXJuYWxSb290O2lmKGU9PT1udWxsKXRocm93IEVycm9yKFcoNDA5KSk7d2YodCxlLG51bGwsbnVsbCl9O1NmLnByb3RvdHlwZS51bm1vdW50PWV2LnByb3RvdHlwZS51bm1vdW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290O2lmKHQhPT1udWxsKXt0aGlzLl9pbnRlcm5hbFJvb3Q9bnVsbDt2YXIgZT10LmNvbnRhaW5lckluZm87WG8oZnVuY3Rpb24oKXt3ZihudWxsLHQsbnVsbCxudWxsKX0pLGVbcGldPW51bGx9fTtmdW5jdGlvbiBTZih0KXt0aGlzLl9pbnRlcm5hbFJvb3Q9dH1TZi5wcm90b3R5cGUudW5zdGFibGVfc2NoZWR1bGVIeWRyYXRpb249ZnVuY3Rpb24odCl7aWYodCl7dmFyIGU9U18oKTt0PXtibG9ja2VkT246bnVsbCx0YXJnZXQ6dCxwcmlvcml0eTplfTtmb3IodmFyIG49MDtuPEZpLmxlbmd0aCYmZSE9PTAmJmU8Rmlbbl0ucHJpb3JpdHk7bisrKTtGaS5zcGxpY2UobiwwLHQpLG49PT0wJiZDXyh0KX19O2Z1bmN0aW9uIHR2KHQpe3JldHVybiEoIXR8fHQubm9kZVR5cGUhPT0xJiZ0Lm5vZGVUeXBlIT09OSYmdC5ub2RlVHlwZSE9PTExKX1mdW5jdGlvbiBFZih0KXtyZXR1cm4hKCF0fHx0Lm5vZGVUeXBlIT09MSYmdC5ub2RlVHlwZSE9PTkmJnQubm9kZVR5cGUhPT0xMSYmKHQubm9kZVR5cGUhPT04fHx0Lm5vZGVWYWx1ZSE9PSIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIikpfWZ1bmN0aW9uICQwKCl7fWZ1bmN0aW9uIEhUKHQsZSxuLHIsaSl7aWYoaSl7aWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe3ZhciBvPXI7cj1mdW5jdGlvbigpe3ZhciBjPV9kKGwpO28uY2FsbChjKX19dmFyIGw9VncoZSxyLHQsMCxudWxsLCExLCExLCIiLCQwKTtyZXR1cm4gdC5fcmVhY3RSb290Q29udGFpbmVyPWwsdFtwaV09bC5jdXJyZW50LEdhKHQubm9kZVR5cGU9PT04P3QucGFyZW50Tm9kZTp0KSxYbygpLGx9Zm9yKDtpPXQubGFzdENoaWxkOyl0LnJlbW92ZUNoaWxkKGkpO2lmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXt2YXIgcz1yO3I9ZnVuY3Rpb24oKXt2YXIgYz1fZChhKTtzLmNhbGwoYyl9fXZhciBhPVFnKHQsMCwhMSxudWxsLG51bGwsITEsITEsIiIsJDApO3JldHVybiB0Ll9yZWFjdFJvb3RDb250YWluZXI9YSx0W3BpXT1hLmN1cnJlbnQsR2EodC5ub2RlVHlwZT09PTg/dC5wYXJlbnROb2RlOnQpLFhvKGZ1bmN0aW9uKCl7d2YoZSxhLG4scil9KSxhfWZ1bmN0aW9uIENmKHQsZSxuLHIsaSl7dmFyIG89bi5fcmVhY3RSb290Q29udGFpbmVyO2lmKG8pe3ZhciBsPW87aWYodHlwZW9mIGk9PSJmdW5jdGlvbiIpe3ZhciBzPWk7aT1mdW5jdGlvbigpe3ZhciBhPV9kKGwpO3MuY2FsbChhKX19d2YoZSxsLHQsaSl9ZWxzZSBsPUhUKG4sZSx0LGkscik7cmV0dXJuIF9kKGwpfV9fPWZ1bmN0aW9uKHQpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnZhciBlPXQuc3RhdGVOb2RlO2lmKGUuY3VycmVudC5tZW1vaXplZFN0YXRlLmlzRGVoeWRyYXRlZCl7dmFyIG49ZmEoZS5wZW5kaW5nTGFuZXMpO24hPT0wJiYoX2coZSxufDEpLE9uKGUsQ3QoKSksIShNZSY2KSYmKGZzPUN0KCkrNTAwLHdvKCkpKX1icmVhaztjYXNlIDEzOlhvKGZ1bmN0aW9uKCl7dmFyIHI9aGkodCwxKTtpZihyIT09bnVsbCl7dmFyIGk9eG4oKTtFcihyLHQsMSxpKX19KSxxZyh0LDEpfX07d2c9ZnVuY3Rpb24odCl7aWYodC50YWc9PT0xMyl7dmFyIGU9aGkodCwxMzQyMTc3MjgpO2lmKGUhPT1udWxsKXt2YXIgbj14bigpO0VyKGUsdCwxMzQyMTc3Mjgsbil9cWcodCwxMzQyMTc3MjgpfX07d189ZnVuY3Rpb24odCl7aWYodC50YWc9PT0xMyl7dmFyIGU9ZW8odCksbj1oaSh0LGUpO2lmKG4hPT1udWxsKXt2YXIgcj14bigpO0VyKG4sdCxlLHIpfXFnKHQsZSl9fTtTXz1mdW5jdGlvbigpe3JldHVybiBVZX07RV89ZnVuY3Rpb24odCxlKXt2YXIgbj1VZTt0cnl7cmV0dXJuIFVlPXQsZSgpfWZpbmFsbHl7VWU9bn19O3hoPWZ1bmN0aW9uKHQsZSxuKXtzd2l0Y2goZSl7Y2FzZSJpbnB1dCI6aWYoZmgodCxuKSxlPW4ubmFtZSxuLnR5cGU9PT0icmFkaW8iJiZlIT1udWxsKXtmb3Iobj10O24ucGFyZW50Tm9kZTspbj1uLnBhcmVudE5vZGU7Zm9yKG49bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrZSkrJ11bdHlwZT0icmFkaW8iXScpLGU9MDtlPG4ubGVuZ3RoO2UrKyl7dmFyIHI9bltlXTtpZihyIT09dCYmci5mb3JtPT09dC5mb3JtKXt2YXIgaT1oZihyKTtpZighaSl0aHJvdyBFcnJvcihXKDkwKSk7ZV8ociksZmgocixpKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOm5fKHQsbik7YnJlYWs7Y2FzZSJzZWxlY3QiOmU9bi52YWx1ZSxlIT1udWxsJiZHbCh0LCEhbi5tdWx0aXBsZSxlLCExKX19O2NfPUdnO3VfPVhvO3ZhciBWVD17dXNpbmdDbGllbnRFbnRyeVBvaW50OiExLEV2ZW50czpbTGMsRGwsaGYsc18sYV8sR2ddfSxRcz17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6QW8sYnVuZGxlVHlwZTowLHZlcnNpb246IjE4LjIuMCIscmVuZGVyZXJQYWNrYWdlTmFtZToicmVhY3QtZG9tIn0sS1Q9e2J1bmRsZVR5cGU6UXMuYnVuZGxlVHlwZSx2ZXJzaW9uOlFzLnZlcnNpb24scmVuZGVyZXJQYWNrYWdlTmFtZTpRcy5yZW5kZXJlclBhY2thZ2VOYW1lLHJlbmRlcmVyQ29uZmlnOlFzLnJlbmRlcmVyQ29uZmlnLG92ZXJyaWRlSG9va1N0YXRlOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wczpudWxsLG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOm51bGwsb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6bnVsbCxzZXRFcnJvckhhbmRsZXI6bnVsbCxzZXRTdXNwZW5zZUhhbmRsZXI6bnVsbCxzY2hlZHVsZVVwZGF0ZTpudWxsLGN1cnJlbnREaXNwYXRjaGVyUmVmOl9pLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9cF8odCksdD09PW51bGw/bnVsbDp0LnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6UXMuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2V8fFdULGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGwscmVjb25jaWxlclZlcnNpb246IjE4LjIuMC1uZXh0LTllM2I3NzJiOC0yMDIyMDYwOCJ9O2lmKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX188InUiKXt2YXIgcHU9X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO2lmKCFwdS5pc0Rpc2FibGVkJiZwdS5zdXBwb3J0c0ZpYmVyKXRyeXt1Zj1wdS5pbmplY3QoS1QpLEZyPXB1fWNhdGNoe319S24uX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ9VlQ7S24uY3JlYXRlUG9ydGFsPWZ1bmN0aW9uKHQsZSl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOm51bGw7aWYoIXR2KGUpKXRocm93IEVycm9yKFcoMjAwKSk7cmV0dXJuIFVUKHQsZSxudWxsLG4pfTtLbi5jcmVhdGVSb290PWZ1bmN0aW9uKHQsZSl7aWYoIXR2KHQpKXRocm93IEVycm9yKFcoMjk5KSk7dmFyIG49ITEscj0iIixpPUt3O3JldHVybiBlIT1udWxsJiYoZS51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihuPSEwKSxlLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihyPWUuaWRlbnRpZmllclByZWZpeCksZS5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihpPWUub25SZWNvdmVyYWJsZUVycm9yKSksZT1RZyh0LDEsITEsbnVsbCxudWxsLG4sITEscixpKSx0W3BpXT1lLmN1cnJlbnQsR2EodC5ub2RlVHlwZT09PTg/dC5wYXJlbnROb2RlOnQpLG5ldyBldihlKX07S24uZmluZERPTU5vZGU9ZnVuY3Rpb24odCl7aWYodD09bnVsbClyZXR1cm4gbnVsbDtpZih0Lm5vZGVUeXBlPT09MSlyZXR1cm4gdDt2YXIgZT10Ll9yZWFjdEludGVybmFscztpZihlPT09dm9pZCAwKXRocm93IHR5cGVvZiB0LnJlbmRlcj09ImZ1bmN0aW9uIj9FcnJvcihXKDE4OCkpOih0PU9iamVjdC5rZXlzKHQpLmpvaW4oIiwiKSxFcnJvcihXKDI2OCx0KSkpO3JldHVybiB0PXBfKGUpLHQ9dD09PW51bGw/bnVsbDp0LnN0YXRlTm9kZSx0fTtLbi5mbHVzaFN5bmM9ZnVuY3Rpb24odCl7cmV0dXJuIFhvKHQpfTtLbi5oeWRyYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZighRWYoZSkpdGhyb3cgRXJyb3IoVygyMDApKTtyZXR1cm4gQ2YobnVsbCx0LGUsITAsbil9O0tuLmh5ZHJhdGVSb290PWZ1bmN0aW9uKHQsZSxuKXtpZighdHYodCkpdGhyb3cgRXJyb3IoVyg0MDUpKTt2YXIgcj1uIT1udWxsJiZuLmh5ZHJhdGVkU291cmNlc3x8bnVsbCxpPSExLG89IiIsbD1LdztpZihuIT1udWxsJiYobi51bnN0YWJsZV9zdHJpY3RNb2RlPT09ITAmJihpPSEwKSxuLmlkZW50aWZpZXJQcmVmaXghPT12b2lkIDAmJihvPW4uaWRlbnRpZmllclByZWZpeCksbi5vblJlY292ZXJhYmxlRXJyb3IhPT12b2lkIDAmJihsPW4ub25SZWNvdmVyYWJsZUVycm9yKSksZT1WdyhlLG51bGwsdCwxLG4/P251bGwsaSwhMSxvLGwpLHRbcGldPWUuY3VycmVudCxHYSh0KSxyKWZvcih0PTA7dDxyLmxlbmd0aDt0Kyspbj1yW3RdLGk9bi5fZ2V0VmVyc2lvbixpPWkobi5fc291cmNlKSxlLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE9PW51bGw/ZS5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhPVtuLGldOmUubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG4saSk7cmV0dXJuIG5ldyBTZihlKX07S24ucmVuZGVyPWZ1bmN0aW9uKHQsZSxuKXtpZighRWYoZSkpdGhyb3cgRXJyb3IoVygyMDApKTtyZXR1cm4gQ2YobnVsbCx0LGUsITEsbil9O0tuLnVubW91bnRDb21wb25lbnRBdE5vZGU9ZnVuY3Rpb24odCl7aWYoIUVmKHQpKXRocm93IEVycm9yKFcoNDApKTtyZXR1cm4gdC5fcmVhY3RSb290Q29udGFpbmVyPyhYbyhmdW5jdGlvbigpe0NmKG51bGwsbnVsbCx0LCExLGZ1bmN0aW9uKCl7dC5fcmVhY3RSb290Q29udGFpbmVyPW51bGwsdFtwaV09bnVsbH0pfSksITApOiExfTtLbi51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcz1HZztLbi51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcj1mdW5jdGlvbih0LGUsbixyKXtpZighRWYobikpdGhyb3cgRXJyb3IoVygyMDApKTtpZih0PT1udWxsfHx0Ll9yZWFjdEludGVybmFscz09PXZvaWQgMCl0aHJvdyBFcnJvcihXKDM4KSk7cmV0dXJuIENmKHQsZSxuLCExLHIpfTtLbi52ZXJzaW9uPSIxOC4yLjAtbmV4dC05ZTNiNzcyYjgtMjAyMjA2MDgiO2Z1bmN0aW9uIFp3KCl7aWYoISh0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fPiJ1Inx8dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSE9ImZ1bmN0aW9uIikpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShadyl9Y2F0Y2godCl7Y29uc29sZS5lcnJvcih0KX19WncoKSxWMS5leHBvcnRzPUtuO3ZhciBZcj1WMS5leHBvcnRzO2NvbnN0IEd3PU9jKFlyKSxaVD1MMSh7X19wcm90b19fOm51bGwsZGVmYXVsdDpHd30sW1lyXSk7dmFyIFQwPVlyO29oLmNyZWF0ZVJvb3Q9VDAuY3JlYXRlUm9vdCxvaC5oeWRyYXRlUm9vdD1UMC5oeWRyYXRlUm9vdDt2YXIgWXc9e2V4cG9ydHM6e319LGJmPXt9Oy8qKgogKiBAbGljZW5zZSBSZWFjdAogKiByZWFjdC1qc3gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIEdUPWgsWVQ9U3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpLFhUPVN5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50IiksSlQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxRVD1HVC5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRC5SZWFjdEN1cnJlbnRPd25lcixxVD17a2V5OiEwLHJlZjohMCxfX3NlbGY6ITAsX19zb3VyY2U6ITB9O2Z1bmN0aW9uIFh3KHQsZSxuKXt2YXIgcixpPXt9LG89bnVsbCxsPW51bGw7biE9PXZvaWQgMCYmKG89IiIrbiksZS5rZXkhPT12b2lkIDAmJihvPSIiK2Uua2V5KSxlLnJlZiE9PXZvaWQgMCYmKGw9ZS5yZWYpO2ZvcihyIGluIGUpSlQuY2FsbChlLHIpJiYhcVQuaGFzT3duUHJvcGVydHkocikmJihpW3JdPWVbcl0pO2lmKHQmJnQuZGVmYXVsdFByb3BzKWZvcihyIGluIGU9dC5kZWZhdWx0UHJvcHMsZSlpW3JdPT09dm9pZCAwJiYoaVtyXT1lW3JdKTtyZXR1cm57JCR0eXBlb2Y6WVQsdHlwZTp0LGtleTpvLHJlZjpsLHByb3BzOmksX293bmVyOlFULmN1cnJlbnR9fWJmLkZyYWdtZW50PVhUO2JmLmpzeD1YdztiZi5qc3hzPVh3O1l3LmV4cG9ydHM9YmY7dmFyIHk9WXcuZXhwb3J0cztmdW5jdGlvbiBRaCh0LGUpeyhlPT1udWxsfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIG52KHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBRaCh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gUWgodCxlKX19ZnVuY3Rpb24ga2YodCxlKXt2YXIgbj10eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYoIW4pe2lmKEFycmF5LmlzQXJyYXkodCl8fChuPW52KHQpKXx8ZSYmdCYmdHlwZW9mIHQubGVuZ3RoPT0ibnVtYmVyIil7biYmKHQ9bik7dmFyIHI9MCxpPWZ1bmN0aW9uKCl7fTtyZXR1cm57czppLG46ZnVuY3Rpb24oKXtyZXR1cm4gcj49dC5sZW5ndGg/e2RvbmU6ITB9Ontkb25lOiExLHZhbHVlOnRbcisrXX19LGU6ZnVuY3Rpb24oYSl7dGhyb3cgYX0sZjppfX10aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX12YXIgbz0hMCxsPSExLHM7cmV0dXJue3M6ZnVuY3Rpb24oKXtuPW4uY2FsbCh0KX0sbjpmdW5jdGlvbigpe3ZhciBhPW4ubmV4dCgpO3JldHVybiBvPWEuZG9uZSxhfSxlOmZ1bmN0aW9uKGEpe2w9ITAscz1hfSxmOmZ1bmN0aW9uKCl7dHJ5eyFvJiZuLnJldHVybiE9bnVsbCYmbi5yZXR1cm4oKX1maW5hbGx5e2lmKGwpdGhyb3cgc319fX1mdW5jdGlvbiBKdyh0KXtyZXR1cm4gdC5sZW5ndGg+MH12YXIgSWM9T2JqZWN0LmZyZWV6ZSh7a2luZDoib2siLHZhbHVlOnZvaWQgMH0pO2Z1bmN0aW9uIGpjKHQpe3JldHVybiB0PT09dm9pZCAwP0ljOntraW5kOiJvayIsdmFsdWU6dH19ZnVuY3Rpb24gVXIodCl7cmV0dXJue2tpbmQ6ImVyciIsZXJyb3I6dH19ZnVuY3Rpb24ga3ModCl7cmV0dXJuIHQ9PT1JY3x8dC5raW5kPT09Im9rIn1mdW5jdGlvbiBydih0KXtyZXR1cm4gdCE9PUljJiZ0LmtpbmQ9PT0iZXJyIn1mdW5jdGlvbiBRdyh0KXt2YXIgZT1bXSxuPVtdLHI9a2YodCksaTt0cnl7Zm9yKHIucygpOyEoaT1yLm4oKSkuZG9uZTspe3ZhciBvPWkudmFsdWU7a3Mobyk/ZS5wdXNoKG8udmFsdWUpOm4ucHVzaChvLmVycm9yKX19Y2F0Y2gobCl7ci5lKGwpfWZpbmFsbHl7ci5mKCl9cmV0dXJuIEp3KG4pP1VyKG4pOmpjKGUpfWZ1bmN0aW9uIGVOKHQpe3JldHVybiBRdyh0KX1mdW5jdGlvbiB0Tih0KXt2YXIgZT1bXSxuPWtmKHQpLHI7dHJ5e2ZvcihuLnMoKTshKHI9bi5uKCkpLmRvbmU7KXt2YXIgaT1yLnZhbHVlO3J2KGkpJiZlLnB1c2goaS5lcnJvcil9fWNhdGNoKG8pe24uZShvKX1maW5hbGx5e24uZigpfXJldHVybiBKdyhlKT9VcihlKTpJY31mdW5jdGlvbiBuTih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIHI9amMoZSksaT0wO2k8bi5sZW5ndGgmJmtzKHIpOysraSlyPXQoci52YWx1ZSxuW2ldLGkpO3JldHVybiByfX1mdW5jdGlvbiByTih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGtzKGUpP2pjKHQoZS52YWx1ZSkpOmV9fWZ1bmN0aW9uIGlOKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4ga3MoZSk/dChlLnZhbHVlKTplfX1mdW5jdGlvbiBvTih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHJ2KGUpP1VyKHQoZS5lcnJvcikpOmV9fWZ1bmN0aW9uIGxOKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KG4pP2pjKG4pOlVyKGUobikpfX12YXIgc049ZnVuY3Rpb24oZSxuKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGtzKHIpP2Uoci52YWx1ZSk/cjpVcihuKHIudmFsdWUpKTpyfX0sRm89T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsdm9pZE9rOkljLG9rOmpjLGVycjpVcixpc09rOmtzLGlzRXJyOnJ2LGFsbFQ6UXcsYWxsOmVOLGFsbFY6dE4sZmxhdE1hcFJlZHVjZTpuTixtYXA6ck4sZmxhdE1hcDppTixtYXBFcnI6b04sZnJvbVByZWRpY2F0ZTpsTixmaWx0ZXJPckVsc2U6c059KTtmdW5jdGlvbiBhTih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBRaCh0KX1mdW5jdGlvbiBjTih0KXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmdFtTeW1ib2wuaXRlcmF0b3JdIT1udWxsfHx0WyJAQGl0ZXJhdG9yIl0hPW51bGwpcmV0dXJuIEFycmF5LmZyb20odCl9ZnVuY3Rpb24gdU4oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfWZ1bmN0aW9uIHF3KHQpe3JldHVybiBhTih0KXx8Y04odCl8fG52KHQpfHx1TigpfWZ1bmN0aW9uIHhlKHQpeyJAYmFiZWwvaGVscGVycyAtIHR5cGVvZiI7cmV0dXJuIHhlPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2wuaXRlcmF0b3I9PSJzeW1ib2wiP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJnR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx4ZSh0KX1mdW5jdGlvbiBkTih0LGUpe2lmKHR5cGVvZiB0IT0ib2JqZWN0Inx8dD09PW51bGwpcmV0dXJuIHQ7dmFyIG49dFtTeW1ib2wudG9QcmltaXRpdmVdO2lmKG4hPT12b2lkIDApe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYodHlwZW9mIHIhPSJvYmplY3QiKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKGU9PT0ic3RyaW5nIj9TdHJpbmc6TnVtYmVyKSh0KX1mdW5jdGlvbiBlUyh0KXt2YXIgZT1kTih0LCJzdHJpbmciKTtyZXR1cm4gdHlwZW9mIGU9PSJzeW1ib2wiP2U6U3RyaW5nKGUpfWZ1bmN0aW9uIG1lKHQsZSxuKXtyZXR1cm4gZT1lUyhlKSxlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09bix0fWZ1bmN0aW9uIE4wKHQsZSl7dmFyIG49T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtlJiYocj1yLmZpbHRlcihmdW5jdGlvbihpKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGkpLmVudW1lcmFibGV9KSksbi5wdXNoLmFwcGx5KG4scil9cmV0dXJuIG59ZnVuY3Rpb24gcHModCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdIT1udWxsP2FyZ3VtZW50c1tlXTp7fTtlJTI/TjAoT2JqZWN0KG4pLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe21lKHQscixuW3JdKX0pOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobikpOk4wKE9iamVjdChuKSkuZm9yRWFjaChmdW5jdGlvbihyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixyKSl9KX1yZXR1cm4gdH1mdW5jdGlvbiBmTih0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIHBOKHQsZSl7dmFyIG49dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixpLG8sbCxzPVtdLGE9ITAsYz0hMTt0cnl7aWYobz0obj1uLmNhbGwodCkpLm5leHQsZT09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2E9ITF9ZWxzZSBmb3IoOyEoYT0ocj1vLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09ZSk7YT0hMCk7fWNhdGNoKHUpe2M9ITAsaT11fWZpbmFsbHl7dHJ5e2lmKCFhJiZuLnJldHVybiE9bnVsbCYmKGw9bi5yZXR1cm4oKSxPYmplY3QobCkhPT1sKSlyZXR1cm59ZmluYWxseXtpZihjKXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBoTigpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuCkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5gKX1mdW5jdGlvbiBubyh0LGUpe3JldHVybiBmTih0KXx8cE4odCxlKXx8bnYodCxlKXx8aE4oKX1mdW5jdGlvbiBHbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIFIwKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlUyhyLmtleSkscil9fWZ1bmN0aW9uIFluKHQsZSxuKXtyZXR1cm4gZSYmUjAodC5wcm90b3R5cGUsZSksbiYmUjAodCxuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSx0fWZ1bmN0aW9uIHFoKHQsZSl7cmV0dXJuIHFoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHIsaSl7cmV0dXJuIHIuX19wcm90b19fPWkscn0scWgodCxlKX1mdW5jdGlvbiB3aSh0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iJiZlIT09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxlJiZxaCh0LGUpfWZ1bmN0aW9uIHdkKHQpe3JldHVybiB3ZD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuKXtyZXR1cm4gbi5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihuKX0sd2QodCl9ZnVuY3Rpb24gbU4oKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZih0eXBlb2YgUHJveHk9PSJmdW5jdGlvbiIpcmV0dXJuITA7dHJ5e3JldHVybiBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gdFModCl7aWYodD09PXZvaWQgMCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiB0fWZ1bmN0aW9uIGdOKHQsZSl7aWYoZSYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKXJldHVybiBlO2lmKGUhPT12b2lkIDApdGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdFModCl9ZnVuY3Rpb24gU2kodCl7dmFyIGU9bU4oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj13ZCh0KSxpO2lmKGUpe3ZhciBvPXdkKHRoaXMpLmNvbnN0cnVjdG9yO2k9UmVmbGVjdC5jb25zdHJ1Y3Qocixhcmd1bWVudHMsbyl9ZWxzZSBpPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBnTih0aGlzLGkpfX12YXIgRWk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7R24odGhpcyx0KX1yZXR1cm4gWW4odCxbe2tleToiYXBwZW5kVmFsaWRhdGlvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihuLHIsaSxvKXtyZXR1cm4gbj8obltyXT9uW3JdLnB1c2goe21lc3NhZ2U6aSx2YWx1ZTpvfSk6bltyXT1be21lc3NhZ2U6aSx2YWx1ZTpvfV0sbik6bWUoe30scixbe21lc3NhZ2U6aSx2YWx1ZTpvfV0pfX1dKSx0fSgpLFV1PVN5bWJvbCgiR2V0U2NoZW1hIiksZ249U3ltYm9sKCJQYXRoIiksT3Q9U3ltYm9sKCJHZXRTb3VyY2UiKTtmdW5jdGlvbiB2Tih0KXtyZXR1cm4gdFtVdV19dmFyIGl2PVluKGZ1bmN0aW9uIHQoZSl7R24odGhpcyx0KSx0aGlzLnNwYW49ZX0pLHlOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyLGkpe3ZhciBvO3JldHVybiBHbih0aGlzLG4pLG89ZS5jYWxsKHRoaXMsaSksbWUodFMobyksInR5cGUiLCJTeW0iKSxvLnZhbHVlPXIsb31yZXR1cm4gWW4obixbe2tleToidHJhbnNwaWxlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfX1dKSxufShpdik7bmV3IHlOKCIoKSIpO3ZhciBubj0iX3R5cGUiLFBuPSJfcmVmIjtmdW5jdGlvbiBuUyh0KXt2YXIgZSxuO2lmKCF0W1BuXS5zdGFydHNXaXRoKCIvcHVibGljIikpe3ZhciByLGk7cmV0dXJue3VybDp0W1BuXSsoKHI9dC5tZXRhZGF0YSkhPT1udWxsJiZyIT09dm9pZCAwJiZyLnNoYTI1Nj8iP3NoYTI1Nj0iLmNvbmNhdCgoaT10Lm1ldGFkYXRhKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuc2hhMjU2KToiIiksbWV0YWRhdGE6dC5tZXRhZGF0YX19cmV0dXJue3VybDp0W1BuXS5zbGljZSg3KSsoKGU9dC5tZXRhZGF0YSkhPT1udWxsJiZlIT09dm9pZCAwJiZlLnNoYTI1Nj8iP3NoYTI1Nj0iLmNvbmNhdCgobj10Lm1ldGFkYXRhKT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uc2hhMjU2KToiIiksbWV0YWRhdGE6dC5tZXRhZGF0YX19ZnVuY3Rpb24gclModCl7cmV0dXJuIHhlKHQpPT09Im9iamVjdCImJnQhPT1udWxsJiZ0IT09dm9pZCAwJiYoInZhbCJpbiB0fHwidmFsUGF0aCJpbiB0KX1mdW5jdGlvbiB4Tih0KXtyZXR1cm4geGUodCk9PT0ib2JqZWN0IiYmdCE9PW51bGwmJnQhPT12b2lkIDAmJmduIGluIHQmJiJ2YWwiaW4gdH1mdW5jdGlvbiBfTih0KXtyZXR1cm4gdFtnbl19ZnVuY3Rpb24gd04odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ZnVuY3Rpb24gTzAodCxlLG4pe3JldHVybiBlP010KHQoTXQoZSxuKSkpOk10KGUsbil9ZnVuY3Rpb24gcm8odCl7cmV0dXJuIHhlKHQpPT09Im9iamVjdCImJnQhPT1udWxsJiYoT3QgaW4gdHx8Z24gaW4gdCl9ZnVuY3Rpb24gTXQodCxlLG4pe2lmKHhlKHQpPT09Im9iamVjdCIpe2lmKHJvKHQpKXJldHVybiB0O2lmKHJTKHQpKXJldHVybiBNdCh0LnZhbCx0LnZhbFBhdGgpfWlmKHQmJnRbUG5dJiZ0W25uXT09PSJmaWxlIil7dmFyIHI9dFtQbl07aWYodHlwZW9mIHIhPSJzdHJpbmciKXRocm93IEVycm9yKCJJbnZhbGlkIGZpbGUgcmVmOiAiK3IpO3JldHVybiBNdChuUyh0KSxlLG4pfXN3aXRjaCh4ZSh0KSl7Y2FzZSJmdW5jdGlvbiI6Y2FzZSJzeW1ib2wiOnRocm93IEVycm9yKCJJbnZhbGlkIHNlbGVjdG9yIHR5cGU6ICIuY29uY2F0KHhlKHQpLCI6ICIpLmNvbmNhdCh0KSk7Y2FzZSJvYmplY3QiOmlmKHQhPT1udWxsKXJldHVybiBuZXcgUHJveHkodCx7aGFzOmZ1bmN0aW9uKG8sbCl7cmV0dXJuIGw9PT1PdHx8bD09PWdufHxsPT09ImFuZFRoZW4ifHxsPT09VXU/ITA6bCBpbiBvfSxnZXQ6ZnVuY3Rpb24obyxsKXtpZihsPT09T3QpcmV0dXJuIHQ7aWYobD09PWduKXJldHVybiBlO2lmKGw9PT1VdSlyZXR1cm4gbjtpZihsPT09ImFuZFRoZW4iKXJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gTzAoYSx0LGUpfTtpZihBcnJheS5pc0FycmF5KG8pKXtpZihsPT09ImZpbHRlciIpcmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBjPW8ubWFwKGZ1bmN0aW9uKHUsZCl7cmV0dXJuIE10KHUscnIoZSxkKSxuPT1udWxsP3ZvaWQgMDpuLml0ZW0pfSkuZmlsdGVyKGZ1bmN0aW9uKHUpe3JldHVybiBhJiZhIGluc3RhbmNlb2YgRWk/YS5hc3NlcnQoUDAodSkpOlAwKGEodSkpfSk7cmV0dXJuIE10KGMsZSxuKX07aWYobD09PSJtYXAiKXJldHVybiBmdW5jdGlvbihhKXt2YXIgYz1vLm1hcChmdW5jdGlvbih1LGQpe3ZhciBmPWEoTXQodSxycihlLGQpLG49PW51bGw/dm9pZCAwOm4uaXRlbSksTXQoZCkpO3JldHVybiBybyhmKT9mOk10KGYpfSk7cmV0dXJuIE10KGMsZSxuKX19aWYoQXJyYXkuaXNBcnJheShvKSYmbD09PSJsZW5ndGgiKXJldHVybiBNdChvLmxlbmd0aCk7dmFyIHM9UmVmbGVjdC5nZXQobyxsKTtyZXR1cm4gd04odCxsKT9OdW1iZXIuaXNOYU4oTnVtYmVyKGwpKT9NdChzLHJyKGUsbCksbj09bnVsbD92b2lkIDA6bi5pdGVtc1tsXSk6TXQocyxycihlLE51bWJlcihsKSksbj09bnVsbD92b2lkIDA6bi5pdGVtKTpzfX0pO2RlZmF1bHQ6cmV0dXJuIG1lKG1lKG1lKHtlcTpmdW5jdGlvbihvKXt2YXIgbD1vO2lmKHJvKG8pJiYobD1vW090XSxsIGluc3RhbmNlb2YgaXYpKXRocm93IEVycm9yKCJUT0RPOiBDYW5ub3QgZXZhbHVhdGUgZXF1YWxpdHkgd2l0aCBhbiBFeHByIik7cmV0dXJuIE10KHQ9PT1sLHZvaWQgMCl9LGFuZFRoZW46ZnVuY3Rpb24obyl7cmV0dXJuIE8wKG8sdD09PXZvaWQgMD9udWxsOnQsZSl9fSxPdCx0PT09dm9pZCAwP251bGw6dCksZ24sZSksVXUsbil9fWZ1bmN0aW9uIHJyKHQsZSl7aWYoeGUoZSk9PT0ic3ltYm9sIil0aHJvdyBFcnJvcigiQ2Fubm90IGNyZWF0ZSB2YWwgcGF0aCBvZiBhcnJheSBpdGVtIHdpdGggc3ltYm9sIHByb3A6ICIuY29uY2F0KGUudG9TdHJpbmcoKSkpO3JldHVybiB0JiYiIi5jb25jYXQodCwiLiIpLmNvbmNhdChKU09OLnN0cmluZ2lmeShlKSl9ZnVuY3Rpb24gUDAodCl7aWYoeGUodCk9PT0ib2JqZWN0IiYmKE90IGluIHR8fGduIGluIHQpKXt2YXIgZT10W090XTtyZXR1cm4gZX1yZXR1cm4gdH12YXIgaVM9ZnVuY3Rpb24odCl7d2kobix0KTt2YXIgZT1TaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBHbih0aGlzLG4pLGk9ZS5jYWxsKHRoaXMpLGkuaXRlbXM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Ij9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTpBcnJheS5pc0FycmF5KG8pP21lKHt9LGksW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPW5vKGEsMiksdT1jWzBdLGQ9Y1sxXSxmPXJyKGksdSk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLGksIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KHUpLG8pO2Vsc2V7dmFyIHA9ZC52YWxpZGF0ZShmLG9bdV0pO3AmJnM/cz1wcyhwcyh7fSxwKSxzKTpwJiYocz1wKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24oaSl7aWYodGhpcy5vcHQmJmk9PW51bGwpcmV0dXJuITA7aWYoIWkpcmV0dXJuITE7Zm9yKHZhciBvPTAsbD1PYmplY3QuZW50cmllcyh0aGlzLml0ZW1zKTtvPGwubGVuZ3RoO28rKyl7dmFyIHM9bm8obFtvXSwyKSxhPXNbMF0sYz1zWzFdO2lmKCFjLmFzc2VydChpW2FdKSlyZXR1cm4hMX1yZXR1cm4geGUoaSk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoaSl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtcywhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6Im9iamVjdCIsaXRlbXM6T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHRoaXMuaXRlbXMpLm1hcChmdW5jdGlvbihpKXt2YXIgbz1ubyhpLDIpLGw9b1swXSxzPW9bMV07cmV0dXJuW2wscy5zZXJpYWxpemUoKV19KSksb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLFNOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLml0ZW09cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Inx8IUFycmF5LmlzQXJyYXkobyk/bWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdhcnJheScsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTooby5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7dmFyIHU9cnIoaSxjKTtpZighdSlzPWwuYXBwZW5kVmFsaWRhdGlvbkVycm9yKHMsaSwiSW50ZXJuYWwgZXJyb3I6IGNvdWxkIG5vdCBjcmVhdGUgcGF0aCBhdCAiLmNvbmNhdCghaSYmdHlwZW9mIGk9PSJzdHJpbmciPyI8ZW1wdHkgc3RyaW5nPiI6aSwiIGF0IGluZGV4ICIpLmNvbmNhdChjKSxvKTtlbHNle3ZhciBkPWwuaXRlbS52YWxpZGF0ZSh1LGEpO2QmJnM/cz1wcyhwcyh7fSxkKSxzKTpkJiYocz1kKX19KSxzKX19LHtrZXk6ImFzc2VydCIsdmFsdWU6ZnVuY3Rpb24oaSl7aWYodGhpcy5vcHQmJmk9PW51bGwpcmV0dXJuITA7aWYoIWkpcmV0dXJuITE7dmFyIG89a2YoaSksbDt0cnl7Zm9yKG8ucygpOyEobD1vLm4oKSkuZG9uZTspe3ZhciBzPWwudmFsdWU7aWYoIXRoaXMuaXRlbS5hc3NlcnQocykpcmV0dXJuITF9fWNhdGNoKGEpe28uZShhKX1maW5hbGx5e28uZigpfXJldHVybiB4ZShpKT09PSJvYmplY3QiJiZBcnJheS5pc0FycmF5KGkpfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuaXRlbSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImFycmF5IixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufShFaSksQTA9ZnVuY3Rpb24odCl7d2kobix0KTt2YXIgZT1TaShuKTtmdW5jdGlvbiBuKHIpe3ZhciBpLG89YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO3JldHVybiBHbih0aGlzLG4pLGk9ZS5jYWxsKHRoaXMpLGkudmFsdWU9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTp0eXBlb2YgbyE9InN0cmluZyI/bWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdzdHJpbmcnLCBnb3QgJyIuY29uY2F0KHhlKG8pLCInIiksdmFsdWU6b31dKTpvIT09dGhpcy52YWx1ZT9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgbGl0ZXJhbCAnIi5jb25jYXQodGhpcy52YWx1ZSwiJywgZ290ICciKS5jb25jYXQobywiJyIpLHZhbHVlOm99XSk6ITF9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMDp0eXBlb2YgaT09InN0cmluZyJ9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy52YWx1ZSwhMCl9fSx7a2V5OiJzZXJpYWxpemUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImxpdGVyYWwiLHZhbHVlOnRoaXMudmFsdWUsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLEVOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyLGkpe3ZhciBvLGw9YXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0hPT12b2lkIDA/YXJndW1lbnRzWzJdOiExO3JldHVybiBHbih0aGlzLG4pLG89ZS5jYWxsKHRoaXMpLG8ua2V5PXIsby5pdGVtcz1pLG8ub3B0PWwsb31yZXR1cm4gWW4obixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGksbyl7dmFyIGw9byxzPSExO2lmKHRoaXMub3B0JiZsPT1udWxsKXJldHVybiExO2lmKCF0aGlzLmtleSlyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6Ik1pc3NpbmcgcmVxdWlyZWQgZmlyc3QgYXJndW1lbnQgaW4gdW5pb24ifV0pO3ZhciBhPXRoaXMua2V5O2lmKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiQSB1bmlvbiBzY2hlbWEgbXVzdCB0YWtlIG1vcmUgdGhhbiAxIHNjaGVtYSBhcmd1bWVudHMiLGZhdGFsOiEwfV0pO2lmKHR5cGVvZiBhPT0ic3RyaW5nIil7aWYodGhpcy5pdGVtcy5zb21lKGZ1bmN0aW9uKEEpe3JldHVybiEoQSBpbnN0YW5jZW9mIGlTKX0pKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiS2V5IGlzIGEgc3RyaW5nLCBzbyBhbGwgc2NoZW1hIGl0ZW1zIG11c3QgYmUgb2JqZWN0cyIsZmF0YWw6ITB9XSk7dmFyIGM9dGhpcy5pdGVtcyx1PWMubWFwKGZ1bmN0aW9uKEEpe3JldHVybiBBLnNlcmlhbGl6ZSgpfSksZD11LmZpbHRlcihmdW5jdGlvbihBKXtyZXR1cm4gQS50eXBlIT09Im9iamVjdCJ8fEEuaXRlbXNbYV0udHlwZSE9PSJsaXRlcmFsIn0pO2lmKGQubGVuZ3RoPjApcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJBbGwgc2NoZW1hIGl0ZW1zIG11c3QgYmUgb2JqZWN0cyB3aXRoIGEga2V5OiAiLmNvbmNhdChhLCIgdGhhdCBpcyBhIGxpdGVyYWwgc2NoZW1hLiBGb3VuZDogIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KGQsbnVsbCwyKSksZmF0YWw6ITB9XSk7dmFyIGY9dSxwPWYuZmlsdGVyKGZ1bmN0aW9uKEEpe3JldHVybiBBLml0ZW1zW2FdLm9wdH0pO2lmKHAubGVuZ3RoPjEpcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJTY2hlbWEgY2Fubm90IGhhdmUgYW4gb3B0aW9uYWwga2V5czogIi5jb25jYXQoYSksZmF0YWw6ITB9XSk7aWYoeGUobCkhPT0ib2JqZWN0IilyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkIGFuIG9iamVjdCJ9XSk7dmFyIGc9bDtpZihnW2FdPT09dm9pZCAwKXJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiTWlzc2luZyByZXF1aXJlZCBrZXk6ICIuY29uY2F0KGEpfV0pO3ZhciBtPVtdLHc9a2YoZiksdjt0cnl7Zm9yKHcucygpOyEodj13Lm4oKSkuZG9uZTspe3ZhciB4PXYudmFsdWUsXz14Lml0ZW1zW2FdO2lmKF8udHlwZT09PSJsaXRlcmFsIilpZighbS5pbmNsdWRlcyhfLnZhbHVlKSltLnB1c2goXy52YWx1ZSk7ZWxzZSByZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkZvdW5kIGR1cGxpY2F0ZSBrZXkgaW4gc2NoZW1hOiAiLmNvbmNhdChfLnZhbHVlKSxmYXRhbDohMH1dKX19Y2F0Y2goQSl7dy5lKEEpfWZpbmFsbHl7dy5mKCl9dmFyIFM9Yy5maW5kKGZ1bmN0aW9uKEEpe3JldHVybiFBLml0ZW1zW2FdLnZhbGlkYXRlKGksZ1thXSl9KTtpZighUyl7dmFyIEU9cnIoaSxhKTtpZighRSl0aHJvdyBuZXcgRXJyb3IoIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KGEpKTtyZXR1cm4gbWUoe30sRSxbe21lc3NhZ2U6J0ludmFsaWQga2V5OiAiJy5jb25jYXQoYSwnIi4gVmFsdWUgd2FzOiAiJykuY29uY2F0KGdbYV0sJyIuIFZhbGlkIHZhbHVlczogJykuY29uY2F0KGYubWFwKGZ1bmN0aW9uKEEpe3ZhciBUPUEuaXRlbXNbYV07aWYoVC50eXBlPT09ImxpdGVyYWwiJiZULnZhbHVlKXJldHVybiciJy5jb25jYXQoVC52YWx1ZSwnIicpO3Rocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgbGl0ZXJhbCBzY2hlbWEsIGdvdCAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShULG51bGwsMikpKX0pLmpvaW4oIiwgIikpfV0pfXZhciBrPVMudmFsaWRhdGUoaSxnKTtpZihrKXJldHVybiBrfWVsc2UgaWYoYSBpbnN0YW5jZW9mIEEwKXtpZih0aGlzLml0ZW1zLnNvbWUoZnVuY3Rpb24oQSl7cmV0dXJuIShBIGluc3RhbmNlb2YgQTApfSkpcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJLZXkgaXMgYSBsaXRlcmFsIHNjaGVtYSwgc28gYWxsIHNjaGVtYSBpdGVtcyBtdXN0IGJlIGxpdGVyYWxzIixmYXRhbDohMH1dKTt2YXIgQz1bYV0uY29uY2F0KHF3KHRoaXMuaXRlbXMpKTtpZih0eXBlb2YgbD09InN0cmluZyIpe3ZhciBOPUMuc29tZShmdW5jdGlvbihBKXtyZXR1cm4hQS52YWxpZGF0ZShpLGwpfSk7aWYoIU4pcmV0dXJuIG1lKHt9LGksW3ttZXNzYWdlOiJVbmlvbiBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgZm9sbG93aW5nOiAiLmNvbmNhdChDLm1hcChmdW5jdGlvbihBKXtyZXR1cm4nIicuY29uY2F0KEEudmFsdWUsJyInKX0pLmpvaW4oIiwgIikpfV0pfX1lbHNlIHJldHVybiBtZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgYSBzdHJpbmcgb3IgbGl0ZXJhbCJ9XSk7cmV0dXJuIHN9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiEwfX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMua2V5LHRoaXMuaXRlbXMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0eXBlb2YgdGhpcy5rZXk9PSJzdHJpbmciP3t0eXBlOiJ1bmlvbiIsa2V5OnRoaXMua2V5LGl0ZW1zOnRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnNlcmlhbGl6ZSgpfSksb3B0OnRoaXMub3B0fTp7dHlwZToidW5pb24iLGl0ZW1zOnRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uKGkpe3JldHVybiBpLnNlcmlhbGl6ZSgpfSksb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLENOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLm9wdGlvbnM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiExfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtyZXR1cm4hMH19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJyaWNodGV4dCIsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLGJOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLm9wdGlvbnM9cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3JldHVybiB0aGlzLm9wdCYmbz09bnVsbD8hMTpvPT1udWxsP21lKHt9LGksW3ttZXNzYWdlOiJOb24tb3B0aW9uYWwgaW1hZ2Ugd2FzIG51bGwgb3IgdW5kZWZpbmVkLiIsdmFsdWU6b31dKTp0eXBlb2Ygb1tQbl0hPSJzdHJpbmciP21lKHt9LGksW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgYSBmaWxlIHJlZmVyZW5jZSBzdHJpbmcuIEdvdDogIi5jb25jYXQoeGUob1tQbl0pKSx2YWx1ZTpvfV0pOm9bbm5dIT09ImZpbGUiP21lKHt9LGksW3ttZXNzYWdlOiJJbWFnZSBkaWQgbm90IGhhdmUgdGhlIHZhbGlkIGZpbGUgZXh0ZW5zaW9uIHR5cGUuIEdvdDogIi5jb25jYXQob1tubl0pLHZhbHVlOm99XSk6by5tZXRhZGF0YT9tZSh7fSxpLFt7bWVzc2FnZToiRm91bmQgbWV0YWRhdGEsIGJ1dCBpdCBjb3VsZCBub3QgYmUgdmFsaWRhdGVkLiBJbWFnZSBtZXRhZGF0YSBtdXN0IGJlIGFuIG9iamVjdCB3aXRoIHRoZSByZXF1aXJlZCBwcm9wczogd2lkdGggKHBvc2l0aXZlIG51bWJlciksIGhlaWdodCAocG9zaXRpdmUgbnVtYmVyKSBhbmQgc2hhMjU2IChzdHJpbmcgb2YgbGVuZ3RoIDY0IG9mIHRoZSBiYXNlMTYgaGFzaCkuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6cmVwbGFjZS1tZXRhZGF0YSJdfV0pOm1lKHt9LGksW3ttZXNzYWdlOiJDb3VsZCBub3QgdmFsaWRhdGUgSW1hZ2UgbWV0YWRhdGEuIix2YWx1ZTpvLGZpeGVzOlsiaW1hZ2U6YWRkLW1ldGFkYXRhIl19XSl9fSx7a2V5OiJhc3NlcnQiLHZhbHVlOmZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLm9wdCYmaT09bnVsbD8hMDooaT09bnVsbD92b2lkIDA6aVtQbl0pPT09ImltYWdlIiYmKGk9PW51bGw/dm9pZCAwOmlbbm5dKT09PSJmaWxlIn19LHtrZXk6Im9wdGlvbmFsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLm9wdGlvbnMsITApfX0se2tleToic2VyaWFsaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybnt0eXBlOiJpbWFnZSIsb3B0aW9uczp0aGlzLm9wdGlvbnMsb3B0OnRoaXMub3B0fX19XSksbn0oRWkpLGtOPWZ1bmN0aW9uKHQpe3dpKG4sdCk7dmFyIGU9U2kobik7ZnVuY3Rpb24gbihyKXt2YXIgaSxvPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTohMTtyZXR1cm4gR24odGhpcyxuKSxpPWUuY2FsbCh0aGlzKSxpLml0ZW09cixpLm9wdD1vLGl9cmV0dXJuIFluKG4sW3trZXk6InZhbGlkYXRlIix2YWx1ZTpmdW5jdGlvbihpLG8pe3ZhciBsPXRoaXMscz0hMTtyZXR1cm4gdGhpcy5vcHQmJm89PW51bGw/ITE6eGUobykhPT0ib2JqZWN0Ij9tZSh7fSxpLFt7bWVzc2FnZToiRXhwZWN0ZWQgJ29iamVjdCcsIGdvdCAnIi5jb25jYXQoeGUobyksIiciKX1dKTpBcnJheS5pc0FycmF5KG8pP21lKHt9LGksW3ttZXNzYWdlOiJFeHBlY3RlZCAnb2JqZWN0JywgZ290ICdhcnJheScifV0pOihPYmplY3QuZW50cmllcyhvKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPW5vKGEsMiksdT1jWzBdLGQ9Y1sxXSxmPXJyKGksdSk7aWYoIWYpcz1sLmFwcGVuZFZhbGlkYXRpb25FcnJvcihzLGksIkludGVybmFsIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIHBhdGggYXQgIi5jb25jYXQoIWkmJnR5cGVvZiBpPT0ic3RyaW5nIj8iPGVtcHR5IHN0cmluZz4iOmksIiBhdCBrZXkgIikuY29uY2F0KGQpLG8pO2Vsc2V7dmFyIHA9bC5pdGVtLnZhbGlkYXRlKGYsZCk7cCYmcz9zPXBzKHBzKHt9LHApLHMpOnAmJihzPXApfX0pLHMpfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtpZih0aGlzLm9wdCYmaT09bnVsbClyZXR1cm4hMDtpZighaSlyZXR1cm4hMTtmb3IodmFyIG89MCxsPU9iamVjdC5lbnRyaWVzKGkpO288bC5sZW5ndGg7bysrKXt2YXIgcz1ubyhsW29dLDIpLGE9c1sxXTtpZighdGhpcy5pdGVtLmFzc2VydChhKSlyZXR1cm4hMX1yZXR1cm4geGUoaSk9PT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoaSl9fSx7a2V5OiJvcHRpb25hbCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5pdGVtLCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToicmVjb3JkIixpdGVtOnRoaXMuaXRlbS5zZXJpYWxpemUoKSxvcHQ6dGhpcy5vcHR9fX1dKSxufShFaSk7ZnVuY3Rpb24gJE4odCl7dmFyIGU9dFtPdF07aWYoZSBpbnN0YW5jZW9mIGl2KXRocm93IEVycm9yKCJDYW5ub3QgZ2V0IHJhdyBzb3VyY2Ugb2YgYW4gRXhwciIpO3ZhciBuPWU7cmV0dXJuIG59ZnVuY3Rpb24gVE4odCl7cmV0dXJuIHQuaW5kZXhPZigiLiIpPT09LTE/W3QsIiJdOlt0LnNsaWNlKDAsdC5pbmRleE9mKCIuIikpLHQuc2xpY2UodC5pbmRleE9mKCIuIikrMSldfWZ1bmN0aW9uIE5OKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaVN8fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJvYmplY3QifWZ1bmN0aW9uIFJOKHQpe3JldHVybiB0IGluc3RhbmNlb2Yga058fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJyZWNvcmQifWZ1bmN0aW9uIE9OKHQpe3JldHVybiB0IGluc3RhbmNlb2YgU058fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJhcnJheSJ9ZnVuY3Rpb24gUE4odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBFTnx8eGUodCk9PT0ib2JqZWN0IiYmInR5cGUiaW4gdCYmdC50eXBlPT09InVuaW9uIn1mdW5jdGlvbiBBTih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIENOfHx4ZSh0KT09PSJvYmplY3QiJiYidHlwZSJpbiB0JiZ0LnR5cGU9PT0icmljaHRleHQifWZ1bmN0aW9uIE1OKHQpe3JldHVybiB0IGluc3RhbmNlb2YgYk58fHhlKHQpPT09Im9iamVjdCImJiJ0eXBlImluIHQmJnQudHlwZT09PSJpbWFnZSJ9ZnVuY3Rpb24gTE4odCxlLG4pe2Zvcih2YXIgcj1ETih0KSxpPXF3KHIpLG89bixsPWUscz1mdW5jdGlvbigpe3ZhciB1PXIuc2hpZnQoKTtpZih1PT09dm9pZCAwKXRocm93IEVycm9yKCJVbmV4cGVjdGVkIHVuZGVmaW5lZCBwYXJ0Iik7aWYoT04obykpe2lmKE51bWJlci5pc05hTihOdW1iZXIodSkpKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IGFycmF5IHNjaGVtYSAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShvKSwiIG11c3QgaGF2ZSBhIG51bWJlciBhcyBwYXRoLCBidXQgZ290ICIpLmNvbmNhdCh1LCIuIFBhdGg6ICIpLmNvbmNhdCh0KSk7aWYoeGUobCkhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiBhcnJheSwgYnV0IGdvdCAiLmNvbmNhdCh4ZShsKSkpO2lmKCFsW3VdKXt2YXIgZDt0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiBhcnJheSBzb3VyY2UgKGxlbmd0aDogIi5jb25jYXQoKGQ9bCk9PT1udWxsfHxkPT09dm9pZCAwP3ZvaWQgMDpkLmxlbmd0aCwiKSBkaWQgbm90IGhhdmUgaW5kZXggIikuY29uY2F0KHUsIiBmcm9tIHBhdGg6ICIpLmNvbmNhdCh0KSl9bD1sW3VdLG89by5pdGVtfWVsc2UgaWYoUk4obykpe2lmKHR5cGVvZiB1IT0ic3RyaW5nIil0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc2NoZW1hICIuY29uY2F0KG8sIiBtdXN0IGhhdmUgcGF0aDogIikuY29uY2F0KHUsIiBhcyBzdHJpbmciKSk7aWYoeGUobCkhPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkobCkpdGhyb3cgRXJyb3IoIlNjaGVtYSB0eXBlIGVycm9yOiBleHBlY3RlZCBzb3VyY2UgdG8gYmUgdHlwZSBvZiByZWNvcmQsIGJ1dCBnb3QgIi5jb25jYXQoeGUobCkpKTtpZighbFt1XSl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiByZWNvcmQgc291cmNlIGRpZCBub3QgaGF2ZSBrZXkgIi5jb25jYXQodSwiIGZyb20gcGF0aDogIikuY29uY2F0KHQpKTtsPWxbdV0sbz1vLml0ZW19ZWxzZSBpZihOTihvKSl7aWYoeGUobCkhPT0ib2JqZWN0Iil0aHJvdyBFcnJvcigiU2NoZW1hIHR5cGUgZXJyb3I6IGV4cGVjdGVkIHNvdXJjZSB0byBiZSB0eXBlIG9mIG9iamVjdCwgYnV0IGdvdCAiLmNvbmNhdCh4ZShsKSkpO2lmKCFsW3VdKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6IG9iamVjdCBzb3VyY2UgZGlkIG5vdCBoYXZlIGtleSAiLmNvbmNhdCh1LCIgZnJvbSBwYXRoOiAiKS5jb25jYXQodCkpO2w9bFt1XSxvPW8uaXRlbXNbdV19ZWxzZXtpZihNTihvKSlyZXR1cm57djp7cGF0aDppLnNsaWNlKDAsaS5sZW5ndGgtci5sZW5ndGgtMSkubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBKU09OLnN0cmluZ2lmeShtKX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O2lmKFBOKG8pKXt2YXIgZj1vLmtleTtpZighZilyZXR1cm57djp7cGF0aDppLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gTnVtYmVyLmlzTmFOKE51bWJlcihtKSk/SlNPTi5zdHJpbmdpZnkobSk6bX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O3ZhciBwPWxbZl07aWYoIXApdGhyb3cgRXJyb3IoIkludmFsaWQgcGF0aDogdW5pb24gc291cmNlICIuY29uY2F0KG8sIiBkaWQgbm90IGhhdmUgcmVxdWlyZWQga2V5ICIpLmNvbmNhdChmLCIgaW4gcGF0aDogIikuY29uY2F0KHQpKTt2YXIgZz1vLml0ZW1zLmZpbmQoZnVuY3Rpb24obSl7dmFyIHc7cmV0dXJuKG09PW51bGx8fCh3PW0uaXRlbXMpPT09bnVsbHx8dz09PXZvaWQgMHx8KHc9d1tmXSk9PT1udWxsfHx3PT09dm9pZCAwP3ZvaWQgMDp3LnZhbHVlKT09PXB9KTtpZighZyl0aHJvdyBFcnJvcigiSW52YWxpZCBwYXRoOiB1bmlvbiBzY2hlbWEgIi5jb25jYXQobywiIGRpZCBub3QgaGF2ZSBhIGNoaWxkIG9iamVjdCB3aXRoICIpLmNvbmNhdChmLCIgb2YgdmFsdWUgIikuY29uY2F0KHAsIiBpbiBwYXRoOiAiKS5jb25jYXQodCkpO289Zy5pdGVtc1t1XSxsPWxbdV19ZWxzZXtpZihBTihvKSlyZXR1cm57djp7cGF0aDppLnNsaWNlKDAsaS5sZW5ndGgtci5sZW5ndGgtMSkubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBKU09OLnN0cmluZ2lmeShtKX0pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19O3Rocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6ICIuY29uY2F0KHUsIiByZXNvbHZlZCB0byBhbiB1bmV4cGVjdGVkIHNjaGVtYSAiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkobykpKX19fSxhO3IubGVuZ3RoPjA7KWlmKGE9cygpLGEpcmV0dXJuIGEudjtpZihyLmxlbmd0aD4wKXRocm93IEVycm9yKCJJbnZhbGlkIHBhdGg6ICIuY29uY2F0KHIuam9pbigiLiIpLCIgaXMgbm90IGEgdmFsaWQgcGF0aCIpKTtyZXR1cm57cGF0aDppLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gTnVtYmVyLmlzTmFOKE51bWJlcihjKSk/SlNPTi5zdHJpbmdpZnkoYyk6Y30pLmpvaW4oIi4iKSxzY2hlbWE6byxzb3VyY2U6bH19ZnVuY3Rpb24gRE4odCl7Zm9yKHZhciBlPVtdLG49MDtuPHQubGVuZ3RoOyl7dmFyIHI9IiI7aWYodFtuXT09PSciJyl7Zm9yKG4rKztuPHQubGVuZ3RoJiZ0W25dIT09JyInOyl0W25dPT09IlxcIiYmdFtuKzFdPT09JyInPyhyKz0nIicsbisrKTpyKz10W25dLG4rKztpZih0W25dIT09JyInKXt2YXIgaTt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgKCIuY29uY2F0KEpTT04uc3RyaW5naWZ5KHQpLCIpOiBNaXNzaW5nIGNsb3NpbmcgZG91YmxlIHF1b3RlOiAiKS5jb25jYXQoKGk9dFtuXSkhPT1udWxsJiZpIT09dm9pZCAwP2k6ImF0IGVuZCBvZiBzdHJpbmciLCIgKGNoYXI6ICIpLmNvbmNhdChuLCI7IGxlbmd0aDogIikuY29uY2F0KHQubGVuZ3RoLCIpIikpfX1lbHNlIGZvcig7bjx0Lmxlbmd0aCYmdFtuXSE9PSIuIjspcis9dFtuXSxuKys7ciE9PSIiJiZlLnB1c2gociksbisrfXJldHVybiBlfXZhciBJTj1mdW5jdGlvbih0KXt3aShuLHQpO3ZhciBlPVNpKG4pO2Z1bmN0aW9uIG4ocil7dmFyIGksbz1hcmd1bWVudHMubGVuZ3RoPjEmJmFyZ3VtZW50c1sxXSE9PXZvaWQgMD9hcmd1bWVudHNbMV06ITEsbD1hcmd1bWVudHMubGVuZ3RoPjImJmFyZ3VtZW50c1syXSE9PXZvaWQgMD9hcmd1bWVudHNbMl06ITE7cmV0dXJuIEduKHRoaXMsbiksaT1lLmNhbGwodGhpcyksaS5vcHRpb25zPXIsaS5vcHQ9byxpLmlzUmF3PWwsaX1yZXR1cm4gWW4obixbe2tleToidmFsaWRhdGUiLHZhbHVlOmZ1bmN0aW9uKGksbyl7dmFyIGwscyxhO2lmKHRoaXMub3B0JiZvPT1udWxsKXJldHVybiExO2lmKHR5cGVvZiBvIT0ic3RyaW5nIilyZXR1cm4gbWUoe30saSxbe21lc3NhZ2U6IkV4cGVjdGVkICdzdHJpbmcnLCBnb3QgJyIuY29uY2F0KHhlKG8pLCInIiksdmFsdWU6b31dKTt2YXIgYz1bXTtyZXR1cm4obD10aGlzLm9wdGlvbnMpIT09bnVsbCYmbCE9PXZvaWQgMCYmbC5tYXhMZW5ndGgmJm8ubGVuZ3RoPnRoaXMub3B0aW9ucy5tYXhMZW5ndGgmJmMucHVzaCh7bWVzc2FnZToiRXhwZWN0ZWQgc3RyaW5nIHRvIGJlIGF0IG1vc3QgIi5jb25jYXQodGhpcy5vcHRpb25zLm1heExlbmd0aCwiIGNoYXJhY3RlcnMgbG9uZywgZ290ICIpLmNvbmNhdChvLmxlbmd0aCksdmFsdWU6b30pLChzPXRoaXMub3B0aW9ucykhPT1udWxsJiZzIT09dm9pZCAwJiZzLm1pbkxlbmd0aCYmby5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aCYmYy5wdXNoKHttZXNzYWdlOiJFeHBlY3RlZCBzdHJpbmcgdG8gYmUgYXQgbGVhc3QgIi5jb25jYXQodGhpcy5vcHRpb25zLm1pbkxlbmd0aCwiIGNoYXJhY3RlcnMgbG9uZywgZ290ICIpLmNvbmNhdChvLmxlbmd0aCksdmFsdWU6b30pLChhPXRoaXMub3B0aW9ucykhPT1udWxsJiZhIT09dm9pZCAwJiZhLnJlZ2V4cCYmIXRoaXMub3B0aW9ucy5yZWdleHAudGVzdChvKSYmYy5wdXNoKHttZXNzYWdlOiJFeHBlY3RlZCBzdHJpbmcgdG8gbWF0Y2ggcmVnIGV4cDogIi5jb25jYXQodGhpcy5vcHRpb25zLnJlZ2V4cC50b1N0cmluZygpLCIsIGdvdCAnIikuY29uY2F0KG8sIiciKSx2YWx1ZTpvfSksYy5sZW5ndGg+MD9tZSh7fSxpLGMpOiExfX0se2tleToiYXNzZXJ0Iix2YWx1ZTpmdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5vcHQmJmk9PW51bGw/ITA6dHlwZW9mIGk9PSJzdHJpbmcifX0se2tleToib3B0aW9uYWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMub3B0aW9ucywhMCx0aGlzLmlzUmF3KX19LHtrZXk6InJhdyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5vcHRpb25zLHRoaXMub3B0LCEwKX19LHtrZXk6InNlcmlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaSxvLGw7cmV0dXJue3R5cGU6InN0cmluZyIsb3B0aW9uczp7bWF4TGVuZ3RoOihpPXRoaXMub3B0aW9ucyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLm1heExlbmd0aCxtaW5MZW5ndGg6KG89dGhpcy5vcHRpb25zKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ubWluTGVuZ3RoLHJlZ2V4cDooKGw9dGhpcy5vcHRpb25zKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwucmVnZXhwKSYme3NvdXJjZTp0aGlzLm9wdGlvbnMucmVnZXhwLnNvdXJjZSxmbGFnczp0aGlzLm9wdGlvbnMucmVnZXhwLmZsYWdzfX0sb3B0OnRoaXMub3B0LHJhdzp0aGlzLmlzUmF3fX19XSksbn0oRWkpO2Z1bmN0aW9uIGpOKHQpe3JldHVybiBvUyhCTih0KSl9ZnVuY3Rpb24gek4odCl7cmV0dXJuIHJvKHQpP3hlKHRbT3RdKT09PSJvYmplY3QiJiZ0W090XSE9PW51bGwmJkFycmF5LmlzQXJyYXkodFtPdF0pOkFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gRk4odCl7cmV0dXJuIHJvKHQpP3hlKHRbT3RdKT09PSJvYmplY3QiJiZ0W090XSE9PW51bGwmJiFBcnJheS5pc0FycmF5KHRbT3RdKTp4ZSh0KT09PSJvYmplY3QifWZ1bmN0aW9uIEJOKHQpe3ZhciBlPU10KHQpO2Z1bmN0aW9uIG4ocil7dmFyIGk9ek4ociksbz1GTihyKTtpZihpKXt2YXIgbD1PdCBpbiByP3JbT3RdOnIscz1nbiBpbiByP3JbZ25dOnZvaWQgMDtyZXR1cm57dmFsOmwubWFwKGZ1bmN0aW9uKHUsZCl7cmV0dXJuIG4ocm8odSk/dTpNdCh1LHJyKHMsZCkpKX0pLHZhbFBhdGg6c319ZWxzZSBpZihvKXt2YXIgYT1PdCBpbiByP3JbT3RdOnIsYz1nbiBpbiByP3JbZ25dOnZvaWQgMDtyZXR1cm57dmFsOmEhPT1udWxsJiZPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYSkubWFwKGZ1bmN0aW9uKHUpe3ZhciBkPW5vKHUsMiksZj1kWzBdLHA9ZFsxXTtyZXR1cm5bZixuKHJvKHApP3A6TXQocCxycihjLGYpKSldfSkpLHZhbFBhdGg6Y319ZWxzZSByZXR1cm4gcm8ocik/e3ZhbDpuKHJbT3RdKSx2YWxQYXRoOnJbZ25dfTpyfXJldHVybiBuKGUpfWZ1bmN0aW9uIGVtKHQpe3ZhciBlPXJTKHQpP3QudmFsOnQ7c3dpdGNoKHhlKGUpKXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6dGhyb3cgRXJyb3IoIkludmFsaWQgdmFsIHR5cGU6ICIuY29uY2F0KHhlKGUpKSk7Y2FzZSJvYmplY3QiOnJldHVybiBlPT09bnVsbD9udWxsOkFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoZW0pOk9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5tYXAoZnVuY3Rpb24obil7dmFyIHI9bm8obiwyKSxpPXJbMF0sbz1yWzFdO3JldHVybltpLG8mJmVtKG8pXX0pKTtkZWZhdWx0OnJldHVybiBlfX1mdW5jdGlvbiBvUyh0KXt2YXIgZT10LnZhbDtzd2l0Y2goeGUoZSkpe2Nhc2UiZnVuY3Rpb24iOmNhc2Uic3ltYm9sIjp0aHJvdyBFcnJvcigiSW52YWxpZCB2YWwgdHlwZTogIi5jb25jYXQoeGUoZSkpKTtjYXNlIm9iamVjdCI6aWYoZSE9PW51bGwpcmV0dXJuIG5ldyBQcm94eShlLHtoYXM6ZnVuY3Rpb24ocixpKXtyZXR1cm4gaT09PSJ2YWwifHxpPT09Z24/ITA6TTAocixpKX0sZ2V0OmZ1bmN0aW9uKHIsaSl7aWYoaT09PWduKXJldHVybiB0LnZhbFBhdGg7aWYoaT09PSJ2YWwiKXJldHVybiBlbSh0KTtpZihBcnJheS5pc0FycmF5KHIpJiZpPT09Imxlbmd0aCIpcmV0dXJuIHIubGVuZ3RoO2lmKE0wKGUsaSkpe3ZhciBvLGw7cmV0dXJuIG9TKHt2YWw6UmVmbGVjdC5nZXQocixpKS52YWwsdmFsUGF0aDoobz0obD1SZWZsZWN0LmdldChyLGkpKT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwudmFsUGF0aCkhPT1udWxsJiZvIT09dm9pZCAwP286cnIodC52YWxQYXRoLEFycmF5LmlzQXJyYXkocik/TnVtYmVyKGkpOmkpfSl9cmV0dXJuIFJlZmxlY3QuZ2V0KHIsaSl9fSk7ZGVmYXVsdDpyZXR1cm4gbWUobWUoe30sZ24sdC52YWxQYXRoKSwidmFsIix0LnZhbCl9fWZ1bmN0aW9uIE0wKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXZhciBVTj1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLC0xMjQ1NjQzODI1LC0zNzM5NTc3MjMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsLTE4NDEzMzE1NDgsLTE0MjQyMDQwNzUsLTY3MDU4NjIxNiwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwtMjEzMjg4OTA5MCwtMTY4MDA3OTE5MywtMTA0Njc0NDcxNiwtNDU5NTc2ODk1LC0yNzI3NDI1MjIsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsLTE3NDA3NDY0MTQsLTE0NzMxMzI5NDcsLTEzNDE5NzA0ODgsLTEwODQ2NTM2MjUsLTk1ODM5NTQwNSwtNzEwNDM4NTg1LDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLC0yMTE3OTQwOTQ2LC0xODM4MDExMjU5LC0xNTY0NDgxMzc1LC0xNDc0NjY0ODg1LC0xMDM1MjM2NDk2LC05NDkyMDI1MjUsLTc3ODkwMTQ3OSwtNjk0NjE0NDkyLC0yMDAzOTUzODcsMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LC0yMDY3MjM2ODQ0LC0xOTMzMTE0ODcyLC0xODY2NTMwODIyLC0xNTM4MjMzMTA5LC0xMDkwOTM1ODE3LC05NjU2NDE5OThdLEhlPWZ1bmN0aW9uKHQpe3JldHVybiB0W3QuaW5wdXRCeXRlcz02NF09ImlucHV0Qnl0ZXMiLHRbdC5pbnB1dFdvcmRzPTE2XT0iaW5wdXRXb3JkcyIsdFt0LmhpZ2hJbmRleD0xNF09ImhpZ2hJbmRleCIsdFt0Lmxvd0luZGV4PTE1XT0ibG93SW5kZXgiLHRbdC53b3JrV29yZHM9NjRdPSJ3b3JrV29yZHMiLHRbdC5hbGxvY0J5dGVzPTgwXT0iYWxsb2NCeXRlcyIsdFt0LmFsbG9jV29yZHM9MjBdPSJhbGxvY1dvcmRzIix0W3QuYWxsb2NUb3RhbD04ZTNdPSJhbGxvY1RvdGFsIix0fShIZXx8e30pLEwwPXtzaGEyNTY6MX07ZnVuY3Rpb24gV04odCl7aWYodCYmIUwwW3RdJiYhTDBbdC50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBtZXRob2Qgbm90IHN1cHBvcnRlZCIpO3JldHVybiBuZXcgSE59dmFyIEhOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe0duKHRoaXMsdCksbWUodGhpcywiQSIsMTc3OTAzMzcwMyksbWUodGhpcywiQiIsLTExNTA4MzMwMTkpLG1lKHRoaXMsIkMiLDEwMTM5MDQyNDIpLG1lKHRoaXMsIkQiLC0xNTIxNDg2NTM0KSxtZSh0aGlzLCJFIiwxMzU5ODkzMTE5KSxtZSh0aGlzLCJGIiwtMTY5NDE0NDM3MiksbWUodGhpcywiRyIsNTI4NzM0NjM1KSxtZSh0aGlzLCJIIiwxNTQxNDU5MjI1KSxtZSh0aGlzLCJfc2l6ZSIsMCksbWUodGhpcywiX3NwIiwwKSwoIWh1fHxxcz49SGUuYWxsb2NUb3RhbCkmJihodT1uZXcgQXJyYXlCdWZmZXIoSGUuYWxsb2NUb3RhbCkscXM9MCksdGhpcy5fYnl0ZT1uZXcgVWludDhBcnJheShodSxxcyxIZS5hbGxvY0J5dGVzKSx0aGlzLl93b3JkPW5ldyBJbnQzMkFycmF5KGh1LHFzLEhlLmFsbG9jV29yZHMpLHFzKz1IZS5hbGxvY0J5dGVzfXJldHVybiBZbih0LFt7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKG4pe2lmKHR5cGVvZiBuPT0ic3RyaW5nIilyZXR1cm4gdGhpcy5fdXRmOChuKTtpZihuPT1udWxsKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgdHlwZTogIit4ZShuKSk7dmFyIHI9bi5ieXRlT2Zmc2V0LGk9bi5ieXRlTGVuZ3RoLG89aS9IZS5pbnB1dEJ5dGVzfDAsbD0wO2lmKG8mJiEociYzKSYmISh0aGlzLl9zaXplJUhlLmlucHV0Qnl0ZXMpKXtmb3IodmFyIHM9bmV3IEludDMyQXJyYXkobi5idWZmZXIscixvKkhlLmlucHV0V29yZHMpO28tLTspdGhpcy5faW50MzIocyxsPj4yKSxsKz1IZS5pbnB1dEJ5dGVzO3RoaXMuX3NpemUrPWx9dmFyIGE9bi5CWVRFU19QRVJfRUxFTUVOVDtpZihhIT09MSYmbi5idWZmZXIpe3ZhciBjPW5ldyBVaW50OEFycmF5KG4uYnVmZmVyLHIrbCxpLWwpO3JldHVybiB0aGlzLl91aW50OChjKX1yZXR1cm4gbD09PWk/dGhpczp0aGlzLl91aW50OChuLGwpfX0se2tleToiX3VpbnQ4Iix2YWx1ZTpmdW5jdGlvbihuLHIpe3ZhciBpPXRoaXMuX2J5dGUsbz10aGlzLl93b3JkLGw9bi5sZW5ndGg7Zm9yKHI9cnwwO3I8bDspe2Zvcih2YXIgcz10aGlzLl9zaXplJUhlLmlucHV0Qnl0ZXMsYT1zO3I8bCYmYTxIZS5pbnB1dEJ5dGVzOylpW2ErK109bltyKytdO2E+PUhlLmlucHV0Qnl0ZXMmJnRoaXMuX2ludDMyKG8pLHRoaXMuX3NpemUrPWEtc31yZXR1cm4gdGhpc319LHtrZXk6Il91dGY4Iix2YWx1ZTpmdW5jdGlvbihuKXtmb3IodmFyIHI9dGhpcy5fYnl0ZSxpPXRoaXMuX3dvcmQsbz1uLmxlbmd0aCxsPXRoaXMuX3NwLHM9MDtzPG87KXtmb3IodmFyIGE9dGhpcy5fc2l6ZSVIZS5pbnB1dEJ5dGVzLGM9YTtzPG8mJmM8SGUuaW5wdXRCeXRlczspe3ZhciB1PW4uY2hhckNvZGVBdChzKyspfDA7dTwxMjg/cltjKytdPXU6dTwyMDQ4PyhyW2MrK109MTkyfHU+Pj42LHJbYysrXT0xMjh8dSY2Myk6dTw1NTI5Nnx8dT41NzM0Mz8ocltjKytdPTIyNHx1Pj4+MTIscltjKytdPTEyOHx1Pj4+NiY2MyxyW2MrK109MTI4fHUmNjMpOmw/KHU9KChsJjEwMjMpPDwxMCkrKHUmMTAyMykrNjU1MzYscltjKytdPTI0MHx1Pj4+MTgscltjKytdPTEyOHx1Pj4+MTImNjMscltjKytdPTEyOHx1Pj4+NiY2MyxyW2MrK109MTI4fHUmNjMsbD0wKTpsPXV9Yz49SGUuaW5wdXRCeXRlcyYmKHRoaXMuX2ludDMyKGkpLGlbMF09aVtIZS5pbnB1dFdvcmRzXSksdGhpcy5fc2l6ZSs9Yy1hfXJldHVybiB0aGlzLl9zcD1sLHRoaXN9fSx7a2V5OiJfaW50MzIiLHZhbHVlOmZ1bmN0aW9uKG4scil7dmFyIGk9dGhpcy5BLG89dGhpcy5CLGw9dGhpcy5DLHM9dGhpcy5ELGE9dGhpcy5FLGM9dGhpcy5GLHU9dGhpcy5HLGQ9dGhpcy5ILGY9MDtmb3Iocj1yfDA7ZjxIZS5pbnB1dFdvcmRzOykkb1tmKytdPXByKG5bcisrXSk7Zm9yKGY9SGUuaW5wdXRXb3JkcztmPEhlLndvcmtXb3JkcztmKyspJG9bZl09UU4oJG9bZi0yXSkrJG9bZi03XStKTigkb1tmLTE1XSkrJG9bZi0xNl18MDtmb3IoZj0wO2Y8SGUud29ya1dvcmRzO2YrKyl7dmFyIHA9ZCtYTihhKStaTihhLGMsdSkrVU5bZl0rJG9bZl18MCxnPVlOKGkpK0dOKGksbyxsKXwwO2Q9dSx1PWMsYz1hLGE9cytwfDAscz1sLGw9byxvPWksaT1wK2d8MH10aGlzLkE9aSt0aGlzLkF8MCx0aGlzLkI9byt0aGlzLkJ8MCx0aGlzLkM9bCt0aGlzLkN8MCx0aGlzLkQ9cyt0aGlzLkR8MCx0aGlzLkU9YSt0aGlzLkV8MCx0aGlzLkY9Yyt0aGlzLkZ8MCx0aGlzLkc9dSt0aGlzLkd8MCx0aGlzLkg9ZCt0aGlzLkh8MH19LHtrZXk6ImRpZ2VzdCIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIHI9dGhpcy5fYnl0ZSxpPXRoaXMuX3dvcmQsbz10aGlzLl9zaXplJUhlLmlucHV0Qnl0ZXN8MDtmb3IocltvKytdPTEyODtvJjM7KXJbbysrXT0wO2lmKG8+Pj0yLG8+SGUuaGlnaEluZGV4KXtmb3IoO288SGUuaW5wdXRXb3JkczspaVtvKytdPTA7bz0wLHRoaXMuX2ludDMyKGkpfWZvcig7bzxIZS5pbnB1dFdvcmRzOylpW28rK109MDt2YXIgbD10aGlzLl9zaXplKjgscz0obCY0Mjk0OTY3Mjk1KT4+PjAsYT0obC1zKS80Mjk0OTY3Mjk2O3JldHVybiBhJiYoaVtIZS5oaWdoSW5kZXhdPXByKGEpKSxzJiYoaVtIZS5sb3dJbmRleF09cHIocykpLHRoaXMuX2ludDMyKGkpLG49PT0iaGV4Ij90aGlzLl9oZXgoKTp0aGlzLl9iaW4oKX19LHtrZXk6Il9oZXgiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5BLHI9dGhpcy5CLGk9dGhpcy5DLG89dGhpcy5ELGw9dGhpcy5FLHM9dGhpcy5GLGE9dGhpcy5HLGM9dGhpcy5IO3JldHVybiBPaShuKStPaShyKStPaShpKStPaShvKStPaShsKStPaShzKStPaShhKStPaShjKX19LHtrZXk6Il9iaW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcy5BLHI9dGhpcy5CLGk9dGhpcy5DLG89dGhpcy5ELGw9dGhpcy5FLHM9dGhpcy5GLGE9dGhpcy5HLGM9dGhpcy5ILHU9dGhpcy5fYnl0ZSxkPXRoaXMuX3dvcmQ7cmV0dXJuIGRbMF09cHIobiksZFsxXT1wcihyKSxkWzJdPXByKGkpLGRbM109cHIobyksZFs0XT1wcihsKSxkWzVdPXByKHMpLGRbNl09cHIoYSksZFs3XT1wcihjKSx1LnNsaWNlKDAsMzIpfX1dKSx0fSgpLCRvPW5ldyBJbnQzMkFycmF5KEhlLndvcmtXb3JkcyksaHUscXM9MCxPaT1mdW5jdGlvbihlKXtyZXR1cm4oZSs0Mjk0OTY3Mjk2KS50b1N0cmluZygxNikuc3Vic3RyKC04KX0sVk49ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PDI0JjQyNzgxOTAwODB8ZTw8OCYxNjcxMTY4MHxlPj44JjY1MjgwfGU+PjI0JjI1NX0sS049ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHByPXFOKCk/S046Vk4sWk49ZnVuY3Rpb24oZSxuLHIpe3JldHVybiByXmUmKG5ecil9LEdOPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gZSZufHImKGV8bil9LFlOPWZ1bmN0aW9uKGUpe3JldHVybihlPj4+MnxlPDwzMCleKGU+Pj4xM3xlPDwxOSleKGU+Pj4yMnxlPDwxMCl9LFhOPWZ1bmN0aW9uKGUpe3JldHVybihlPj4+NnxlPDwyNileKGU+Pj4xMXxlPDwyMSleKGU+Pj4yNXxlPDw3KX0sSk49ZnVuY3Rpb24oZSl7cmV0dXJuKGU+Pj43fGU8PDI1KV4oZT4+PjE4fGU8PDE0KV5lPj4+M30sUU49ZnVuY3Rpb24oZSl7cmV0dXJuKGU+Pj4xN3xlPDwxNSleKGU+Pj4xOXxlPDwxMyleZT4+PjEwfTtmdW5jdGlvbiBxTigpe3ZhciB0PW5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbNjUyNzldKS5idWZmZXIpO3JldHVybiB0WzBdPT09MjU0fXZhciBlMj1mdW5jdGlvbihlKXtyZXR1cm4gV04oKS51cGRhdGUoZSkuZGlnZXN0KCJoZXgiKX07ZnVuY3Rpb24gcmMoKXtyYz1mdW5jdGlvbigpe3JldHVybiBlfTt2YXIgdCxlPXt9LG49T2JqZWN0LnByb3RvdHlwZSxyPW4uaGFzT3duUHJvcGVydHksaT1PYmplY3QuZGVmaW5lUHJvcGVydHl8fGZ1bmN0aW9uKFIsUCxiKXtSW1BdPWIudmFsdWV9LG89dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIj9TeW1ib2w6e30sbD1vLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIscz1vLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLGE9by50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIGMoUixQLGIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoUixQLHt2YWx1ZTpiLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksUltQXX10cnl7Yyh7fSwiIil9Y2F0Y2h7Yz1mdW5jdGlvbihQLGIsail7cmV0dXJuIFBbYl09an19ZnVuY3Rpb24gdShSLFAsYixqKXt2YXIgej1QJiZQLnByb3RvdHlwZSBpbnN0YW5jZW9mIHY/UDp2LEc9T2JqZWN0LmNyZWF0ZSh6LnByb3RvdHlwZSkscmU9bmV3IEIoanx8W10pO3JldHVybiBpKEcsIl9pbnZva2UiLHt2YWx1ZTpUKFIsYixyZSl9KSxHfWZ1bmN0aW9uIGQoUixQLGIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6Ui5jYWxsKFAsYil9fWNhdGNoKGope3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmp9fX1lLndyYXA9dTt2YXIgZj0ic3VzcGVuZGVkU3RhcnQiLHA9InN1c3BlbmRlZFlpZWxkIixnPSJleGVjdXRpbmciLG09ImNvbXBsZXRlZCIsdz17fTtmdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIHgoKXt9ZnVuY3Rpb24gXygpe312YXIgUz17fTtjKFMsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSk7dmFyIEU9T2JqZWN0LmdldFByb3RvdHlwZU9mLGs9RSYmRShFKFooW10pKSk7ayYmayE9PW4mJnIuY2FsbChrLGwpJiYoUz1rKTt2YXIgQz1fLnByb3RvdHlwZT12LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMpO2Z1bmN0aW9uIE4oUil7WyJuZXh0IiwidGhyb3ciLCJyZXR1cm4iXS5mb3JFYWNoKGZ1bmN0aW9uKFApe2MoUixQLGZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLl9pbnZva2UoUCxiKX0pfSl9ZnVuY3Rpb24gQShSLFApe2Z1bmN0aW9uIGIoeixHLHJlLGJlKXt2YXIgeWU9ZChSW3pdLFIsRyk7aWYoeWUudHlwZSE9PSJ0aHJvdyIpe3ZhciBXZT15ZS5hcmcsRmU9V2UudmFsdWU7cmV0dXJuIEZlJiZ0eXBlb2YgRmU9PSJvYmplY3QiJiZyLmNhbGwoRmUsIl9fYXdhaXQiKT9QLnJlc29sdmUoRmUuX19hd2FpdCkudGhlbihmdW5jdGlvbihuZSl7YigibmV4dCIsbmUscmUsYmUpfSxmdW5jdGlvbihuZSl7YigidGhyb3ciLG5lLHJlLGJlKX0pOlAucmVzb2x2ZShGZSkudGhlbihmdW5jdGlvbihuZSl7V2UudmFsdWU9bmUscmUoV2UpfSxmdW5jdGlvbihuZSl7cmV0dXJuIGIoInRocm93IixuZSxyZSxiZSl9KX1iZSh5ZS5hcmcpfXZhciBqO2kodGhpcywiX2ludm9rZSIse3ZhbHVlOmZ1bmN0aW9uKHosRyl7ZnVuY3Rpb24gcmUoKXtyZXR1cm4gbmV3IFAoZnVuY3Rpb24oYmUseWUpe2IoeixHLGJlLHllKX0pfXJldHVybiBqPWo/ai50aGVuKHJlLHJlKTpyZSgpfX0pfWZ1bmN0aW9uIFQoUixQLGIpe3ZhciBqPWY7cmV0dXJuIGZ1bmN0aW9uKHosRyl7aWYoaj09PWcpdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoaj09PW0pe2lmKHo9PT0idGhyb3ciKXRocm93IEc7cmV0dXJue3ZhbHVlOnQsZG9uZTohMH19Zm9yKGIubWV0aG9kPXosYi5hcmc9Rzs7KXt2YXIgcmU9Yi5kZWxlZ2F0ZTtpZihyZSl7dmFyIGJlPUQocmUsYik7aWYoYmUpe2lmKGJlPT09dyljb250aW51ZTtyZXR1cm4gYmV9fWlmKGIubWV0aG9kPT09Im5leHQiKWIuc2VudD1iLl9zZW50PWIuYXJnO2Vsc2UgaWYoYi5tZXRob2Q9PT0idGhyb3ciKXtpZihqPT09Zil0aHJvdyBqPW0sYi5hcmc7Yi5kaXNwYXRjaEV4Y2VwdGlvbihiLmFyZyl9ZWxzZSBiLm1ldGhvZD09PSJyZXR1cm4iJiZiLmFicnVwdCgicmV0dXJuIixiLmFyZyk7aj1nO3ZhciB5ZT1kKFIsUCxiKTtpZih5ZS50eXBlPT09Im5vcm1hbCIpe2lmKGo9Yi5kb25lP206cCx5ZS5hcmc9PT13KWNvbnRpbnVlO3JldHVybnt2YWx1ZTp5ZS5hcmcsZG9uZTpiLmRvbmV9fXllLnR5cGU9PT0idGhyb3ciJiYoaj1tLGIubWV0aG9kPSJ0aHJvdyIsYi5hcmc9eWUuYXJnKX19fWZ1bmN0aW9uIEQoUixQKXt2YXIgYj1QLm1ldGhvZCxqPVIuaXRlcmF0b3JbYl07aWYoaj09PXQpcmV0dXJuIFAuZGVsZWdhdGU9bnVsbCxiPT09InRocm93IiYmUi5pdGVyYXRvci5yZXR1cm4mJihQLm1ldGhvZD0icmV0dXJuIixQLmFyZz10LEQoUixQKSxQLm1ldGhvZD09PSJ0aHJvdyIpfHxiIT09InJldHVybiImJihQLm1ldGhvZD0idGhyb3ciLFAuYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJyIrYisiJyBtZXRob2QiKSksdzt2YXIgej1kKGosUi5pdGVyYXRvcixQLmFyZyk7aWYoei50eXBlPT09InRocm93IilyZXR1cm4gUC5tZXRob2Q9InRocm93IixQLmFyZz16LmFyZyxQLmRlbGVnYXRlPW51bGwsdzt2YXIgRz16LmFyZztyZXR1cm4gRz9HLmRvbmU/KFBbUi5yZXN1bHROYW1lXT1HLnZhbHVlLFAubmV4dD1SLm5leHRMb2MsUC5tZXRob2QhPT0icmV0dXJuIiYmKFAubWV0aG9kPSJuZXh0IixQLmFyZz10KSxQLmRlbGVnYXRlPW51bGwsdyk6RzooUC5tZXRob2Q9InRocm93IixQLmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLFAuZGVsZWdhdGU9bnVsbCx3KX1mdW5jdGlvbiBMKFIpe3ZhciBQPXt0cnlMb2M6UlswXX07MSBpbiBSJiYoUC5jYXRjaExvYz1SWzFdKSwyIGluIFImJihQLmZpbmFsbHlMb2M9UlsyXSxQLmFmdGVyTG9jPVJbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKFApfWZ1bmN0aW9uIEsoUil7dmFyIFA9Ui5jb21wbGV0aW9ufHx7fTtQLnR5cGU9Im5vcm1hbCIsZGVsZXRlIFAuYXJnLFIuY29tcGxldGlvbj1QfWZ1bmN0aW9uIEIoUil7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLFIuZm9yRWFjaChMLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFooUil7aWYoUnx8Uj09PSIiKXt2YXIgUD1SW2xdO2lmKFApcmV0dXJuIFAuY2FsbChSKTtpZih0eXBlb2YgUi5uZXh0PT0iZnVuY3Rpb24iKXJldHVybiBSO2lmKCFpc05hTihSLmxlbmd0aCkpe3ZhciBiPS0xLGo9ZnVuY3Rpb24geigpe2Zvcig7KytiPFIubGVuZ3RoOylpZihyLmNhbGwoUixiKSlyZXR1cm4gei52YWx1ZT1SW2JdLHouZG9uZT0hMSx6O3JldHVybiB6LnZhbHVlPXQsei5kb25lPSEwLHp9O3JldHVybiBqLm5leHQ9an19dGhyb3cgbmV3IFR5cGVFcnJvcih0eXBlb2YgUisiIGlzIG5vdCBpdGVyYWJsZSIpfXJldHVybiB4LnByb3RvdHlwZT1fLGkoQywiY29uc3RydWN0b3IiLHt2YWx1ZTpfLGNvbmZpZ3VyYWJsZTohMH0pLGkoXywiY29uc3RydWN0b3IiLHt2YWx1ZTp4LGNvbmZpZ3VyYWJsZTohMH0pLHguZGlzcGxheU5hbWU9YyhfLGEsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKFIpe3ZhciBQPXR5cGVvZiBSPT0iZnVuY3Rpb24iJiZSLmNvbnN0cnVjdG9yO3JldHVybiEhUCYmKFA9PT14fHwoUC5kaXNwbGF5TmFtZXx8UC5uYW1lKT09PSJHZW5lcmF0b3JGdW5jdGlvbiIpfSxlLm1hcms9ZnVuY3Rpb24oUil7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoUixfKTooUi5fX3Byb3RvX189XyxjKFIsYSwiR2VuZXJhdG9yRnVuY3Rpb24iKSksUi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDKSxSfSxlLmF3cmFwPWZ1bmN0aW9uKFIpe3JldHVybntfX2F3YWl0OlJ9fSxOKEEucHJvdG90eXBlKSxjKEEucHJvdG90eXBlLHMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuQXN5bmNJdGVyYXRvcj1BLGUuYXN5bmM9ZnVuY3Rpb24oUixQLGIsaix6KXt6PT09dm9pZCAwJiYoej1Qcm9taXNlKTt2YXIgRz1uZXcgQSh1KFIsUCxiLGopLHopO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24oUCk/RzpHLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUuZG9uZT9yZS52YWx1ZTpHLm5leHQoKX0pfSxOKEMpLGMoQyxhLCJHZW5lcmF0b3IiKSxjKEMsbCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksYyhDLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0pLGUua2V5cz1mdW5jdGlvbihSKXt2YXIgUD1PYmplY3QoUiksYj1bXTtmb3IodmFyIGogaW4gUCliLnB1c2goaik7cmV0dXJuIGIucmV2ZXJzZSgpLGZ1bmN0aW9uIHooKXtmb3IoO2IubGVuZ3RoOyl7dmFyIEc9Yi5wb3AoKTtpZihHIGluIFApcmV0dXJuIHoudmFsdWU9Ryx6LmRvbmU9ITEsen1yZXR1cm4gei5kb25lPSEwLHp9fSxlLnZhbHVlcz1aLEIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpCLHJlc2V0OmZ1bmN0aW9uKFIpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXQsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChLKSwhUilmb3IodmFyIFAgaW4gdGhpcylQLmNoYXJBdCgwKT09PSJ0IiYmci5jYWxsKHRoaXMsUCkmJiFpc05hTigrUC5zbGljZSgxKSkmJih0aGlzW1BdPXQpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBSPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKFIudHlwZT09PSJ0aHJvdyIpdGhyb3cgUi5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oUil7aWYodGhpcy5kb25lKXRocm93IFI7dmFyIFA9dGhpcztmdW5jdGlvbiBiKHllLFdlKXtyZXR1cm4gRy50eXBlPSJ0aHJvdyIsRy5hcmc9UixQLm5leHQ9eWUsV2UmJihQLm1ldGhvZD0ibmV4dCIsUC5hcmc9dCksISFXZX1mb3IodmFyIGo9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2o+PTA7LS1qKXt2YXIgej10aGlzLnRyeUVudHJpZXNbal0sRz16LmNvbXBsZXRpb247aWYoei50cnlMb2M9PT0icm9vdCIpcmV0dXJuIGIoImVuZCIpO2lmKHoudHJ5TG9jPD10aGlzLnByZXYpe3ZhciByZT1yLmNhbGwoeiwiY2F0Y2hMb2MiKSxiZT1yLmNhbGwoeiwiZmluYWxseUxvYyIpO2lmKHJlJiZiZSl7aWYodGhpcy5wcmV2PHouY2F0Y2hMb2MpcmV0dXJuIGIoei5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PHouZmluYWxseUxvYylyZXR1cm4gYih6LmZpbmFsbHlMb2MpfWVsc2UgaWYocmUpe2lmKHRoaXMucHJldjx6LmNhdGNoTG9jKXJldHVybiBiKHouY2F0Y2hMb2MsITApfWVsc2V7aWYoIWJlKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8ei5maW5hbGx5TG9jKXJldHVybiBiKHouZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihSLFApe2Zvcih2YXIgYj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7Yj49MDstLWIpe3ZhciBqPXRoaXMudHJ5RW50cmllc1tiXTtpZihqLnRyeUxvYzw9dGhpcy5wcmV2JiZyLmNhbGwoaiwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8ai5maW5hbGx5TG9jKXt2YXIgej1qO2JyZWFrfX16JiYoUj09PSJicmVhayJ8fFI9PT0iY29udGludWUiKSYmei50cnlMb2M8PVAmJlA8PXouZmluYWxseUxvYyYmKHo9bnVsbCk7dmFyIEc9ej96LmNvbXBsZXRpb246e307cmV0dXJuIEcudHlwZT1SLEcuYXJnPVAsej8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD16LmZpbmFsbHlMb2Msdyk6dGhpcy5jb21wbGV0ZShHKX0sY29tcGxldGU6ZnVuY3Rpb24oUixQKXtpZihSLnR5cGU9PT0idGhyb3ciKXRocm93IFIuYXJnO3JldHVybiBSLnR5cGU9PT0iYnJlYWsifHxSLnR5cGU9PT0iY29udGludWUiP3RoaXMubmV4dD1SLmFyZzpSLnR5cGU9PT0icmV0dXJuIj8odGhpcy5ydmFsPXRoaXMuYXJnPVIuYXJnLHRoaXMubWV0aG9kPSJyZXR1cm4iLHRoaXMubmV4dD0iZW5kIik6Ui50eXBlPT09Im5vcm1hbCImJlAmJih0aGlzLm5leHQ9UCksd30sZmluaXNoOmZ1bmN0aW9uKFIpe2Zvcih2YXIgUD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7UD49MDstLVApe3ZhciBiPXRoaXMudHJ5RW50cmllc1tQXTtpZihiLmZpbmFsbHlMb2M9PT1SKXJldHVybiB0aGlzLmNvbXBsZXRlKGIuY29tcGxldGlvbixiLmFmdGVyTG9jKSxLKGIpLHd9fSxjYXRjaDpmdW5jdGlvbihSKXtmb3IodmFyIFA9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO1A+PTA7LS1QKXt2YXIgYj10aGlzLnRyeUVudHJpZXNbUF07aWYoYi50cnlMb2M9PT1SKXt2YXIgaj1iLmNvbXBsZXRpb247aWYoai50eXBlPT09InRocm93Iil7dmFyIHo9ai5hcmc7SyhiKX1yZXR1cm4gen19dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihSLFAsYil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlooUikscmVzdWx0TmFtZTpQLG5leHRMb2M6Yn0sdGhpcy5tZXRob2Q9PT0ibmV4dCImJih0aGlzLmFyZz10KSx3fX0sZX1mdW5jdGlvbiBEMCh0LGUsbixyLGksbyxsKXt0cnl7dmFyIHM9dFtvXShsKSxhPXMudmFsdWV9Y2F0Y2goYyl7bihjKTtyZXR1cm59cy5kb25lP2UoYSk6UHJvbWlzZS5yZXNvbHZlKGEpLnRoZW4ocixpKX1mdW5jdGlvbiBsUyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLGkpe3ZhciBvPXQuYXBwbHkoZSxuKTtmdW5jdGlvbiBsKGEpe0QwKG8scixpLGwscywibmV4dCIsYSl9ZnVuY3Rpb24gcyhhKXtEMChvLHIsaSxsLHMsInRocm93IixhKX1sKHZvaWQgMCl9KX19dmFyIHQyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtHbih0aGlzLHQpLHRoaXMuaG9zdD1lfXJldHVybiBZbih0LFt7a2V5OiJnZXREaXNhYmxlVXJsIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4iIi5jb25jYXQodGhpcy5ob3N0LCIvZGlzYWJsZT9yZWRpcmVjdF90bz0iKS5jb25jYXQoZW5jb2RlVVJJQ29tcG9uZW50KG4pKX19LHtrZXk6ImdldExvZ2luVXJsIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4iIi5jb25jYXQodGhpcy5ob3N0LCIvYXV0aG9yaXplP3JlZGlyZWN0X3RvPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobikpfX0se2tleToiZ2V0RW5hYmxlVXJsIix2YWx1ZTpmdW5jdGlvbihuKXtyZXR1cm4iIi5jb25jYXQodGhpcy5ob3N0LCIvZW5hYmxlP3JlZGlyZWN0X3RvPSIpLmNvbmNhdChlbmNvZGVVUklDb21wb25lbnQobikpfX0se2tleToiZ2V0UGF0Y2hlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1sUyhyYygpLm1hcmsoZnVuY3Rpb24gcihpKXt2YXIgbyxsLHM7cmV0dXJuIHJjKCkud3JhcChmdW5jdGlvbihjKXtmb3IoOzspc3dpdGNoKGMucHJldj1jLm5leHQpe2Nhc2UgMDpyZXR1cm4gbz1pLnBhdGNoSWRzLGw9aS5oZWFkZXJzLHM9bz8iPyIuY29uY2F0KG8ubWFwKGZ1bmN0aW9uKHUpe3JldHVybiIiLmNvbmNhdCh1LCI9IikuY29uY2F0KGVuY29kZVVSSUNvbXBvbmVudCh1KSl9KS5qb2luKCImIikpOiIiLGMuYWJydXB0KCJyZXR1cm4iLGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi9wYXRjaGVzL34iKS5jb25jYXQocykse2hlYWRlcnM6bHx8eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiB0YSh1KX0pLmNhdGNoKGVhKSk7Y2FzZSAzOmNhc2UiZW5kIjpyZXR1cm4gYy5zdG9wKCl9fSxyLHRoaXMpfSkpO2Z1bmN0aW9uIG4ocil7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBufSgpfSx7a2V5OiJnZXRFZGl0VXJsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIiLmNvbmNhdCh0aGlzLmhvc3QsIi9zdGF0aWMvZWRpdCIpfX0se2tleToicG9zdFBhdGNoZXMiLHZhbHVlOmZ1bmN0aW9uKG4scixpKXtyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3BhdGNoZXMvfiIpLHtoZWFkZXJzOml8fHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LG1ldGhvZDoiUE9TVCIsYm9keTpKU09OLnN0cmluZ2lmeShtZSh7fSxuLHIpKX0pLnRoZW4oZnVuY3Rpb24obyl7cmV0dXJuIHRhKG8pfSkuY2F0Y2goZWEpfX0se2tleToiZ2V0U2Vzc2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL3Nlc3Npb24iKSkudGhlbihmdW5jdGlvbihuKXtyZXR1cm4gdGEobikuY2F0Y2goZWEpfSl9fSx7a2V5OiJnZXRUcmVlIix2YWx1ZTpmdW5jdGlvbihuKXt2YXIgcj1uLnBhdGNoLGk9cj09PXZvaWQgMD8hMTpyLG89bi5pbmNsdWRlU2NoZW1hLGw9bz09PXZvaWQgMD8hMTpvLHM9bi5pbmNsdWRlU291cmNlLGE9cz09PXZvaWQgMD8hMTpzLGM9bi50cmVlUGF0aCx1PWM9PT12b2lkIDA/Ii8iOmMsZD1uLmhlYWRlcnMsZj1uZXcgVVJMU2VhcmNoUGFyYW1zO3JldHVybiBmLnNldCgicGF0Y2giLGkudG9TdHJpbmcoKSksZi5zZXQoInNjaGVtYSIsbC50b1N0cmluZygpKSxmLnNldCgic291cmNlIixhLnRvU3RyaW5nKCkpLGZldGNoKCIiLmNvbmNhdCh0aGlzLmhvc3QsIi90cmVlL34iKS5jb25jYXQodSwiPyIpLmNvbmNhdChmLnRvU3RyaW5nKCkpLHtoZWFkZXJzOmR9KS50aGVuKGZ1bmN0aW9uKHApe3JldHVybiB0YShwKX0pLmNhdGNoKGVhKX19LHtrZXk6InBvc3RDb21taXQiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciByPW4ucGF0Y2hlcyxpPW4uaGVhZGVycztyZXR1cm4gZmV0Y2goIiIuY29uY2F0KHRoaXMuaG9zdCwiL2NvbW1pdCIpLHttZXRob2Q6IlBPU1QiLGJvZHk6SlNPTi5zdHJpbmdpZnkoe3BhdGNoZXM6cn0pLGhlYWRlcnM6aXx8eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGZ1bmN0aW9uKG8pe3JldHVybiB0YShvKX0pLmNhdGNoKGVhKX19XSksdH0oKTtmdW5jdGlvbiBlYSh0KXtyZXR1cm4gVXIoe3N0YXR1c0NvZGU6NTAwLG1lc3NhZ2U6dCBpbnN0YW5jZW9mIEVycm9yP3QubWVzc2FnZToiVW5rbm93biBlcnJvciJ9KX1mdW5jdGlvbiB0YSh0KXtyZXR1cm4gdG0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHRtKCl7cmV0dXJuIHRtPWxTKHJjKCkubWFyayhmdW5jdGlvbiB0KGUpe3ZhciBuO3JldHVybiByYygpLndyYXAoZnVuY3Rpb24oaSl7Zm9yKDs7KXN3aXRjaChpLnByZXY9aS5uZXh0KXtjYXNlIDA6aWYoaS5wcmV2PTAsIWUub2spe2kubmV4dD05O2JyZWFrfXJldHVybiBpLnQwPUZvLGkubmV4dD01LGUuanNvbigpO2Nhc2UgNTpyZXR1cm4gaS50MT1pLnNlbnQsaS5hYnJ1cHQoInJldHVybiIsaS50MC5vay5jYWxsKGkudDAsaS50MSkpO2Nhc2UgOTpyZXR1cm4gaS5wcmV2PTksaS5uZXh0PTEyLGUuanNvbigpO2Nhc2UgMTI6cmV0dXJuIG49aS5zZW50LGkuYWJydXB0KCJyZXR1cm4iLFVyKHtzdGF0dXNDb2RlOmUuc3RhdHVzLG1lc3NhZ2U6bi5tZXNzYWdlfHxlLnN0YXR1c1RleHQsZGV0YWlsczpuLmRldGFpbHN8fE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhuKS5maWx0ZXIoZnVuY3Rpb24obyl7dmFyIGw9bm8obywxKSxzPWxbMF07cmV0dXJuIHMhPT0ibWVzc2FnZSJ9KSl9KSk7Y2FzZSAxNjpyZXR1cm4gaS5wcmV2PTE2LGkudDI9aS5jYXRjaCg5KSxpLmFicnVwdCgicmV0dXJuIixVcih7c3RhdHVzQ29kZTplLnN0YXR1cyxtZXNzYWdlOmUuc3RhdHVzVGV4dH0pKTtjYXNlIDE5OmkubmV4dD0yNDticmVhaztjYXNlIDIxOnJldHVybiBpLnByZXY9MjEsaS50Mz1pLmNhdGNoKDApLGkuYWJydXB0KCJyZXR1cm4iLFVyKHttZXNzYWdlOmkudDMgaW5zdGFuY2VvZiBFcnJvcj9pLnQzLm1lc3NhZ2U6IlVua25vd24gZXJyb3IifSkpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBpLnN0b3AoKX19LHQsbnVsbCxbWzAsMjFdLFs5LDE2XV0pfSkpLHRtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcm49e2NvbnZlcnRGaWxlU291cmNlOm5TLGdldFNjaGVtYTp2TixnZXRWYWxQYXRoOl9OLGdldFZhbDpqTixnZXRTb3VyY2U6JE4scmVzb2x2ZVBhdGg6TE4sc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGg6VE4saXNWYWw6eE4sY3JlYXRlVmFsUGF0aE9mSXRlbTpycixnZXRTSEEyNTZIYXNoOmUyLGNyZWF0ZVBhdGNoSlNPTlBhdGg6ZnVuY3Rpb24oZSl7cmV0dXJuIi8iLmNvbmNhdChlLnNwbGl0KCIuIikubWFwKGZ1bmN0aW9uKG4pe3JldHVybiBuJiZuMihuKX0pLmpvaW4oIi8iKSl9LFZBTF9FTkFCTEVfQ09PS0lFX05BTUU6InZhbF9lbmFibGUiLFZBTF9TVEFURV9DT09LSUU6InZhbF9zdGF0ZSIsVkFMX1NFU1NJT05fQ09PS0lFOiJ2YWxfc2Vzc2lvbiJ9O2Z1bmN0aW9uIG4yKHQpe3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaHtyZXR1cm4gdH19dmFyIHNTPXtleHBvcnRzOnt9fTsvKiEKCUNvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLgoJTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWUKCWh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXMKKi8oZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7dmFyIGU9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbigpe2Zvcih2YXIgcj1bXSxpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKyl7dmFyIG89YXJndW1lbnRzW2ldO2lmKG8pe3ZhciBsPXR5cGVvZiBvO2lmKGw9PT0ic3RyaW5nInx8bD09PSJudW1iZXIiKXIucHVzaChvKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobykpe2lmKG8ubGVuZ3RoKXt2YXIgcz1uLmFwcGx5KG51bGwsbyk7cyYmci5wdXNoKHMpfX1lbHNlIGlmKGw9PT0ib2JqZWN0Iil7aWYoby50b1N0cmluZyE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcmJiFvLnRvU3RyaW5nLnRvU3RyaW5nKCkuaW5jbHVkZXMoIltuYXRpdmUgY29kZV0iKSl7ci5wdXNoKG8udG9TdHJpbmcoKSk7Y29udGludWV9Zm9yKHZhciBhIGluIG8pZS5jYWxsKG8sYSkmJm9bYV0mJnIucHVzaChhKX19fXJldHVybiByLmpvaW4oIiAiKX10LmV4cG9ydHM/KG4uZGVmYXVsdD1uLHQuZXhwb3J0cz1uKTp3aW5kb3cuY2xhc3NOYW1lcz1ufSkoKX0pKHNTKTt2YXIgcjI9c1MuZXhwb3J0cztjb25zdCBGbj1PYyhyMik7ZnVuY3Rpb24gb2UoKXtyZXR1cm4gb2U9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbih0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJih0W3JdPW5bcl0pfXJldHVybiB0fSxvZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gaTIodCxlKXt0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnQhPW51bGwmJih0LmN1cnJlbnQ9ZSl9ZnVuY3Rpb24gYVMoLi4udCl7cmV0dXJuIGU9PnQuZm9yRWFjaChuPT5pMihuLGUpKX1mdW5jdGlvbiBzdCguLi50KXtyZXR1cm4gaC51c2VDYWxsYmFjayhhUyguLi50KSx0KX1jb25zdCBocz1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtjaGlsZHJlbjpuLC4uLnJ9PXQsaT1oLkNoaWxkcmVuLnRvQXJyYXkobiksbz1pLmZpbmQobDIpO2lmKG8pe2NvbnN0IGw9by5wcm9wcy5jaGlsZHJlbixzPWkubWFwKGE9PmE9PT1vP2guQ2hpbGRyZW4uY291bnQobCk+MT9oLkNoaWxkcmVuLm9ubHkobnVsbCk6aC5pc1ZhbGlkRWxlbWVudChsKT9sLnByb3BzLmNoaWxkcmVuOm51bGw6YSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChubSxvZSh7fSxyLHtyZWY6ZX0pLGguaXNWYWxpZEVsZW1lbnQobCk/aC5jbG9uZUVsZW1lbnQobCx2b2lkIDAscyk6bnVsbCl9cmV0dXJuIGguY3JlYXRlRWxlbWVudChubSxvZSh7fSxyLHtyZWY6ZX0pLG4pfSk7aHMuZGlzcGxheU5hbWU9IlNsb3QiO2NvbnN0IG5tPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e2NoaWxkcmVuOm4sLi4ucn09dDtyZXR1cm4gaC5pc1ZhbGlkRWxlbWVudChuKT9oLmNsb25lRWxlbWVudChuLHsuLi5zMihyLG4ucHJvcHMpLHJlZjplP2FTKGUsbi5yZWYpOm4ucmVmfSk6aC5DaGlsZHJlbi5jb3VudChuKT4xP2guQ2hpbGRyZW4ub25seShudWxsKTpudWxsfSk7bm0uZGlzcGxheU5hbWU9IlNsb3RDbG9uZSI7Y29uc3QgbzI9KHtjaGlsZHJlbjp0fSk9PmguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsdCk7ZnVuY3Rpb24gbDIodCl7cmV0dXJuIGguaXNWYWxpZEVsZW1lbnQodCkmJnQudHlwZT09PW8yfWZ1bmN0aW9uIHMyKHQsZSl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IHIgaW4gZSl7Y29uc3QgaT10W3JdLG89ZVtyXTsvXm9uW0EtWl0vLnRlc3Qocik/aSYmbz9uW3JdPSguLi5zKT0+e28oLi4ucyksaSguLi5zKX06aSYmKG5bcl09aSk6cj09PSJzdHlsZSI/bltyXT17Li4uaSwuLi5vfTpyPT09ImNsYXNzTmFtZSImJihuW3JdPVtpLG9dLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIikpfXJldHVybnsuLi50LC4uLm59fWNvbnN0IGEyPVsiYSIsImJ1dHRvbiIsImRpdiIsImZvcm0iLCJoMiIsImgzIiwiaW1nIiwiaW5wdXQiLCJsYWJlbCIsImxpIiwibmF2Iiwib2wiLCJwIiwic3BhbiIsInN2ZyIsInVsIl0sS2U9YTIucmVkdWNlKCh0LGUpPT57Y29uc3Qgbj1oLmZvcndhcmRSZWYoKHIsaSk9Pntjb25zdHthc0NoaWxkOm8sLi4ubH09cixzPW8/aHM6ZTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pnt3aW5kb3dbU3ltYm9sLmZvcigicmFkaXgtdWkiKV09ITB9LFtdKSxoLmNyZWF0ZUVsZW1lbnQocyxvZSh7fSxsLHtyZWY6aX0pKX0pO3JldHVybiBuLmRpc3BsYXlOYW1lPWBQcmltaXRpdmUuJHtlfWAsey4uLnQsW2VdOm59fSx7fSk7ZnVuY3Rpb24gYzIodCxlKXt0JiZZci5mbHVzaFN5bmMoKCk9PnQuZGlzcGF0Y2hFdmVudChlKSl9Y29uc3QgSG49Z2xvYmFsVGhpcyE9bnVsbCYmZ2xvYmFsVGhpcy5kb2N1bWVudD9oLnVzZUxheW91dEVmZmVjdDooKT0+e307ZnVuY3Rpb24gdTIodCxlKXtyZXR1cm4gaC51c2VSZWR1Y2VyKChuLHIpPT57Y29uc3QgaT1lW25dW3JdO3JldHVybiBpPz9ufSx0KX1jb25zdCAkcz10PT57Y29uc3R7cHJlc2VudDplLGNoaWxkcmVuOm59PXQscj1kMihlKSxpPXR5cGVvZiBuPT0iZnVuY3Rpb24iP24oe3ByZXNlbnQ6ci5pc1ByZXNlbnR9KTpoLkNoaWxkcmVuLm9ubHkobiksbz1zdChyLnJlZixpLnJlZik7cmV0dXJuIHR5cGVvZiBuPT0iZnVuY3Rpb24ifHxyLmlzUHJlc2VudD9oLmNsb25lRWxlbWVudChpLHtyZWY6b30pOm51bGx9OyRzLmRpc3BsYXlOYW1lPSJQcmVzZW5jZSI7ZnVuY3Rpb24gZDIodCl7Y29uc3RbZSxuXT1oLnVzZVN0YXRlKCkscj1oLnVzZVJlZih7fSksaT1oLnVzZVJlZih0KSxvPWgudXNlUmVmKCJub25lIiksbD10PyJtb3VudGVkIjoidW5tb3VudGVkIixbcyxhXT11MihsLHttb3VudGVkOntVTk1PVU5UOiJ1bm1vdW50ZWQiLEFOSU1BVElPTl9PVVQ6InVubW91bnRTdXNwZW5kZWQifSx1bm1vdW50U3VzcGVuZGVkOntNT1VOVDoibW91bnRlZCIsQU5JTUFUSU9OX0VORDoidW5tb3VudGVkIn0sdW5tb3VudGVkOntNT1VOVDoibW91bnRlZCJ9fSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgYz1tdShyLmN1cnJlbnQpO28uY3VycmVudD1zPT09Im1vdW50ZWQiP2M6Im5vbmUifSxbc10pLEhuKCgpPT57Y29uc3QgYz1yLmN1cnJlbnQsdT1pLmN1cnJlbnQ7aWYodSE9PXQpe2NvbnN0IGY9by5jdXJyZW50LHA9bXUoYyk7dD9hKCJNT1VOVCIpOnA9PT0ibm9uZSJ8fChjPT1udWxsP3ZvaWQgMDpjLmRpc3BsYXkpPT09Im5vbmUiP2EoIlVOTU9VTlQiKTphKHUmJmYhPT1wPyJBTklNQVRJT05fT1VUIjoiVU5NT1VOVCIpLGkuY3VycmVudD10fX0sW3QsYV0pLEhuKCgpPT57aWYoZSl7Y29uc3QgYz1kPT57Y29uc3QgcD1tdShyLmN1cnJlbnQpLmluY2x1ZGVzKGQuYW5pbWF0aW9uTmFtZSk7ZC50YXJnZXQ9PT1lJiZwJiZZci5mbHVzaFN5bmMoKCk9PmEoIkFOSU1BVElPTl9FTkQiKSl9LHU9ZD0+e2QudGFyZ2V0PT09ZSYmKG8uY3VycmVudD1tdShyLmN1cnJlbnQpKX07cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uc3RhcnQiLHUpLGUuYWRkRXZlbnRMaXN0ZW5lcigiYW5pbWF0aW9uY2FuY2VsIixjKSxlLmFkZEV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmVuZCIsYyksKCk9PntlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbnN0YXJ0Iix1KSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFuaW1hdGlvbmNhbmNlbCIsYyksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJhbmltYXRpb25lbmQiLGMpfX1lbHNlIGEoIkFOSU1BVElPTl9FTkQiKX0sW2UsYV0pLHtpc1ByZXNlbnQ6WyJtb3VudGVkIiwidW5tb3VudFN1c3BlbmRlZCJdLmluY2x1ZGVzKHMpLHJlZjpoLnVzZUNhbGxiYWNrKGM9PntjJiYoci5jdXJyZW50PWdldENvbXB1dGVkU3R5bGUoYykpLG4oYyl9LFtdKX19ZnVuY3Rpb24gbXUodCl7cmV0dXJuKHQ9PW51bGw/dm9pZCAwOnQuYW5pbWF0aW9uTmFtZSl8fCJub25lIn1mdW5jdGlvbiBjbCh0LGU9W10pe2xldCBuPVtdO2Z1bmN0aW9uIHIobyxsKXtjb25zdCBzPWguY3JlYXRlQ29udGV4dChsKSxhPW4ubGVuZ3RoO249Wy4uLm4sbF07ZnVuY3Rpb24gYyhkKXtjb25zdHtzY29wZTpmLGNoaWxkcmVuOnAsLi4uZ309ZCxtPShmPT1udWxsP3ZvaWQgMDpmW3RdW2FdKXx8cyx3PWgudXNlTWVtbygoKT0+ZyxPYmplY3QudmFsdWVzKGcpKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KG0uUHJvdmlkZXIse3ZhbHVlOnd9LHApfWZ1bmN0aW9uIHUoZCxmKXtjb25zdCBwPShmPT1udWxsP3ZvaWQgMDpmW3RdW2FdKXx8cyxnPWgudXNlQ29udGV4dChwKTtpZihnKXJldHVybiBnO2lmKGwhPT12b2lkIDApcmV0dXJuIGw7dGhyb3cgbmV3IEVycm9yKGBcYCR7ZH1cYCBtdXN0IGJlIHVzZWQgd2l0aGluIFxgJHtvfVxgYCl9cmV0dXJuIGMuZGlzcGxheU5hbWU9bysiUHJvdmlkZXIiLFtjLHVdfWNvbnN0IGk9KCk9Pntjb25zdCBvPW4ubWFwKGw9PmguY3JlYXRlQ29udGV4dChsKSk7cmV0dXJuIGZ1bmN0aW9uKHMpe2NvbnN0IGE9KHM9PW51bGw/dm9pZCAwOnNbdF0pfHxvO3JldHVybiBoLnVzZU1lbW8oKCk9Pih7W2BfX3Njb3BlJHt0fWBdOnsuLi5zLFt0XTphfX0pLFtzLGFdKX19O3JldHVybiBpLnNjb3BlTmFtZT10LFtyLGYyKGksLi4uZSldfWZ1bmN0aW9uIGYyKC4uLnQpe2NvbnN0IGU9dFswXTtpZih0Lmxlbmd0aD09PTEpcmV0dXJuIGU7Y29uc3Qgbj0oKT0+e2NvbnN0IHI9dC5tYXAoaT0+KHt1c2VTY29wZTppKCksc2NvcGVOYW1lOmkuc2NvcGVOYW1lfSkpO3JldHVybiBmdW5jdGlvbihvKXtjb25zdCBsPXIucmVkdWNlKChzLHt1c2VTY29wZTphLHNjb3BlTmFtZTpjfSk9Pntjb25zdCBkPWEobylbYF9fc2NvcGUke2N9YF07cmV0dXJuey4uLnMsLi4uZH19LHt9KTtyZXR1cm4gaC51c2VNZW1vKCgpPT4oe1tgX19zY29wZSR7ZS5zY29wZU5hbWV9YF06bH0pLFtsXSl9fTtyZXR1cm4gbi5zY29wZU5hbWU9ZS5zY29wZU5hbWUsbn1mdW5jdGlvbiBlbih0KXtjb25zdCBlPWgudXNlUmVmKHQpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2UuY3VycmVudD10fSksaC51c2VNZW1vKCgpPT4oLi4ubik9Pnt2YXIgcjtyZXR1cm4ocj1lLmN1cnJlbnQpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5jYWxsKGUsLi4ubil9LFtdKX1jb25zdCBwMj1oLmNyZWF0ZUNvbnRleHQodm9pZCAwKTtmdW5jdGlvbiBvdih0KXtjb25zdCBlPWgudXNlQ29udGV4dChwMik7cmV0dXJuIHR8fGV8fCJsdHIifWZ1bmN0aW9uIHJtKHQsW2Usbl0pe3JldHVybiBNYXRoLm1pbihuLE1hdGgubWF4KGUsdCkpfWZ1bmN0aW9uIG50KHQsZSx7Y2hlY2tGb3JEZWZhdWx0UHJldmVudGVkOm49ITB9PXt9KXtyZXR1cm4gZnVuY3Rpb24oaSl7aWYodD09bnVsbHx8dChpKSxuPT09ITF8fCFpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuIGU9PW51bGw/dm9pZCAwOmUoaSl9fWZ1bmN0aW9uIGgyKHQsZSl7cmV0dXJuIGgudXNlUmVkdWNlcigobixyKT0+e2NvbnN0IGk9ZVtuXVtyXTtyZXR1cm4gaT8/bn0sdCl9Y29uc3QgY1M9IlNjcm9sbEFyZWEiLFt1UyxJSV09Y2woY1MpLFttMixjcl09dVMoY1MpLGcyPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTY3JvbGxBcmVhOm4sdHlwZTpyPSJob3ZlciIsZGlyOmksc2Nyb2xsSGlkZURlbGF5Om89NjAwLC4uLmx9PXQsW3MsYV09aC51c2VTdGF0ZShudWxsKSxbYyx1XT1oLnVzZVN0YXRlKG51bGwpLFtkLGZdPWgudXNlU3RhdGUobnVsbCksW3AsZ109aC51c2VTdGF0ZShudWxsKSxbbSx3XT1oLnVzZVN0YXRlKG51bGwpLFt2LHhdPWgudXNlU3RhdGUoMCksW18sU109aC51c2VTdGF0ZSgwKSxbRSxrXT1oLnVzZVN0YXRlKCExKSxbQyxOXT1oLnVzZVN0YXRlKCExKSxBPXN0KGUsRD0+YShEKSksVD1vdihpKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KG0yLHtzY29wZTpuLHR5cGU6cixkaXI6VCxzY3JvbGxIaWRlRGVsYXk6byxzY3JvbGxBcmVhOnMsdmlld3BvcnQ6YyxvblZpZXdwb3J0Q2hhbmdlOnUsY29udGVudDpkLG9uQ29udGVudENoYW5nZTpmLHNjcm9sbGJhclg6cCxvblNjcm9sbGJhclhDaGFuZ2U6ZyxzY3JvbGxiYXJYRW5hYmxlZDpFLG9uU2Nyb2xsYmFyWEVuYWJsZWRDaGFuZ2U6ayxzY3JvbGxiYXJZOm0sb25TY3JvbGxiYXJZQ2hhbmdlOncsc2Nyb2xsYmFyWUVuYWJsZWQ6QyxvblNjcm9sbGJhcllFbmFibGVkQ2hhbmdlOk4sb25Db3JuZXJXaWR0aENoYW5nZTp4LG9uQ29ybmVySGVpZ2h0Q2hhbmdlOlN9LGguY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe2RpcjpUfSxsLHtyZWY6QSxzdHlsZTp7cG9zaXRpb246InJlbGF0aXZlIiwiLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgiOnYrInB4IiwiLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItaGVpZ2h0IjpfKyJweCIsLi4udC5zdHlsZX19KSkpfSksdjI9IlNjcm9sbEFyZWFWaWV3cG9ydCIseTI9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixjaGlsZHJlbjpyLC4uLml9PXQsbz1jcih2MixuKSxsPWgudXNlUmVmKG51bGwpLHM9c3QoZSxsLG8ub25WaWV3cG9ydENoYW5nZSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsaC5jcmVhdGVFbGVtZW50KCJzdHlsZSIse2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MOntfX2h0bWw6IltkYXRhLXJhZGl4LXNjcm9sbC1hcmVhLXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2Nyb2xsLWFyZWEtdmlld3BvcnRdOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9In19KSxoLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHsiZGF0YS1yYWRpeC1zY3JvbGwtYXJlYS12aWV3cG9ydCI6IiJ9LGkse3JlZjpzLHN0eWxlOntvdmVyZmxvd1g6by5zY3JvbGxiYXJYRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIixvdmVyZmxvd1k6by5zY3JvbGxiYXJZRW5hYmxlZD8ic2Nyb2xsIjoiaGlkZGVuIiwuLi50LnN0eWxlfX0pLGguY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOm8ub25Db250ZW50Q2hhbmdlLHN0eWxlOnttaW5XaWR0aDoiMTAwJSIsZGlzcGxheToidGFibGUifX0scikpKX0pLENpPSJTY3JvbGxBcmVhU2Nyb2xsYmFyIixkUz1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09dCxpPWNyKENpLHQuX19zY29wZVNjcm9sbEFyZWEpLHtvblNjcm9sbGJhclhFbmFibGVkQ2hhbmdlOm8sb25TY3JvbGxiYXJZRW5hYmxlZENoYW5nZTpsfT1pLHM9dC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIjtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PihzP28oITApOmwoITApLCgpPT57cz9vKCExKTpsKCExKX0pLFtzLG8sbF0pLGkudHlwZT09PSJob3ZlciI/aC5jcmVhdGVFbGVtZW50KHgyLG9lKHt9LHIse3JlZjplLGZvcmNlTW91bnQ6bn0pKTppLnR5cGU9PT0ic2Nyb2xsIj9oLmNyZWF0ZUVsZW1lbnQoXzIsb2Uoe30scix7cmVmOmUsZm9yY2VNb3VudDpufSkpOmkudHlwZT09PSJhdXRvIj9oLmNyZWF0ZUVsZW1lbnQoZlMsb2Uoe30scix7cmVmOmUsZm9yY2VNb3VudDpufSkpOmkudHlwZT09PSJhbHdheXMiP2guY3JlYXRlRWxlbWVudChsdixvZSh7fSxyLHtyZWY6ZX0pKTpudWxsfSkseDI9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PXQsaT1jcihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSxbbyxsXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBzPWkuc2Nyb2xsQXJlYTtsZXQgYT0wO2lmKHMpe2NvbnN0IGM9KCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGEpLGwoITApfSx1PSgpPT57YT13aW5kb3cuc2V0VGltZW91dCgoKT0+bCghMSksaS5zY3JvbGxIaWRlRGVsYXkpfTtyZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLGMpLHMuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix1KSwoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoYSkscy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVyZW50ZXIiLGMpLHMucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmxlYXZlIix1KX19fSxbaS5zY3JvbGxBcmVhLGkuc2Nyb2xsSGlkZURlbGF5XSksaC5jcmVhdGVFbGVtZW50KCRzLHtwcmVzZW50Om58fG99LGguY3JlYXRlRWxlbWVudChmUyxvZSh7ImRhdGEtc3RhdGUiOm8/InZpc2libGUiOiJoaWRkZW4ifSxyLHtyZWY6ZX0pKSl9KSxfMj1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtmb3JjZU1vdW50Om4sLi4ucn09dCxpPWNyKENpLHQuX19zY29wZVNjcm9sbEFyZWEpLG89dC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIixsPVRmKCgpPT5hKCJTQ1JPTExfRU5EIiksMTAwKSxbcyxhXT1oMigiaGlkZGVuIix7aGlkZGVuOntTQ1JPTEw6InNjcm9sbGluZyJ9LHNjcm9sbGluZzp7U0NST0xMX0VORDoiaWRsZSIsUE9JTlRFUl9FTlRFUjoiaW50ZXJhY3RpbmcifSxpbnRlcmFjdGluZzp7U0NST0xMOiJpbnRlcmFjdGluZyIsUE9JTlRFUl9MRUFWRToiaWRsZSJ9LGlkbGU6e0hJREU6ImhpZGRlbiIsU0NST0xMOiJzY3JvbGxpbmciLFBPSU5URVJfRU5URVI6ImludGVyYWN0aW5nIn19KTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntpZihzPT09ImlkbGUiKXtjb25zdCBjPXdpbmRvdy5zZXRUaW1lb3V0KCgpPT5hKCJISURFIiksaS5zY3JvbGxIaWRlRGVsYXkpO3JldHVybigpPT53aW5kb3cuY2xlYXJUaW1lb3V0KGMpfX0sW3MsaS5zY3JvbGxIaWRlRGVsYXksYV0pLGgudXNlRWZmZWN0KCgpPT57Y29uc3QgYz1pLnZpZXdwb3J0LHU9bz8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCI7aWYoYyl7bGV0IGQ9Y1t1XTtjb25zdCBmPSgpPT57Y29uc3QgcD1jW3VdO2QhPT1wJiYoYSgiU0NST0xMIiksbCgpKSxkPXB9O3JldHVybiBjLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbCIsZiksKCk9PmMucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKX19LFtpLnZpZXdwb3J0LG8sYSxsXSksaC5jcmVhdGVFbGVtZW50KCRzLHtwcmVzZW50Om58fHMhPT0iaGlkZGVuIn0saC5jcmVhdGVFbGVtZW50KGx2LG9lKHsiZGF0YS1zdGF0ZSI6cz09PSJoaWRkZW4iPyJoaWRkZW4iOiJ2aXNpYmxlIn0scix7cmVmOmUsb25Qb2ludGVyRW50ZXI6bnQodC5vblBvaW50ZXJFbnRlciwoKT0+YSgiUE9JTlRFUl9FTlRFUiIpKSxvblBvaW50ZXJMZWF2ZTpudCh0Lm9uUG9pbnRlckxlYXZlLCgpPT5hKCJQT0lOVEVSX0xFQVZFIikpfSkpKX0pLGZTPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0IG49Y3IoQ2ksdC5fX3Njb3BlU2Nyb2xsQXJlYSkse2ZvcmNlTW91bnQ6ciwuLi5pfT10LFtvLGxdPWgudXNlU3RhdGUoITEpLHM9dC5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIixhPVRmKCgpPT57aWYobi52aWV3cG9ydCl7Y29uc3QgYz1uLnZpZXdwb3J0Lm9mZnNldFdpZHRoPG4udmlld3BvcnQuc2Nyb2xsV2lkdGgsdT1uLnZpZXdwb3J0Lm9mZnNldEhlaWdodDxuLnZpZXdwb3J0LnNjcm9sbEhlaWdodDtsKHM/Yzp1KX19LDEwKTtyZXR1cm4gbXMobi52aWV3cG9ydCxhKSxtcyhuLmNvbnRlbnQsYSksaC5jcmVhdGVFbGVtZW50KCRzLHtwcmVzZW50OnJ8fG99LGguY3JlYXRlRWxlbWVudChsdixvZSh7ImRhdGEtc3RhdGUiOm8/InZpc2libGUiOiJoaWRkZW4ifSxpLHtyZWY6ZX0pKSl9KSxsdj1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtvcmllbnRhdGlvbjpuPSJ2ZXJ0aWNhbCIsLi4ucn09dCxpPWNyKENpLHQuX19zY29wZVNjcm9sbEFyZWEpLG89aC51c2VSZWYobnVsbCksbD1oLnVzZVJlZigwKSxbcyxhXT1oLnVzZVN0YXRlKHtjb250ZW50OjAsdmlld3BvcnQ6MCxzY3JvbGxiYXI6e3NpemU6MCxwYWRkaW5nU3RhcnQ6MCxwYWRkaW5nRW5kOjB9fSksYz1nUyhzLnZpZXdwb3J0LHMuY29udGVudCksdT17Li4ucixzaXplczpzLG9uU2l6ZXNDaGFuZ2U6YSxoYXNUaHVtYjpjPjAmJmM8MSxvblRodW1iQ2hhbmdlOmY9Pm8uY3VycmVudD1mLG9uVGh1bWJQb2ludGVyVXA6KCk9PmwuY3VycmVudD0wLG9uVGh1bWJQb2ludGVyRG93bjpmPT5sLmN1cnJlbnQ9Zn07ZnVuY3Rpb24gZChmLHApe3JldHVybiBUMihmLGwuY3VycmVudCxzLHApfXJldHVybiBuPT09Imhvcml6b250YWwiP2guY3JlYXRlRWxlbWVudCh3MixvZSh7fSx1LHtyZWY6ZSxvblRodW1iUG9zaXRpb25DaGFuZ2U6KCk9PntpZihpLnZpZXdwb3J0JiZvLmN1cnJlbnQpe2NvbnN0IGY9aS52aWV3cG9ydC5zY3JvbGxMZWZ0LHA9STAoZixzLGkuZGlyKTtvLmN1cnJlbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke3B9cHgsIDAsIDApYH19LG9uV2hlZWxTY3JvbGw6Zj0+e2kudmlld3BvcnQmJihpLnZpZXdwb3J0LnNjcm9sbExlZnQ9Zil9LG9uRHJhZ1Njcm9sbDpmPT57aS52aWV3cG9ydCYmKGkudmlld3BvcnQuc2Nyb2xsTGVmdD1kKGYsaS5kaXIpKX19KSk6bj09PSJ2ZXJ0aWNhbCI/aC5jcmVhdGVFbGVtZW50KFMyLG9lKHt9LHUse3JlZjplLG9uVGh1bWJQb3NpdGlvbkNoYW5nZTooKT0+e2lmKGkudmlld3BvcnQmJm8uY3VycmVudCl7Y29uc3QgZj1pLnZpZXdwb3J0LnNjcm9sbFRvcCxwPUkwKGYscyk7by5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoMCwgJHtwfXB4LCAwKWB9fSxvbldoZWVsU2Nyb2xsOmY9PntpLnZpZXdwb3J0JiYoaS52aWV3cG9ydC5zY3JvbGxUb3A9Zil9LG9uRHJhZ1Njcm9sbDpmPT57aS52aWV3cG9ydCYmKGkudmlld3BvcnQuc2Nyb2xsVG9wPWQoZikpfX0pKTpudWxsfSksdzI9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7c2l6ZXM6bixvblNpemVzQ2hhbmdlOnIsLi4uaX09dCxvPWNyKENpLHQuX19zY29wZVNjcm9sbEFyZWEpLFtsLHNdPWgudXNlU3RhdGUoKSxhPWgudXNlUmVmKG51bGwpLGM9c3QoZSxhLG8ub25TY3JvbGxiYXJYQ2hhbmdlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PnthLmN1cnJlbnQmJnMoZ2V0Q29tcHV0ZWRTdHlsZShhLmN1cnJlbnQpKX0sW2FdKSxoLmNyZWF0ZUVsZW1lbnQoaFMsb2UoeyJkYXRhLW9yaWVudGF0aW9uIjoiaG9yaXpvbnRhbCJ9LGkse3JlZjpjLHNpemVzOm4sc3R5bGU6e2JvdHRvbTowLGxlZnQ6by5kaXI9PT0icnRsIj8idmFyKC0tcmFkaXgtc2Nyb2xsLWFyZWEtY29ybmVyLXdpZHRoKSI6MCxyaWdodDpvLmRpcj09PSJsdHIiPyJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItd2lkdGgpIjowLCItLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLXdpZHRoIjokZihuKSsicHgiLC4uLnQuc3R5bGV9LG9uVGh1bWJQb2ludGVyRG93bjp1PT50Lm9uVGh1bWJQb2ludGVyRG93bih1LngpLG9uRHJhZ1Njcm9sbDp1PT50Lm9uRHJhZ1Njcm9sbCh1LngpLG9uV2hlZWxTY3JvbGw6KHUsZCk9PntpZihvLnZpZXdwb3J0KXtjb25zdCBmPW8udmlld3BvcnQuc2Nyb2xsTGVmdCt1LmRlbHRhWDt0Lm9uV2hlZWxTY3JvbGwoZikseVMoZixkKSYmdS5wcmV2ZW50RGVmYXVsdCgpfX0sb25SZXNpemU6KCk9PnthLmN1cnJlbnQmJm8udmlld3BvcnQmJmwmJnIoe2NvbnRlbnQ6by52aWV3cG9ydC5zY3JvbGxXaWR0aCx2aWV3cG9ydDpvLnZpZXdwb3J0Lm9mZnNldFdpZHRoLHNjcm9sbGJhcjp7c2l6ZTphLmN1cnJlbnQuY2xpZW50V2lkdGgscGFkZGluZ1N0YXJ0OlNkKGwucGFkZGluZ0xlZnQpLHBhZGRpbmdFbmQ6U2QobC5wYWRkaW5nUmlnaHQpfX0pfX0pKX0pLFMyPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3NpemVzOm4sb25TaXplc0NoYW5nZTpyLC4uLml9PXQsbz1jcihDaSx0Ll9fc2NvcGVTY3JvbGxBcmVhKSxbbCxzXT1oLnVzZVN0YXRlKCksYT1oLnVzZVJlZihudWxsKSxjPXN0KGUsYSxvLm9uU2Nyb2xsYmFyWUNoYW5nZSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57YS5jdXJyZW50JiZzKGdldENvbXB1dGVkU3R5bGUoYS5jdXJyZW50KSl9LFthXSksaC5jcmVhdGVFbGVtZW50KGhTLG9lKHsiZGF0YS1vcmllbnRhdGlvbiI6InZlcnRpY2FsIn0saSx7cmVmOmMsc2l6ZXM6bixzdHlsZTp7dG9wOjAscmlnaHQ6by5kaXI9PT0ibHRyIj8wOnZvaWQgMCxsZWZ0Om8uZGlyPT09InJ0bCI/MDp2b2lkIDAsYm90dG9tOiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS1jb3JuZXItaGVpZ2h0KSIsIi0tcmFkaXgtc2Nyb2xsLWFyZWEtdGh1bWItaGVpZ2h0IjokZihuKSsicHgiLC4uLnQuc3R5bGV9LG9uVGh1bWJQb2ludGVyRG93bjp1PT50Lm9uVGh1bWJQb2ludGVyRG93bih1LnkpLG9uRHJhZ1Njcm9sbDp1PT50Lm9uRHJhZ1Njcm9sbCh1LnkpLG9uV2hlZWxTY3JvbGw6KHUsZCk9PntpZihvLnZpZXdwb3J0KXtjb25zdCBmPW8udmlld3BvcnQuc2Nyb2xsVG9wK3UuZGVsdGFZO3Qub25XaGVlbFNjcm9sbChmKSx5UyhmLGQpJiZ1LnByZXZlbnREZWZhdWx0KCl9fSxvblJlc2l6ZTooKT0+e2EuY3VycmVudCYmby52aWV3cG9ydCYmbCYmcih7Y29udGVudDpvLnZpZXdwb3J0LnNjcm9sbEhlaWdodCx2aWV3cG9ydDpvLnZpZXdwb3J0Lm9mZnNldEhlaWdodCxzY3JvbGxiYXI6e3NpemU6YS5jdXJyZW50LmNsaWVudEhlaWdodCxwYWRkaW5nU3RhcnQ6U2QobC5wYWRkaW5nVG9wKSxwYWRkaW5nRW5kOlNkKGwucGFkZGluZ0JvdHRvbSl9fSl9fSkpfSksW0UyLHBTXT11UyhDaSksaFM9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixzaXplczpyLGhhc1RodW1iOmksb25UaHVtYkNoYW5nZTpvLG9uVGh1bWJQb2ludGVyVXA6bCxvblRodW1iUG9pbnRlckRvd246cyxvblRodW1iUG9zaXRpb25DaGFuZ2U6YSxvbkRyYWdTY3JvbGw6YyxvbldoZWVsU2Nyb2xsOnUsb25SZXNpemU6ZCwuLi5mfT10LHA9Y3IoQ2ksbiksW2csbV09aC51c2VTdGF0ZShudWxsKSx3PXN0KGUsQT0+bShBKSksdj1oLnVzZVJlZihudWxsKSx4PWgudXNlUmVmKCIiKSxfPXAudmlld3BvcnQsUz1yLmNvbnRlbnQtci52aWV3cG9ydCxFPWVuKHUpLGs9ZW4oYSksQz1UZihkLDEwKTtmdW5jdGlvbiBOKEEpe2lmKHYuY3VycmVudCl7Y29uc3QgVD1BLmNsaWVudFgtdi5jdXJyZW50LmxlZnQsRD1BLmNsaWVudFktdi5jdXJyZW50LnRvcDtjKHt4OlQseTpEfSl9fXJldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IEE9VD0+e2NvbnN0IEQ9VC50YXJnZXQ7KGc9PW51bGw/dm9pZCAwOmcuY29udGFpbnMoRCkpJiZFKFQsUyl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsQSx7cGFzc2l2ZTohMX0pLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ3aGVlbCIsQSx7cGFzc2l2ZTohMX0pfSxbXyxnLFMsRV0pLGgudXNlRWZmZWN0KGssW3Isa10pLG1zKGcsQyksbXMocC5jb250ZW50LEMpLGguY3JlYXRlRWxlbWVudChFMix7c2NvcGU6bixzY3JvbGxiYXI6ZyxoYXNUaHVtYjppLG9uVGh1bWJDaGFuZ2U6ZW4obyksb25UaHVtYlBvaW50ZXJVcDplbihsKSxvblRodW1iUG9zaXRpb25DaGFuZ2U6ayxvblRodW1iUG9pbnRlckRvd246ZW4ocyl9LGguY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe30sZix7cmVmOncsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsLi4uZi5zdHlsZX0sb25Qb2ludGVyRG93bjpudCh0Lm9uUG9pbnRlckRvd24sQT0+e0EuYnV0dG9uPT09MCYmKEEudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKSx2LmN1cnJlbnQ9Zy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4LmN1cnJlbnQ9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIscC52aWV3cG9ydCYmKHAudmlld3BvcnQuc3R5bGUuc2Nyb2xsQmVoYXZpb3I9ImF1dG8iKSxOKEEpKX0pLG9uUG9pbnRlck1vdmU6bnQodC5vblBvaW50ZXJNb3ZlLE4pLG9uUG9pbnRlclVwOm50KHQub25Qb2ludGVyVXAsQT0+e2NvbnN0IFQ9QS50YXJnZXQ7VC5oYXNQb2ludGVyQ2FwdHVyZShBLnBvaW50ZXJJZCkmJlQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKEEucG9pbnRlcklkKSxkb2N1bWVudC5ib2R5LnN0eWxlLndlYmtpdFVzZXJTZWxlY3Q9eC5jdXJyZW50LHAudmlld3BvcnQmJihwLnZpZXdwb3J0LnN0eWxlLnNjcm9sbEJlaGF2aW9yPSIiKSx2LmN1cnJlbnQ9bnVsbH0pfSkpKX0pLGltPSJTY3JvbGxBcmVhVGh1bWIiLEMyPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e2ZvcmNlTW91bnQ6biwuLi5yfT10LGk9cFMoaW0sdC5fX3Njb3BlU2Nyb2xsQXJlYSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudCgkcyx7cHJlc2VudDpufHxpLmhhc1RodW1ifSxoLmNyZWF0ZUVsZW1lbnQoYjIsb2Uoe3JlZjplfSxyKSkpfSksYjI9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6bixzdHlsZTpyLC4uLml9PXQsbz1jcihpbSxuKSxsPXBTKGltLG4pLHtvblRodW1iUG9zaXRpb25DaGFuZ2U6c309bCxhPXN0KGUsZD0+bC5vblRodW1iQ2hhbmdlKGQpKSxjPWgudXNlUmVmKCksdT1UZigoKT0+e2MuY3VycmVudCYmKGMuY3VycmVudCgpLGMuY3VycmVudD12b2lkIDApfSwxMDApO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGQ9by52aWV3cG9ydDtpZihkKXtjb25zdCBmPSgpPT57aWYodSgpLCFjLmN1cnJlbnQpe2NvbnN0IHA9TjIoZCxzKTtjLmN1cnJlbnQ9cCxzKCl9fTtyZXR1cm4gcygpLGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixmKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLGYpfX0sW28udmlld3BvcnQsdSxzXSksaC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImRhdGEtc3RhdGUiOmwuaGFzVGh1bWI/InZpc2libGUiOiJoaWRkZW4ifSxpLHtyZWY6YSxzdHlsZTp7d2lkdGg6InZhcigtLXJhZGl4LXNjcm9sbC1hcmVhLXRodW1iLXdpZHRoKSIsaGVpZ2h0OiJ2YXIoLS1yYWRpeC1zY3JvbGwtYXJlYS10aHVtYi1oZWlnaHQpIiwuLi5yfSxvblBvaW50ZXJEb3duQ2FwdHVyZTpudCh0Lm9uUG9pbnRlckRvd25DYXB0dXJlLGQ9Pntjb25zdCBwPWQudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGc9ZC5jbGllbnRYLXAubGVmdCxtPWQuY2xpZW50WS1wLnRvcDtsLm9uVGh1bWJQb2ludGVyRG93bih7eDpnLHk6bX0pfSksb25Qb2ludGVyVXA6bnQodC5vblBvaW50ZXJVcCxsLm9uVGh1bWJQb2ludGVyVXApfSkpfSksbVM9IlNjcm9sbEFyZWFDb3JuZXIiLGsyPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0IG49Y3IobVMsdC5fX3Njb3BlU2Nyb2xsQXJlYSkscj0hIShuLnNjcm9sbGJhclgmJm4uc2Nyb2xsYmFyWSk7cmV0dXJuIG4udHlwZSE9PSJzY3JvbGwiJiZyP2guY3JlYXRlRWxlbWVudCgkMixvZSh7fSx0LHtyZWY6ZX0pKTpudWxsfSksJDI9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNjcm9sbEFyZWE6biwuLi5yfT10LGk9Y3IobVMsbiksW28sbF09aC51c2VTdGF0ZSgwKSxbcyxhXT1oLnVzZVN0YXRlKDApLGM9ISEobyYmcyk7cmV0dXJuIG1zKGkuc2Nyb2xsYmFyWCwoKT0+e3ZhciB1O2NvbnN0IGQ9KCh1PWkuc2Nyb2xsYmFyWCk9PT1udWxsfHx1PT09dm9pZCAwP3ZvaWQgMDp1Lm9mZnNldEhlaWdodCl8fDA7aS5vbkNvcm5lckhlaWdodENoYW5nZShkKSxhKGQpfSksbXMoaS5zY3JvbGxiYXJZLCgpPT57dmFyIHU7Y29uc3QgZD0oKHU9aS5zY3JvbGxiYXJZKT09PW51bGx8fHU9PT12b2lkIDA/dm9pZCAwOnUub2Zmc2V0V2lkdGgpfHwwO2kub25Db3JuZXJXaWR0aENoYW5nZShkKSxsKGQpfSksYz9oLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt9LHIse3JlZjplLHN0eWxlOnt3aWR0aDpvLGhlaWdodDpzLHBvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6aS5kaXI9PT0ibHRyIj8wOnZvaWQgMCxsZWZ0OmkuZGlyPT09InJ0bCI/MDp2b2lkIDAsYm90dG9tOjAsLi4udC5zdHlsZX19KSk6bnVsbH0pO2Z1bmN0aW9uIFNkKHQpe3JldHVybiB0P3BhcnNlSW50KHQsMTApOjB9ZnVuY3Rpb24gZ1ModCxlKXtjb25zdCBuPXQvZTtyZXR1cm4gaXNOYU4obik/MDpufWZ1bmN0aW9uICRmKHQpe2NvbnN0IGU9Z1ModC52aWV3cG9ydCx0LmNvbnRlbnQpLG49dC5zY3JvbGxiYXIucGFkZGluZ1N0YXJ0K3Quc2Nyb2xsYmFyLnBhZGRpbmdFbmQscj0odC5zY3JvbGxiYXIuc2l6ZS1uKSplO3JldHVybiBNYXRoLm1heChyLDE4KX1mdW5jdGlvbiBUMih0LGUsbixyPSJsdHIiKXtjb25zdCBpPSRmKG4pLG89aS8yLGw9ZXx8byxzPWktbCxhPW4uc2Nyb2xsYmFyLnBhZGRpbmdTdGFydCtsLGM9bi5zY3JvbGxiYXIuc2l6ZS1uLnNjcm9sbGJhci5wYWRkaW5nRW5kLXMsdT1uLmNvbnRlbnQtbi52aWV3cG9ydCxkPXI9PT0ibHRyIj9bMCx1XTpbdSotMSwwXTtyZXR1cm4gdlMoW2EsY10sZCkodCl9ZnVuY3Rpb24gSTAodCxlLG49Imx0ciIpe2NvbnN0IHI9JGYoZSksaT1lLnNjcm9sbGJhci5wYWRkaW5nU3RhcnQrZS5zY3JvbGxiYXIucGFkZGluZ0VuZCxvPWUuc2Nyb2xsYmFyLnNpemUtaSxsPWUuY29udGVudC1lLnZpZXdwb3J0LHM9by1yLGE9bj09PSJsdHIiP1swLGxdOltsKi0xLDBdLGM9cm0odCxhKTtyZXR1cm4gdlMoWzAsbF0sWzAsc10pKGMpfWZ1bmN0aW9uIHZTKHQsZSl7cmV0dXJuIG49PntpZih0WzBdPT09dFsxXXx8ZVswXT09PWVbMV0pcmV0dXJuIGVbMF07Y29uc3Qgcj0oZVsxXS1lWzBdKS8odFsxXS10WzBdKTtyZXR1cm4gZVswXStyKihuLXRbMF0pfX1mdW5jdGlvbiB5Uyh0LGUpe3JldHVybiB0PjAmJnQ8ZX1jb25zdCBOMj0odCxlPSgpPT57fSk9PntsZXQgbj17bGVmdDp0LnNjcm9sbExlZnQsdG9wOnQuc2Nyb2xsVG9wfSxyPTA7cmV0dXJuIGZ1bmN0aW9uIGkoKXtjb25zdCBvPXtsZWZ0OnQuc2Nyb2xsTGVmdCx0b3A6dC5zY3JvbGxUb3B9LGw9bi5sZWZ0IT09by5sZWZ0LHM9bi50b3AhPT1vLnRvcDsobHx8cykmJmUoKSxuPW8scj13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGkpfSgpLCgpPT53aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocil9O2Z1bmN0aW9uIFRmKHQsZSl7Y29uc3Qgbj1lbih0KSxyPWgudXNlUmVmKDApO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+KCk9PndpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxbXSksaC51c2VDYWxsYmFjaygoKT0+e3dpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxyLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQobixlKX0sW24sZV0pfWZ1bmN0aW9uIG1zKHQsZSl7Y29uc3Qgbj1lbihlKTtIbigoKT0+e2xldCByPTA7aWYodCl7Y29uc3QgaT1uZXcgUmVzaXplT2JzZXJ2ZXIoKCk9PntjYW5jZWxBbmltYXRpb25GcmFtZShyKSxyPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KTtyZXR1cm4gaS5vYnNlcnZlKHQpLCgpPT57d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHIpLGkudW5vYnNlcnZlKHQpfX19LFt0LG5dKX1jb25zdCB4Uz1nMixSMj15MixPMj1rMjtmdW5jdGlvbiBfUyh0KXt2YXIgZSxuLHI9IiI7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09Im51bWJlciIpcis9dDtlbHNlIGlmKHR5cGVvZiB0PT0ib2JqZWN0IilpZihBcnJheS5pc0FycmF5KHQpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXSYmKG49X1ModFtlXSkpJiYociYmKHIrPSIgIikscis9bik7ZWxzZSBmb3IoZSBpbiB0KXRbZV0mJihyJiYocis9IiAiKSxyKz1lKTtyZXR1cm4gcn1mdW5jdGlvbiB3Uygpe2Zvcih2YXIgdCxlLG49MCxyPSIiO248YXJndW1lbnRzLmxlbmd0aDspKHQ9YXJndW1lbnRzW24rK10pJiYoZT1fUyh0KSkmJihyJiYocis9IiAiKSxyKz1lKTtyZXR1cm4gcn1jb25zdCBzdj0iLSI7ZnVuY3Rpb24gUDIodCl7Y29uc3QgZT1NMih0KSx7Y29uZmxpY3RpbmdDbGFzc0dyb3VwczpuLGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyczpyfT10O2Z1bmN0aW9uIGkobCl7Y29uc3Qgcz1sLnNwbGl0KHN2KTtyZXR1cm4gc1swXT09PSIiJiZzLmxlbmd0aCE9PTEmJnMuc2hpZnQoKSxTUyhzLGUpfHxBMihsKX1mdW5jdGlvbiBvKGwscyl7Y29uc3QgYT1uW2xdfHxbXTtyZXR1cm4gcyYmcltsXT9bLi4uYSwuLi5yW2xdXTphfXJldHVybntnZXRDbGFzc0dyb3VwSWQ6aSxnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6b319ZnVuY3Rpb24gU1ModCxlKXt2YXIgbDtpZih0Lmxlbmd0aD09PTApcmV0dXJuIGUuY2xhc3NHcm91cElkO2NvbnN0IG49dFswXSxyPWUubmV4dFBhcnQuZ2V0KG4pLGk9cj9TUyh0LnNsaWNlKDEpLHIpOnZvaWQgMDtpZihpKXJldHVybiBpO2lmKGUudmFsaWRhdG9ycy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBvPXQuam9pbihzdik7cmV0dXJuKGw9ZS52YWxpZGF0b3JzLmZpbmQoKHt2YWxpZGF0b3I6c30pPT5zKG8pKSk9PW51bGw/dm9pZCAwOmwuY2xhc3NHcm91cElkfWNvbnN0IGowPS9eXFsoLispXF0kLztmdW5jdGlvbiBBMih0KXtpZihqMC50ZXN0KHQpKXtjb25zdCBlPWowLmV4ZWModClbMV0sbj1lPT1udWxsP3ZvaWQgMDplLnN1YnN0cmluZygwLGUuaW5kZXhPZigiOiIpKTtpZihuKXJldHVybiJhcmJpdHJhcnkuLiIrbn19ZnVuY3Rpb24gTTIodCl7Y29uc3R7dGhlbWU6ZSxwcmVmaXg6bn09dCxyPXtuZXh0UGFydDpuZXcgTWFwLHZhbGlkYXRvcnM6W119O3JldHVybiBEMihPYmplY3QuZW50cmllcyh0LmNsYXNzR3JvdXBzKSxuKS5mb3JFYWNoKChbbyxsXSk9PntvbShsLHIsbyxlKX0pLHJ9ZnVuY3Rpb24gb20odCxlLG4scil7dC5mb3JFYWNoKGk9PntpZih0eXBlb2YgaT09InN0cmluZyIpe2NvbnN0IG89aT09PSIiP2U6ejAoZSxpKTtvLmNsYXNzR3JvdXBJZD1uO3JldHVybn1pZih0eXBlb2YgaT09ImZ1bmN0aW9uIil7aWYoTDIoaSkpe29tKGkociksZSxuLHIpO3JldHVybn1lLnZhbGlkYXRvcnMucHVzaCh7dmFsaWRhdG9yOmksY2xhc3NHcm91cElkOm59KTtyZXR1cm59T2JqZWN0LmVudHJpZXMoaSkuZm9yRWFjaCgoW28sbF0pPT57b20obCx6MChlLG8pLG4scil9KX0pfWZ1bmN0aW9uIHowKHQsZSl7bGV0IG49dDtyZXR1cm4gZS5zcGxpdChzdikuZm9yRWFjaChyPT57bi5uZXh0UGFydC5oYXMocil8fG4ubmV4dFBhcnQuc2V0KHIse25leHRQYXJ0Om5ldyBNYXAsdmFsaWRhdG9yczpbXX0pLG49bi5uZXh0UGFydC5nZXQocil9KSxufWZ1bmN0aW9uIEwyKHQpe3JldHVybiB0LmlzVGhlbWVHZXR0ZXJ9ZnVuY3Rpb24gRDIodCxlKXtyZXR1cm4gZT90Lm1hcCgoW24scl0pPT57Y29uc3QgaT1yLm1hcChvPT50eXBlb2Ygbz09InN0cmluZyI/ZStvOnR5cGVvZiBvPT0ib2JqZWN0Ij9PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobykubWFwKChbbCxzXSk9PltlK2wsc10pKTpvKTtyZXR1cm5bbixpXX0pOnR9ZnVuY3Rpb24gSTIodCl7aWYodDwxKXJldHVybntnZXQ6KCk9Pnt9LHNldDooKT0+e319O2xldCBlPTAsbj1uZXcgTWFwLHI9bmV3IE1hcDtmdW5jdGlvbiBpKG8sbCl7bi5zZXQobyxsKSxlKyssZT50JiYoZT0wLHI9bixuPW5ldyBNYXApfXJldHVybntnZXQobyl7bGV0IGw9bi5nZXQobyk7aWYobCE9PXZvaWQgMClyZXR1cm4gbDtpZigobD1yLmdldChvKSkhPT12b2lkIDApcmV0dXJuIGkobyxsKSxsfSxzZXQobyxsKXtuLmhhcyhvKT9uLnNldChvLGwpOmkobyxsKX19fWNvbnN0IEVTPSIhIjtmdW5jdGlvbiBqMih0KXtjb25zdCBlPXQuc2VwYXJhdG9yLG49ZS5sZW5ndGg9PT0xLHI9ZVswXSxpPWUubGVuZ3RoO3JldHVybiBmdW5jdGlvbihsKXtjb25zdCBzPVtdO2xldCBhPTAsYz0wLHU7Zm9yKGxldCBtPTA7bTxsLmxlbmd0aDttKyspe2xldCB3PWxbbV07aWYoYT09PTApe2lmKHc9PT1yJiYobnx8bC5zbGljZShtLG0raSk9PT1lKSl7cy5wdXNoKGwuc2xpY2UoYyxtKSksYz1tK2k7Y29udGludWV9aWYodz09PSIvIil7dT1tO2NvbnRpbnVlfX13PT09IlsiP2ErKzp3PT09Il0iJiZhLS19Y29uc3QgZD1zLmxlbmd0aD09PTA/bDpsLnN1YnN0cmluZyhjKSxmPWQuc3RhcnRzV2l0aChFUykscD1mP2Quc3Vic3RyaW5nKDEpOmQsZz11JiZ1PmM/dS1jOnZvaWQgMDtyZXR1cm57bW9kaWZpZXJzOnMsaGFzSW1wb3J0YW50TW9kaWZpZXI6ZixiYXNlQ2xhc3NOYW1lOnAsbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjpnfX19ZnVuY3Rpb24gejIodCl7aWYodC5sZW5ndGg8PTEpcmV0dXJuIHQ7Y29uc3QgZT1bXTtsZXQgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKHI9PntyWzBdPT09IlsiPyhlLnB1c2goLi4ubi5zb3J0KCksciksbj1bXSk6bi5wdXNoKHIpfSksZS5wdXNoKC4uLm4uc29ydCgpKSxlfWZ1bmN0aW9uIEYyKHQpe3JldHVybntjYWNoZTpJMih0LmNhY2hlU2l6ZSksc3BsaXRNb2RpZmllcnM6ajIodCksLi4uUDIodCl9fWNvbnN0IEIyPS9ccysvO2Z1bmN0aW9uIFUyKHQsZSl7Y29uc3R7c3BsaXRNb2RpZmllcnM6bixnZXRDbGFzc0dyb3VwSWQ6cixnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHM6aX09ZSxvPW5ldyBTZXQ7cmV0dXJuIHQudHJpbSgpLnNwbGl0KEIyKS5tYXAobD0+e2NvbnN0e21vZGlmaWVyczpzLGhhc0ltcG9ydGFudE1vZGlmaWVyOmEsYmFzZUNsYXNzTmFtZTpjLG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb246dX09bihsKTtsZXQgZD1yKHU/Yy5zdWJzdHJpbmcoMCx1KTpjKSxmPSEhdTtpZighZCl7aWYoIXUpcmV0dXJue2lzVGFpbHdpbmRDbGFzczohMSxvcmlnaW5hbENsYXNzTmFtZTpsfTtpZihkPXIoYyksIWQpcmV0dXJue2lzVGFpbHdpbmRDbGFzczohMSxvcmlnaW5hbENsYXNzTmFtZTpsfTtmPSExfWNvbnN0IHA9ejIocykuam9pbigiOiIpO3JldHVybntpc1RhaWx3aW5kQ2xhc3M6ITAsbW9kaWZpZXJJZDphP3ArRVM6cCxjbGFzc0dyb3VwSWQ6ZCxvcmlnaW5hbENsYXNzTmFtZTpsLGhhc1Bvc3RmaXhNb2RpZmllcjpmfX0pLnJldmVyc2UoKS5maWx0ZXIobD0+e2lmKCFsLmlzVGFpbHdpbmRDbGFzcylyZXR1cm4hMDtjb25zdHttb2RpZmllcklkOnMsY2xhc3NHcm91cElkOmEsaGFzUG9zdGZpeE1vZGlmaWVyOmN9PWwsdT1zK2E7cmV0dXJuIG8uaGFzKHUpPyExOihvLmFkZCh1KSxpKGEsYykuZm9yRWFjaChkPT5vLmFkZChzK2QpKSwhMCl9KS5yZXZlcnNlKCkubWFwKGw9Pmwub3JpZ2luYWxDbGFzc05hbWUpLmpvaW4oIiAiKX1mdW5jdGlvbiBXMigpe2xldCB0PTAsZSxuLHI9IiI7Zm9yKDt0PGFyZ3VtZW50cy5sZW5ndGg7KShlPWFyZ3VtZW50c1t0KytdKSYmKG49Q1MoZSkpJiYociYmKHIrPSIgIikscis9bik7cmV0dXJuIHJ9ZnVuY3Rpb24gQ1ModCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O2xldCBlLG49IiI7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspdFtyXSYmKGU9Q1ModFtyXSkpJiYobiYmKG4rPSIgIiksbis9ZSk7cmV0dXJuIG59ZnVuY3Rpb24gSDIodCwuLi5lKXtsZXQgbixyLGksbz1sO2Z1bmN0aW9uIGwoYSl7Y29uc3QgYz1lLnJlZHVjZSgodSxkKT0+ZCh1KSx0KCkpO3JldHVybiBuPUYyKGMpLHI9bi5jYWNoZS5nZXQsaT1uLmNhY2hlLnNldCxvPXMscyhhKX1mdW5jdGlvbiBzKGEpe2NvbnN0IGM9cihhKTtpZihjKXJldHVybiBjO2NvbnN0IHU9VTIoYSxuKTtyZXR1cm4gaShhLHUpLHV9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8oVzIuYXBwbHkobnVsbCxhcmd1bWVudHMpKX19ZnVuY3Rpb24gcWUodCl7Y29uc3QgZT1uPT5uW3RdfHxbXTtyZXR1cm4gZS5pc1RoZW1lR2V0dGVyPSEwLGV9Y29uc3QgYlM9L15cWyg/OihbYS16LV0rKTopPyguKylcXSQvaSxWMj0vXlxkK1wvXGQrJC8sSzI9bmV3IFNldChbInB4IiwiZnVsbCIsInNjcmVlbiJdKSxaMj0vXihcZCsoXC5cZCspPyk/KHhzfHNtfG1kfGxnfHhsKSQvLEcyPS9cZCsoJXxweHxyP2VtfFtzZGxdP3YoW2h3aWJdfG1pbnxtYXgpfHB0fHBjfGlufGNtfG1tfGNhcHxjaHxleHxyP2xofGNxKHd8aHxpfGJ8bWlufG1heCkpfFxiKGNhbGN8bWlufG1heHxjbGFtcClcKC4rXCl8XjAkLyxZMj0vXi0/KChcZCspP1wuPyhcZCspW2Etel0rfDApXy0/KChcZCspP1wuPyhcZCspW2Etel0rfDApLyxYMj0vXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVwoLitcKSQvO2Z1bmN0aW9uIGhyKHQpe3JldHVybiBEbyh0KXx8SzIuaGFzKHQpfHxWMi50ZXN0KHQpfWZ1bmN0aW9uIFBpKHQpe3JldHVybiBUcyh0LCJsZW5ndGgiLGlSKX1mdW5jdGlvbiBEbyh0KXtyZXR1cm4hIXQmJiFOdW1iZXIuaXNOYU4oTnVtYmVyKHQpKX1mdW5jdGlvbiBndSh0KXtyZXR1cm4gVHModCwibnVtYmVyIixEbyl9ZnVuY3Rpb24gbmEodCl7cmV0dXJuISF0JiZOdW1iZXIuaXNJbnRlZ2VyKE51bWJlcih0KSl9ZnVuY3Rpb24gSjIodCl7cmV0dXJuIHQuZW5kc1dpdGgoIiUiKSYmRG8odC5zbGljZSgwLC0xKSl9ZnVuY3Rpb24gRWUodCl7cmV0dXJuIGJTLnRlc3QodCl9ZnVuY3Rpb24gQWkodCl7cmV0dXJuIFoyLnRlc3QodCl9Y29uc3QgUTI9bmV3IFNldChbImxlbmd0aCIsInNpemUiLCJwZXJjZW50YWdlIl0pO2Z1bmN0aW9uIHEyKHQpe3JldHVybiBUcyh0LFEyLGtTKX1mdW5jdGlvbiBlUih0KXtyZXR1cm4gVHModCwicG9zaXRpb24iLGtTKX1jb25zdCB0Uj1uZXcgU2V0KFsiaW1hZ2UiLCJ1cmwiXSk7ZnVuY3Rpb24gblIodCl7cmV0dXJuIFRzKHQsdFIsbFIpfWZ1bmN0aW9uIHJSKHQpe3JldHVybiBUcyh0LCIiLG9SKX1mdW5jdGlvbiByYSgpe3JldHVybiEwfWZ1bmN0aW9uIFRzKHQsZSxuKXtjb25zdCByPWJTLmV4ZWModCk7cmV0dXJuIHI/clsxXT90eXBlb2YgZT09InN0cmluZyI/clsxXT09PWU6ZS5oYXMoclsxXSk6bihyWzJdKTohMX1mdW5jdGlvbiBpUih0KXtyZXR1cm4gRzIudGVzdCh0KX1mdW5jdGlvbiBrUygpe3JldHVybiExfWZ1bmN0aW9uIG9SKHQpe3JldHVybiBZMi50ZXN0KHQpfWZ1bmN0aW9uIGxSKHQpe3JldHVybiBYMi50ZXN0KHQpfWZ1bmN0aW9uIHNSKCl7Y29uc3QgdD1xZSgiY29sb3JzIiksZT1xZSgic3BhY2luZyIpLG49cWUoImJsdXIiKSxyPXFlKCJicmlnaHRuZXNzIiksaT1xZSgiYm9yZGVyQ29sb3IiKSxvPXFlKCJib3JkZXJSYWRpdXMiKSxsPXFlKCJib3JkZXJTcGFjaW5nIikscz1xZSgiYm9yZGVyV2lkdGgiKSxhPXFlKCJjb250cmFzdCIpLGM9cWUoImdyYXlzY2FsZSIpLHU9cWUoImh1ZVJvdGF0ZSIpLGQ9cWUoImludmVydCIpLGY9cWUoImdhcCIpLHA9cWUoImdyYWRpZW50Q29sb3JTdG9wcyIpLGc9cWUoImdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zIiksbT1xZSgiaW5zZXQiKSx3PXFlKCJtYXJnaW4iKSx2PXFlKCJvcGFjaXR5IikseD1xZSgicGFkZGluZyIpLF89cWUoInNhdHVyYXRlIiksUz1xZSgic2NhbGUiKSxFPXFlKCJzZXBpYSIpLGs9cWUoInNrZXciKSxDPXFlKCJzcGFjZSIpLE49cWUoInRyYW5zbGF0ZSIpLEE9KCk9PlsiYXV0byIsImNvbnRhaW4iLCJub25lIl0sVD0oKT0+WyJhdXRvIiwiaGlkZGVuIiwiY2xpcCIsInZpc2libGUiLCJzY3JvbGwiXSxEPSgpPT5bImF1dG8iLEVlLGVdLEw9KCk9PltFZSxlXSxLPSgpPT5bIiIsaHIsUGldLEI9KCk9PlsiYXV0byIsRG8sRWVdLFo9KCk9PlsiYm90dG9tIiwiY2VudGVyIiwibGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC10b3AiLCJyaWdodCIsInJpZ2h0LWJvdHRvbSIsInJpZ2h0LXRvcCIsInRvcCJdLFI9KCk9Plsic29saWQiLCJkYXNoZWQiLCJkb3R0ZWQiLCJkb3VibGUiLCJub25lIl0sUD0oKT0+WyJub3JtYWwiLCJtdWx0aXBseSIsInNjcmVlbiIsIm92ZXJsYXkiLCJkYXJrZW4iLCJsaWdodGVuIiwiY29sb3ItZG9kZ2UiLCJjb2xvci1idXJuIiwiaGFyZC1saWdodCIsInNvZnQtbGlnaHQiLCJkaWZmZXJlbmNlIiwiZXhjbHVzaW9uIiwiaHVlIiwic2F0dXJhdGlvbiIsImNvbG9yIiwibHVtaW5vc2l0eSIsInBsdXMtbGlnaHRlciJdLGI9KCk9Plsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiZXR3ZWVuIiwiYXJvdW5kIiwiZXZlbmx5Iiwic3RyZXRjaCJdLGo9KCk9PlsiIiwiMCIsRWVdLHo9KCk9PlsiYXV0byIsImF2b2lkIiwiYWxsIiwiYXZvaWQtcGFnZSIsInBhZ2UiLCJsZWZ0IiwicmlnaHQiLCJjb2x1bW4iXSxHPSgpPT5bRG8sZ3VdLHJlPSgpPT5bRG8sRWVdO3JldHVybntjYWNoZVNpemU6NTAwLHNlcGFyYXRvcjoiOiIsdGhlbWU6e2NvbG9yczpbcmFdLHNwYWNpbmc6W2hyLFBpXSxibHVyOlsibm9uZSIsIiIsQWksRWVdLGJyaWdodG5lc3M6RygpLGJvcmRlckNvbG9yOlt0XSxib3JkZXJSYWRpdXM6WyJub25lIiwiIiwiZnVsbCIsQWksRWVdLGJvcmRlclNwYWNpbmc6TCgpLGJvcmRlcldpZHRoOksoKSxjb250cmFzdDpHKCksZ3JheXNjYWxlOmooKSxodWVSb3RhdGU6cmUoKSxpbnZlcnQ6aigpLGdhcDpMKCksZ3JhZGllbnRDb2xvclN0b3BzOlt0XSxncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uczpbSjIsUGldLGluc2V0OkQoKSxtYXJnaW46RCgpLG9wYWNpdHk6RygpLHBhZGRpbmc6TCgpLHNhdHVyYXRlOkcoKSxzY2FsZTpHKCksc2VwaWE6aigpLHNrZXc6cmUoKSxzcGFjZTpMKCksdHJhbnNsYXRlOkwoKX0sY2xhc3NHcm91cHM6e2FzcGVjdDpbe2FzcGVjdDpbImF1dG8iLCJzcXVhcmUiLCJ2aWRlbyIsRWVdfV0sY29udGFpbmVyOlsiY29udGFpbmVyIl0sY29sdW1uczpbe2NvbHVtbnM6W0FpXX1dLCJicmVhay1hZnRlciI6W3siYnJlYWstYWZ0ZXIiOnooKX1dLCJicmVhay1iZWZvcmUiOlt7ImJyZWFrLWJlZm9yZSI6eigpfV0sImJyZWFrLWluc2lkZSI6W3siYnJlYWstaW5zaWRlIjpbImF1dG8iLCJhdm9pZCIsImF2b2lkLXBhZ2UiLCJhdm9pZC1jb2x1bW4iXX1dLCJib3gtZGVjb3JhdGlvbiI6W3siYm94LWRlY29yYXRpb24iOlsic2xpY2UiLCJjbG9uZSJdfV0sYm94Olt7Ym94OlsiYm9yZGVyIiwiY29udGVudCJdfV0sZGlzcGxheTpbImJsb2NrIiwiaW5saW5lLWJsb2NrIiwiaW5saW5lIiwiZmxleCIsImlubGluZS1mbGV4IiwidGFibGUiLCJpbmxpbmUtdGFibGUiLCJ0YWJsZS1jYXB0aW9uIiwidGFibGUtY2VsbCIsInRhYmxlLWNvbHVtbiIsInRhYmxlLWNvbHVtbi1ncm91cCIsInRhYmxlLWZvb3Rlci1ncm91cCIsInRhYmxlLWhlYWRlci1ncm91cCIsInRhYmxlLXJvdy1ncm91cCIsInRhYmxlLXJvdyIsImZsb3ctcm9vdCIsImdyaWQiLCJpbmxpbmUtZ3JpZCIsImNvbnRlbnRzIiwibGlzdC1pdGVtIiwiaGlkZGVuIl0sZmxvYXQ6W3tmbG9hdDpbInJpZ2h0IiwibGVmdCIsIm5vbmUiXX1dLGNsZWFyOlt7Y2xlYXI6WyJsZWZ0IiwicmlnaHQiLCJib3RoIiwibm9uZSJdfV0saXNvbGF0aW9uOlsiaXNvbGF0ZSIsImlzb2xhdGlvbi1hdXRvIl0sIm9iamVjdC1maXQiOlt7b2JqZWN0OlsiY29udGFpbiIsImNvdmVyIiwiZmlsbCIsIm5vbmUiLCJzY2FsZS1kb3duIl19XSwib2JqZWN0LXBvc2l0aW9uIjpbe29iamVjdDpbLi4uWigpLEVlXX1dLG92ZXJmbG93Olt7b3ZlcmZsb3c6VCgpfV0sIm92ZXJmbG93LXgiOlt7Im92ZXJmbG93LXgiOlQoKX1dLCJvdmVyZmxvdy15IjpbeyJvdmVyZmxvdy15IjpUKCl9XSxvdmVyc2Nyb2xsOlt7b3ZlcnNjcm9sbDpBKCl9XSwib3ZlcnNjcm9sbC14IjpbeyJvdmVyc2Nyb2xsLXgiOkEoKX1dLCJvdmVyc2Nyb2xsLXkiOlt7Im92ZXJzY3JvbGwteSI6QSgpfV0scG9zaXRpb246WyJzdGF0aWMiLCJmaXhlZCIsImFic29sdXRlIiwicmVsYXRpdmUiLCJzdGlja3kiXSxpbnNldDpbe2luc2V0OlttXX1dLCJpbnNldC14IjpbeyJpbnNldC14IjpbbV19XSwiaW5zZXQteSI6W3siaW5zZXQteSI6W21dfV0sc3RhcnQ6W3tzdGFydDpbbV19XSxlbmQ6W3tlbmQ6W21dfV0sdG9wOlt7dG9wOlttXX1dLHJpZ2h0Olt7cmlnaHQ6W21dfV0sYm90dG9tOlt7Ym90dG9tOlttXX1dLGxlZnQ6W3tsZWZ0OlttXX1dLHZpc2liaWxpdHk6WyJ2aXNpYmxlIiwiaW52aXNpYmxlIiwiY29sbGFwc2UiXSx6Olt7ejpbImF1dG8iLG5hLEVlXX1dLGJhc2lzOlt7YmFzaXM6RCgpfV0sImZsZXgtZGlyZWN0aW9uIjpbe2ZsZXg6WyJyb3ciLCJyb3ctcmV2ZXJzZSIsImNvbCIsImNvbC1yZXZlcnNlIl19XSwiZmxleC13cmFwIjpbe2ZsZXg6WyJ3cmFwIiwid3JhcC1yZXZlcnNlIiwibm93cmFwIl19XSxmbGV4Olt7ZmxleDpbIjEiLCJhdXRvIiwiaW5pdGlhbCIsIm5vbmUiLEVlXX1dLGdyb3c6W3tncm93OmooKX1dLHNocmluazpbe3NocmluazpqKCl9XSxvcmRlcjpbe29yZGVyOlsiZmlyc3QiLCJsYXN0Iiwibm9uZSIsbmEsRWVdfV0sImdyaWQtY29scyI6W3siZ3JpZC1jb2xzIjpbcmFdfV0sImNvbC1zdGFydC1lbmQiOlt7Y29sOlsiYXV0byIse3NwYW46WyJmdWxsIixuYSxFZV19LEVlXX1dLCJjb2wtc3RhcnQiOlt7ImNvbC1zdGFydCI6QigpfV0sImNvbC1lbmQiOlt7ImNvbC1lbmQiOkIoKX1dLCJncmlkLXJvd3MiOlt7ImdyaWQtcm93cyI6W3JhXX1dLCJyb3ctc3RhcnQtZW5kIjpbe3JvdzpbImF1dG8iLHtzcGFuOltuYSxFZV19LEVlXX1dLCJyb3ctc3RhcnQiOlt7InJvdy1zdGFydCI6QigpfV0sInJvdy1lbmQiOlt7InJvdy1lbmQiOkIoKX1dLCJncmlkLWZsb3ciOlt7ImdyaWQtZmxvdyI6WyJyb3ciLCJjb2wiLCJkZW5zZSIsInJvdy1kZW5zZSIsImNvbC1kZW5zZSJdfV0sImF1dG8tY29scyI6W3siYXV0by1jb2xzIjpbImF1dG8iLCJtaW4iLCJtYXgiLCJmciIsRWVdfV0sImF1dG8tcm93cyI6W3siYXV0by1yb3dzIjpbImF1dG8iLCJtaW4iLCJtYXgiLCJmciIsRWVdfV0sZ2FwOlt7Z2FwOltmXX1dLCJnYXAteCI6W3siZ2FwLXgiOltmXX1dLCJnYXAteSI6W3siZ2FwLXkiOltmXX1dLCJqdXN0aWZ5LWNvbnRlbnQiOlt7anVzdGlmeTpbIm5vcm1hbCIsLi4uYigpXX1dLCJqdXN0aWZ5LWl0ZW1zIjpbeyJqdXN0aWZ5LWl0ZW1zIjpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCJdfV0sImp1c3RpZnktc2VsZiI6W3sianVzdGlmeS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLCJhbGlnbi1jb250ZW50Ijpbe2NvbnRlbnQ6WyJub3JtYWwiLC4uLmIoKSwiYmFzZWxpbmUiXX1dLCJhbGlnbi1pdGVtcyI6W3tpdGVtczpbInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwiYmFzZWxpbmUiLCJzdHJldGNoIl19XSwiYWxpZ24tc2VsZiI6W3tzZWxmOlsiYXV0byIsInN0YXJ0IiwiZW5kIiwiY2VudGVyIiwic3RyZXRjaCIsImJhc2VsaW5lIl19XSwicGxhY2UtY29udGVudCI6W3sicGxhY2UtY29udGVudCI6Wy4uLmIoKSwiYmFzZWxpbmUiXX1dLCJwbGFjZS1pdGVtcyI6W3sicGxhY2UtaXRlbXMiOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJiYXNlbGluZSIsInN0cmV0Y2giXX1dLCJwbGFjZS1zZWxmIjpbeyJwbGFjZS1zZWxmIjpbImF1dG8iLCJzdGFydCIsImVuZCIsImNlbnRlciIsInN0cmV0Y2giXX1dLHA6W3twOlt4XX1dLHB4Olt7cHg6W3hdfV0scHk6W3tweTpbeF19XSxwczpbe3BzOlt4XX1dLHBlOlt7cGU6W3hdfV0scHQ6W3twdDpbeF19XSxwcjpbe3ByOlt4XX1dLHBiOlt7cGI6W3hdfV0scGw6W3twbDpbeF19XSxtOlt7bTpbd119XSxteDpbe214Olt3XX1dLG15Olt7bXk6W3ddfV0sbXM6W3ttczpbd119XSxtZTpbe21lOlt3XX1dLG10Olt7bXQ6W3ddfV0sbXI6W3ttcjpbd119XSxtYjpbe21iOlt3XX1dLG1sOlt7bWw6W3ddfV0sInNwYWNlLXgiOlt7InNwYWNlLXgiOltDXX1dLCJzcGFjZS14LXJldmVyc2UiOlsic3BhY2UteC1yZXZlcnNlIl0sInNwYWNlLXkiOlt7InNwYWNlLXkiOltDXX1dLCJzcGFjZS15LXJldmVyc2UiOlsic3BhY2UteS1yZXZlcnNlIl0sdzpbe3c6WyJhdXRvIiwibWluIiwibWF4IiwiZml0IixFZSxlXX1dLCJtaW4tdyI6W3sibWluLXciOlsibWluIiwibWF4IiwiZml0IixFZSxocl19XSwibWF4LXciOlt7Im1heC13IjpbIjAiLCJub25lIiwiZnVsbCIsIm1pbiIsIm1heCIsImZpdCIsInByb3NlIix7c2NyZWVuOltBaV19LEFpLEVlXX1dLGg6W3toOltFZSxlLCJhdXRvIiwibWluIiwibWF4IiwiZml0Il19XSwibWluLWgiOlt7Im1pbi1oIjpbIm1pbiIsIm1heCIsImZpdCIsaHIsRWVdfV0sIm1heC1oIjpbeyJtYXgtaCI6W0VlLGUsIm1pbiIsIm1heCIsImZpdCJdfV0sImZvbnQtc2l6ZSI6W3t0ZXh0OlsiYmFzZSIsQWksUGldfV0sImZvbnQtc21vb3RoaW5nIjpbImFudGlhbGlhc2VkIiwic3VicGl4ZWwtYW50aWFsaWFzZWQiXSwiZm9udC1zdHlsZSI6WyJpdGFsaWMiLCJub3QtaXRhbGljIl0sImZvbnQtd2VpZ2h0Ijpbe2ZvbnQ6WyJ0aGluIiwiZXh0cmFsaWdodCIsImxpZ2h0Iiwibm9ybWFsIiwibWVkaXVtIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwiYmxhY2siLGd1XX1dLCJmb250LWZhbWlseSI6W3tmb250OltyYV19XSwiZnZuLW5vcm1hbCI6WyJub3JtYWwtbnVtcyJdLCJmdm4tb3JkaW5hbCI6WyJvcmRpbmFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsic2xhc2hlZC16ZXJvIl0sImZ2bi1maWd1cmUiOlsibGluaW5nLW51bXMiLCJvbGRzdHlsZS1udW1zIl0sImZ2bi1zcGFjaW5nIjpbInByb3BvcnRpb25hbC1udW1zIiwidGFidWxhci1udW1zIl0sImZ2bi1mcmFjdGlvbiI6WyJkaWFnb25hbC1mcmFjdGlvbnMiLCJzdGFja2VkLWZyYWN0b25zIl0sdHJhY2tpbmc6W3t0cmFja2luZzpbInRpZ2h0ZXIiLCJ0aWdodCIsIm5vcm1hbCIsIndpZGUiLCJ3aWRlciIsIndpZGVzdCIsRWVdfV0sImxpbmUtY2xhbXAiOlt7ImxpbmUtY2xhbXAiOlsibm9uZSIsRG8sZ3VdfV0sbGVhZGluZzpbe2xlYWRpbmc6WyJub25lIiwidGlnaHQiLCJzbnVnIiwibm9ybWFsIiwicmVsYXhlZCIsImxvb3NlIixocixFZV19XSwibGlzdC1pbWFnZSI6W3sibGlzdC1pbWFnZSI6WyJub25lIixFZV19XSwibGlzdC1zdHlsZS10eXBlIjpbe2xpc3Q6WyJub25lIiwiZGlzYyIsImRlY2ltYWwiLEVlXX1dLCJsaXN0LXN0eWxlLXBvc2l0aW9uIjpbe2xpc3Q6WyJpbnNpZGUiLCJvdXRzaWRlIl19XSwicGxhY2Vob2xkZXItY29sb3IiOlt7cGxhY2Vob2xkZXI6W3RdfV0sInBsYWNlaG9sZGVyLW9wYWNpdHkiOlt7InBsYWNlaG9sZGVyLW9wYWNpdHkiOlt2XX1dLCJ0ZXh0LWFsaWdubWVudCI6W3t0ZXh0OlsibGVmdCIsImNlbnRlciIsInJpZ2h0IiwianVzdGlmeSIsInN0YXJ0IiwiZW5kIl19XSwidGV4dC1jb2xvciI6W3t0ZXh0Olt0XX1dLCJ0ZXh0LW9wYWNpdHkiOlt7InRleHQtb3BhY2l0eSI6W3ZdfV0sInRleHQtZGVjb3JhdGlvbiI6WyJ1bmRlcmxpbmUiLCJvdmVybGluZSIsImxpbmUtdGhyb3VnaCIsIm5vLXVuZGVybGluZSJdLCJ0ZXh0LWRlY29yYXRpb24tc3R5bGUiOlt7ZGVjb3JhdGlvbjpbLi4uUigpLCJ3YXZ5Il19XSwidGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyI6W3tkZWNvcmF0aW9uOlsiYXV0byIsImZyb20tZm9udCIsaHIsUGldfV0sInVuZGVybGluZS1vZmZzZXQiOlt7InVuZGVybGluZS1vZmZzZXQiOlsiYXV0byIsaHIsRWVdfV0sInRleHQtZGVjb3JhdGlvbi1jb2xvciI6W3tkZWNvcmF0aW9uOlt0XX1dLCJ0ZXh0LXRyYW5zZm9ybSI6WyJ1cHBlcmNhc2UiLCJsb3dlcmNhc2UiLCJjYXBpdGFsaXplIiwibm9ybWFsLWNhc2UiXSwidGV4dC1vdmVyZmxvdyI6WyJ0cnVuY2F0ZSIsInRleHQtZWxsaXBzaXMiLCJ0ZXh0LWNsaXAiXSxpbmRlbnQ6W3tpbmRlbnQ6TCgpfV0sInZlcnRpY2FsLWFsaWduIjpbe2FsaWduOlsiYmFzZWxpbmUiLCJ0b3AiLCJtaWRkbGUiLCJib3R0b20iLCJ0ZXh0LXRvcCIsInRleHQtYm90dG9tIiwic3ViIiwic3VwZXIiLEVlXX1dLHdoaXRlc3BhY2U6W3t3aGl0ZXNwYWNlOlsibm9ybWFsIiwibm93cmFwIiwicHJlIiwicHJlLWxpbmUiLCJwcmUtd3JhcCIsImJyZWFrLXNwYWNlcyJdfV0sYnJlYWs6W3ticmVhazpbIm5vcm1hbCIsIndvcmRzIiwiYWxsIiwia2VlcCJdfV0saHlwaGVuczpbe2h5cGhlbnM6WyJub25lIiwibWFudWFsIiwiYXV0byJdfV0sY29udGVudDpbe2NvbnRlbnQ6WyJub25lIixFZV19XSwiYmctYXR0YWNobWVudCI6W3tiZzpbImZpeGVkIiwibG9jYWwiLCJzY3JvbGwiXX1dLCJiZy1jbGlwIjpbeyJiZy1jbGlwIjpbImJvcmRlciIsInBhZGRpbmciLCJjb250ZW50IiwidGV4dCJdfV0sImJnLW9wYWNpdHkiOlt7ImJnLW9wYWNpdHkiOlt2XX1dLCJiZy1vcmlnaW4iOlt7ImJnLW9yaWdpbiI6WyJib3JkZXIiLCJwYWRkaW5nIiwiY29udGVudCJdfV0sImJnLXBvc2l0aW9uIjpbe2JnOlsuLi5aKCksZVJdfV0sImJnLXJlcGVhdCI6W3tiZzpbIm5vLXJlcGVhdCIse3JlcGVhdDpbIiIsIngiLCJ5Iiwicm91bmQiLCJzcGFjZSJdfV19XSwiYmctc2l6ZSI6W3tiZzpbImF1dG8iLCJjb3ZlciIsImNvbnRhaW4iLHEyXX1dLCJiZy1pbWFnZSI6W3tiZzpbIm5vbmUiLHsiZ3JhZGllbnQtdG8iOlsidCIsInRyIiwiciIsImJyIiwiYiIsImJsIiwibCIsInRsIl19LG5SXX1dLCJiZy1jb2xvciI6W3tiZzpbdF19XSwiZ3JhZGllbnQtZnJvbS1wb3MiOlt7ZnJvbTpbZ119XSwiZ3JhZGllbnQtdmlhLXBvcyI6W3t2aWE6W2ddfV0sImdyYWRpZW50LXRvLXBvcyI6W3t0bzpbZ119XSwiZ3JhZGllbnQtZnJvbSI6W3tmcm9tOltwXX1dLCJncmFkaWVudC12aWEiOlt7dmlhOltwXX1dLCJncmFkaWVudC10byI6W3t0bzpbcF19XSxyb3VuZGVkOlt7cm91bmRlZDpbb119XSwicm91bmRlZC1zIjpbeyJyb3VuZGVkLXMiOltvXX1dLCJyb3VuZGVkLWUiOlt7InJvdW5kZWQtZSI6W29dfV0sInJvdW5kZWQtdCI6W3sicm91bmRlZC10Ijpbb119XSwicm91bmRlZC1yIjpbeyJyb3VuZGVkLXIiOltvXX1dLCJyb3VuZGVkLWIiOlt7InJvdW5kZWQtYiI6W29dfV0sInJvdW5kZWQtbCI6W3sicm91bmRlZC1sIjpbb119XSwicm91bmRlZC1zcyI6W3sicm91bmRlZC1zcyI6W29dfV0sInJvdW5kZWQtc2UiOlt7InJvdW5kZWQtc2UiOltvXX1dLCJyb3VuZGVkLWVlIjpbeyJyb3VuZGVkLWVlIjpbb119XSwicm91bmRlZC1lcyI6W3sicm91bmRlZC1lcyI6W29dfV0sInJvdW5kZWQtdGwiOlt7InJvdW5kZWQtdGwiOltvXX1dLCJyb3VuZGVkLXRyIjpbeyJyb3VuZGVkLXRyIjpbb119XSwicm91bmRlZC1iciI6W3sicm91bmRlZC1iciI6W29dfV0sInJvdW5kZWQtYmwiOlt7InJvdW5kZWQtYmwiOltvXX1dLCJib3JkZXItdyI6W3tib3JkZXI6W3NdfV0sImJvcmRlci13LXgiOlt7ImJvcmRlci14Ijpbc119XSwiYm9yZGVyLXcteSI6W3siYm9yZGVyLXkiOltzXX1dLCJib3JkZXItdy1zIjpbeyJib3JkZXItcyI6W3NdfV0sImJvcmRlci13LWUiOlt7ImJvcmRlci1lIjpbc119XSwiYm9yZGVyLXctdCI6W3siYm9yZGVyLXQiOltzXX1dLCJib3JkZXItdy1yIjpbeyJib3JkZXItciI6W3NdfV0sImJvcmRlci13LWIiOlt7ImJvcmRlci1iIjpbc119XSwiYm9yZGVyLXctbCI6W3siYm9yZGVyLWwiOltzXX1dLCJib3JkZXItb3BhY2l0eSI6W3siYm9yZGVyLW9wYWNpdHkiOlt2XX1dLCJib3JkZXItc3R5bGUiOlt7Ym9yZGVyOlsuLi5SKCksImhpZGRlbiJdfV0sImRpdmlkZS14IjpbeyJkaXZpZGUteCI6W3NdfV0sImRpdmlkZS14LXJldmVyc2UiOlsiZGl2aWRlLXgtcmV2ZXJzZSJdLCJkaXZpZGUteSI6W3siZGl2aWRlLXkiOltzXX1dLCJkaXZpZGUteS1yZXZlcnNlIjpbImRpdmlkZS15LXJldmVyc2UiXSwiZGl2aWRlLW9wYWNpdHkiOlt7ImRpdmlkZS1vcGFjaXR5Ijpbdl19XSwiZGl2aWRlLXN0eWxlIjpbe2RpdmlkZTpSKCl9XSwiYm9yZGVyLWNvbG9yIjpbe2JvcmRlcjpbaV19XSwiYm9yZGVyLWNvbG9yLXgiOlt7ImJvcmRlci14IjpbaV19XSwiYm9yZGVyLWNvbG9yLXkiOlt7ImJvcmRlci15IjpbaV19XSwiYm9yZGVyLWNvbG9yLXQiOlt7ImJvcmRlci10IjpbaV19XSwiYm9yZGVyLWNvbG9yLXIiOlt7ImJvcmRlci1yIjpbaV19XSwiYm9yZGVyLWNvbG9yLWIiOlt7ImJvcmRlci1iIjpbaV19XSwiYm9yZGVyLWNvbG9yLWwiOlt7ImJvcmRlci1sIjpbaV19XSwiZGl2aWRlLWNvbG9yIjpbe2RpdmlkZTpbaV19XSwib3V0bGluZS1zdHlsZSI6W3tvdXRsaW5lOlsiIiwuLi5SKCldfV0sIm91dGxpbmUtb2Zmc2V0IjpbeyJvdXRsaW5lLW9mZnNldCI6W2hyLEVlXX1dLCJvdXRsaW5lLXciOlt7b3V0bGluZTpbaHIsUGldfV0sIm91dGxpbmUtY29sb3IiOlt7b3V0bGluZTpbdF19XSwicmluZy13Ijpbe3Jpbmc6SygpfV0sInJpbmctdy1pbnNldCI6WyJyaW5nLWluc2V0Il0sInJpbmctY29sb3IiOlt7cmluZzpbdF19XSwicmluZy1vcGFjaXR5IjpbeyJyaW5nLW9wYWNpdHkiOlt2XX1dLCJyaW5nLW9mZnNldC13IjpbeyJyaW5nLW9mZnNldCI6W2hyLFBpXX1dLCJyaW5nLW9mZnNldC1jb2xvciI6W3sicmluZy1vZmZzZXQiOlt0XX1dLHNoYWRvdzpbe3NoYWRvdzpbIiIsImlubmVyIiwibm9uZSIsQWksclJdfV0sInNoYWRvdy1jb2xvciI6W3tzaGFkb3c6W3JhXX1dLG9wYWNpdHk6W3tvcGFjaXR5Olt2XX1dLCJtaXgtYmxlbmQiOlt7Im1peC1ibGVuZCI6UCgpfV0sImJnLWJsZW5kIjpbeyJiZy1ibGVuZCI6UCgpfV0sZmlsdGVyOlt7ZmlsdGVyOlsiIiwibm9uZSJdfV0sYmx1cjpbe2JsdXI6W25dfV0sYnJpZ2h0bmVzczpbe2JyaWdodG5lc3M6W3JdfV0sY29udHJhc3Q6W3tjb250cmFzdDpbYV19XSwiZHJvcC1zaGFkb3ciOlt7ImRyb3Atc2hhZG93IjpbIiIsIm5vbmUiLEFpLEVlXX1dLGdyYXlzY2FsZTpbe2dyYXlzY2FsZTpbY119XSwiaHVlLXJvdGF0ZSI6W3siaHVlLXJvdGF0ZSI6W3VdfV0saW52ZXJ0Olt7aW52ZXJ0OltkXX1dLHNhdHVyYXRlOlt7c2F0dXJhdGU6W19dfV0sc2VwaWE6W3tzZXBpYTpbRV19XSwiYmFja2Ryb3AtZmlsdGVyIjpbeyJiYWNrZHJvcC1maWx0ZXIiOlsiIiwibm9uZSJdfV0sImJhY2tkcm9wLWJsdXIiOlt7ImJhY2tkcm9wLWJsdXIiOltuXX1dLCJiYWNrZHJvcC1icmlnaHRuZXNzIjpbeyJiYWNrZHJvcC1icmlnaHRuZXNzIjpbcl19XSwiYmFja2Ryb3AtY29udHJhc3QiOlt7ImJhY2tkcm9wLWNvbnRyYXN0IjpbYV19XSwiYmFja2Ryb3AtZ3JheXNjYWxlIjpbeyJiYWNrZHJvcC1ncmF5c2NhbGUiOltjXX1dLCJiYWNrZHJvcC1odWUtcm90YXRlIjpbeyJiYWNrZHJvcC1odWUtcm90YXRlIjpbdV19XSwiYmFja2Ryb3AtaW52ZXJ0IjpbeyJiYWNrZHJvcC1pbnZlcnQiOltkXX1dLCJiYWNrZHJvcC1vcGFjaXR5IjpbeyJiYWNrZHJvcC1vcGFjaXR5Ijpbdl19XSwiYmFja2Ryb3Atc2F0dXJhdGUiOlt7ImJhY2tkcm9wLXNhdHVyYXRlIjpbX119XSwiYmFja2Ryb3Atc2VwaWEiOlt7ImJhY2tkcm9wLXNlcGlhIjpbRV19XSwiYm9yZGVyLWNvbGxhcHNlIjpbe2JvcmRlcjpbImNvbGxhcHNlIiwic2VwYXJhdGUiXX1dLCJib3JkZXItc3BhY2luZyI6W3siYm9yZGVyLXNwYWNpbmciOltsXX1dLCJib3JkZXItc3BhY2luZy14IjpbeyJib3JkZXItc3BhY2luZy14IjpbbF19XSwiYm9yZGVyLXNwYWNpbmcteSI6W3siYm9yZGVyLXNwYWNpbmcteSI6W2xdfV0sInRhYmxlLWxheW91dCI6W3t0YWJsZTpbImF1dG8iLCJmaXhlZCJdfV0sY2FwdGlvbjpbe2NhcHRpb246WyJ0b3AiLCJib3R0b20iXX1dLHRyYW5zaXRpb246W3t0cmFuc2l0aW9uOlsibm9uZSIsImFsbCIsIiIsImNvbG9ycyIsIm9wYWNpdHkiLCJzaGFkb3ciLCJ0cmFuc2Zvcm0iLEVlXX1dLGR1cmF0aW9uOlt7ZHVyYXRpb246cmUoKX1dLGVhc2U6W3tlYXNlOlsibGluZWFyIiwiaW4iLCJvdXQiLCJpbi1vdXQiLEVlXX1dLGRlbGF5Olt7ZGVsYXk6cmUoKX1dLGFuaW1hdGU6W3thbmltYXRlOlsibm9uZSIsInNwaW4iLCJwaW5nIiwicHVsc2UiLCJib3VuY2UiLEVlXX1dLHRyYW5zZm9ybTpbe3RyYW5zZm9ybTpbIiIsImdwdSIsIm5vbmUiXX1dLHNjYWxlOlt7c2NhbGU6W1NdfV0sInNjYWxlLXgiOlt7InNjYWxlLXgiOltTXX1dLCJzY2FsZS15IjpbeyJzY2FsZS15IjpbU119XSxyb3RhdGU6W3tyb3RhdGU6W25hLEVlXX1dLCJ0cmFuc2xhdGUteCI6W3sidHJhbnNsYXRlLXgiOltOXX1dLCJ0cmFuc2xhdGUteSI6W3sidHJhbnNsYXRlLXkiOltOXX1dLCJza2V3LXgiOlt7InNrZXcteCI6W2tdfV0sInNrZXcteSI6W3sic2tldy15Ijpba119XSwidHJhbnNmb3JtLW9yaWdpbiI6W3tvcmlnaW46WyJjZW50ZXIiLCJ0b3AiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImJvdHRvbS1yaWdodCIsImJvdHRvbSIsImJvdHRvbS1sZWZ0IiwibGVmdCIsInRvcC1sZWZ0IixFZV19XSxhY2NlbnQ6W3thY2NlbnQ6WyJhdXRvIix0XX1dLGFwcGVhcmFuY2U6WyJhcHBlYXJhbmNlLW5vbmUiXSxjdXJzb3I6W3tjdXJzb3I6WyJhdXRvIiwiZGVmYXVsdCIsInBvaW50ZXIiLCJ3YWl0IiwidGV4dCIsIm1vdmUiLCJoZWxwIiwibm90LWFsbG93ZWQiLCJub25lIiwiY29udGV4dC1tZW51IiwicHJvZ3Jlc3MiLCJjZWxsIiwiY3Jvc3NoYWlyIiwidmVydGljYWwtdGV4dCIsImFsaWFzIiwiY29weSIsIm5vLWRyb3AiLCJncmFiIiwiZ3JhYmJpbmciLCJhbGwtc2Nyb2xsIiwiY29sLXJlc2l6ZSIsInJvdy1yZXNpemUiLCJuLXJlc2l6ZSIsImUtcmVzaXplIiwicy1yZXNpemUiLCJ3LXJlc2l6ZSIsIm5lLXJlc2l6ZSIsIm53LXJlc2l6ZSIsInNlLXJlc2l6ZSIsInN3LXJlc2l6ZSIsImV3LXJlc2l6ZSIsIm5zLXJlc2l6ZSIsIm5lc3ctcmVzaXplIiwibndzZS1yZXNpemUiLCJ6b29tLWluIiwiem9vbS1vdXQiLEVlXX1dLCJjYXJldC1jb2xvciI6W3tjYXJldDpbdF19XSwicG9pbnRlci1ldmVudHMiOlt7InBvaW50ZXItZXZlbnRzIjpbIm5vbmUiLCJhdXRvIl19XSxyZXNpemU6W3tyZXNpemU6WyJub25lIiwieSIsIngiLCIiXX1dLCJzY3JvbGwtYmVoYXZpb3IiOlt7c2Nyb2xsOlsiYXV0byIsInNtb290aCJdfV0sInNjcm9sbC1tIjpbeyJzY3JvbGwtbSI6TCgpfV0sInNjcm9sbC1teCI6W3sic2Nyb2xsLW14IjpMKCl9XSwic2Nyb2xsLW15IjpbeyJzY3JvbGwtbXkiOkwoKX1dLCJzY3JvbGwtbXMiOlt7InNjcm9sbC1tcyI6TCgpfV0sInNjcm9sbC1tZSI6W3sic2Nyb2xsLW1lIjpMKCl9XSwic2Nyb2xsLW10IjpbeyJzY3JvbGwtbXQiOkwoKX1dLCJzY3JvbGwtbXIiOlt7InNjcm9sbC1tciI6TCgpfV0sInNjcm9sbC1tYiI6W3sic2Nyb2xsLW1iIjpMKCl9XSwic2Nyb2xsLW1sIjpbeyJzY3JvbGwtbWwiOkwoKX1dLCJzY3JvbGwtcCI6W3sic2Nyb2xsLXAiOkwoKX1dLCJzY3JvbGwtcHgiOlt7InNjcm9sbC1weCI6TCgpfV0sInNjcm9sbC1weSI6W3sic2Nyb2xsLXB5IjpMKCl9XSwic2Nyb2xsLXBzIjpbeyJzY3JvbGwtcHMiOkwoKX1dLCJzY3JvbGwtcGUiOlt7InNjcm9sbC1wZSI6TCgpfV0sInNjcm9sbC1wdCI6W3sic2Nyb2xsLXB0IjpMKCl9XSwic2Nyb2xsLXByIjpbeyJzY3JvbGwtcHIiOkwoKX1dLCJzY3JvbGwtcGIiOlt7InNjcm9sbC1wYiI6TCgpfV0sInNjcm9sbC1wbCI6W3sic2Nyb2xsLXBsIjpMKCl9XSwic25hcC1hbGlnbiI6W3tzbmFwOlsic3RhcnQiLCJlbmQiLCJjZW50ZXIiLCJhbGlnbi1ub25lIl19XSwic25hcC1zdG9wIjpbe3NuYXA6WyJub3JtYWwiLCJhbHdheXMiXX1dLCJzbmFwLXR5cGUiOlt7c25hcDpbIm5vbmUiLCJ4IiwieSIsImJvdGgiXX1dLCJzbmFwLXN0cmljdG5lc3MiOlt7c25hcDpbIm1hbmRhdG9yeSIsInByb3hpbWl0eSJdfV0sdG91Y2g6W3t0b3VjaDpbImF1dG8iLCJub25lIiwibWFuaXB1bGF0aW9uIl19XSwidG91Y2gteCI6W3sidG91Y2gtcGFuIjpbIngiLCJsZWZ0IiwicmlnaHQiXX1dLCJ0b3VjaC15IjpbeyJ0b3VjaC1wYW4iOlsieSIsInVwIiwiZG93biJdfV0sInRvdWNoLXB6IjpbInRvdWNoLXBpbmNoLXpvb20iXSxzZWxlY3Q6W3tzZWxlY3Q6WyJub25lIiwidGV4dCIsImFsbCIsImF1dG8iXX1dLCJ3aWxsLWNoYW5nZSI6W3sid2lsbC1jaGFuZ2UiOlsiYXV0byIsInNjcm9sbCIsImNvbnRlbnRzIiwidHJhbnNmb3JtIixFZV19XSxmaWxsOlt7ZmlsbDpbdCwibm9uZSJdfV0sInN0cm9rZS13Ijpbe3N0cm9rZTpbaHIsUGksZ3VdfV0sc3Ryb2tlOlt7c3Ryb2tlOlt0LCJub25lIl19XSxzcjpbInNyLW9ubHkiLCJub3Qtc3Itb25seSJdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBzOntvdmVyZmxvdzpbIm92ZXJmbG93LXgiLCJvdmVyZmxvdy15Il0sb3ZlcnNjcm9sbDpbIm92ZXJzY3JvbGwteCIsIm92ZXJzY3JvbGwteSJdLGluc2V0OlsiaW5zZXQteCIsImluc2V0LXkiLCJzdGFydCIsImVuZCIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLCJpbnNldC14IjpbInJpZ2h0IiwibGVmdCJdLCJpbnNldC15IjpbInRvcCIsImJvdHRvbSJdLGZsZXg6WyJiYXNpcyIsImdyb3ciLCJzaHJpbmsiXSxnYXA6WyJnYXAteCIsImdhcC15Il0scDpbInB4IiwicHkiLCJwcyIsInBlIiwicHQiLCJwciIsInBiIiwicGwiXSxweDpbInByIiwicGwiXSxweTpbInB0IiwicGIiXSxtOlsibXgiLCJteSIsIm1zIiwibWUiLCJtdCIsIm1yIiwibWIiLCJtbCJdLG14OlsibXIiLCJtbCJdLG15OlsibXQiLCJtYiJdLCJmb250LXNpemUiOlsibGVhZGluZyJdLCJmdm4tbm9ybWFsIjpbImZ2bi1vcmRpbmFsIiwiZnZuLXNsYXNoZWQtemVybyIsImZ2bi1maWd1cmUiLCJmdm4tc3BhY2luZyIsImZ2bi1mcmFjdGlvbiJdLCJmdm4tb3JkaW5hbCI6WyJmdm4tbm9ybWFsIl0sImZ2bi1zbGFzaGVkLXplcm8iOlsiZnZuLW5vcm1hbCJdLCJmdm4tZmlndXJlIjpbImZ2bi1ub3JtYWwiXSwiZnZuLXNwYWNpbmciOlsiZnZuLW5vcm1hbCJdLCJmdm4tZnJhY3Rpb24iOlsiZnZuLW5vcm1hbCJdLHJvdW5kZWQ6WyJyb3VuZGVkLXMiLCJyb3VuZGVkLWUiLCJyb3VuZGVkLXQiLCJyb3VuZGVkLXIiLCJyb3VuZGVkLWIiLCJyb3VuZGVkLWwiLCJyb3VuZGVkLXNzIiwicm91bmRlZC1zZSIsInJvdW5kZWQtZWUiLCJyb3VuZGVkLWVzIiwicm91bmRlZC10bCIsInJvdW5kZWQtdHIiLCJyb3VuZGVkLWJyIiwicm91bmRlZC1ibCJdLCJyb3VuZGVkLXMiOlsicm91bmRlZC1zcyIsInJvdW5kZWQtZXMiXSwicm91bmRlZC1lIjpbInJvdW5kZWQtc2UiLCJyb3VuZGVkLWVlIl0sInJvdW5kZWQtdCI6WyJyb3VuZGVkLXRsIiwicm91bmRlZC10ciJdLCJyb3VuZGVkLXIiOlsicm91bmRlZC10ciIsInJvdW5kZWQtYnIiXSwicm91bmRlZC1iIjpbInJvdW5kZWQtYnIiLCJyb3VuZGVkLWJsIl0sInJvdW5kZWQtbCI6WyJyb3VuZGVkLXRsIiwicm91bmRlZC1ibCJdLCJib3JkZXItc3BhY2luZyI6WyJib3JkZXItc3BhY2luZy14IiwiYm9yZGVyLXNwYWNpbmcteSJdLCJib3JkZXItdyI6WyJib3JkZXItdy1zIiwiYm9yZGVyLXctZSIsImJvcmRlci13LXQiLCJib3JkZXItdy1yIiwiYm9yZGVyLXctYiIsImJvcmRlci13LWwiXSwiYm9yZGVyLXcteCI6WyJib3JkZXItdy1yIiwiYm9yZGVyLXctbCJdLCJib3JkZXItdy15IjpbImJvcmRlci13LXQiLCJib3JkZXItdy1iIl0sImJvcmRlci1jb2xvciI6WyJib3JkZXItY29sb3ItdCIsImJvcmRlci1jb2xvci1yIiwiYm9yZGVyLWNvbG9yLWIiLCJib3JkZXItY29sb3ItbCJdLCJib3JkZXItY29sb3IteCI6WyJib3JkZXItY29sb3ItciIsImJvcmRlci1jb2xvci1sIl0sImJvcmRlci1jb2xvci15IjpbImJvcmRlci1jb2xvci10IiwiYm9yZGVyLWNvbG9yLWIiXSwic2Nyb2xsLW0iOlsic2Nyb2xsLW14Iiwic2Nyb2xsLW15Iiwic2Nyb2xsLW1zIiwic2Nyb2xsLW1lIiwic2Nyb2xsLW10Iiwic2Nyb2xsLW1yIiwic2Nyb2xsLW1iIiwic2Nyb2xsLW1sIl0sInNjcm9sbC1teCI6WyJzY3JvbGwtbXIiLCJzY3JvbGwtbWwiXSwic2Nyb2xsLW15IjpbInNjcm9sbC1tdCIsInNjcm9sbC1tYiJdLCJzY3JvbGwtcCI6WyJzY3JvbGwtcHgiLCJzY3JvbGwtcHkiLCJzY3JvbGwtcHMiLCJzY3JvbGwtcGUiLCJzY3JvbGwtcHQiLCJzY3JvbGwtcHIiLCJzY3JvbGwtcGIiLCJzY3JvbGwtcGwiXSwic2Nyb2xsLXB4IjpbInNjcm9sbC1wciIsInNjcm9sbC1wbCJdLCJzY3JvbGwtcHkiOlsic2Nyb2xsLXB0Iiwic2Nyb2xsLXBiIl0sdG91Y2g6WyJ0b3VjaC14IiwidG91Y2gteSIsInRvdWNoLXB6Il0sInRvdWNoLXgiOlsidG91Y2giXSwidG91Y2gteSI6WyJ0b3VjaCJdLCJ0b3VjaC1weiI6WyJ0b3VjaCJdfSxjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnM6eyJmb250LXNpemUiOlsibGVhZGluZyJdfX19Y29uc3QgYVI9SDIoc1IpO2Z1bmN0aW9uIHh0KC4uLnQpe3JldHVybiBhUih3Uyh0KSl9Y29uc3QgJGE9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsY2hpbGRyZW46ZSxpbm5lclJlZjpuLC4uLnJ9LGkpPT55LmpzeHMoeFMse3JlZjppLGNsYXNzTmFtZTp4dCgicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIix0KSwuLi5yLGNoaWxkcmVuOlt5LmpzeChSMix7Y2xhc3NOYW1lOiJoLWZ1bGwgdy1mdWxsIHJvdW5kZWQtW2luaGVyaXRdIixyZWY6bixjaGlsZHJlbjplfSkseS5qc3goJFMse30pLHkuanN4KE8yLHt9KV19KSk7JGEuZGlzcGxheU5hbWU9eFMuZGlzcGxheU5hbWU7Y29uc3QgJFM9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsb3JpZW50YXRpb246ZT0idmVydGljYWwiLC4uLm59LHIpPT55LmpzeChkUyx7cmVmOnIsb3JpZW50YXRpb246ZSxjbGFzc05hbWU6eHQoImZsZXggdG91Y2gtbm9uZSBzZWxlY3Qtbm9uZSB0cmFuc2l0aW9uLWNvbG9ycyIsZT09PSJ2ZXJ0aWNhbCImJiJoLWZ1bGwgdy0yLjUgYm9yZGVyLWwgYm9yZGVyLWwtdHJhbnNwYXJlbnQgcC1bMXB4XSIsZT09PSJob3Jpem9udGFsIiYmImgtMi41IGZsZXgtY29sIGJvcmRlci10IGJvcmRlci10LXRyYW5zcGFyZW50IHAtWzFweF0iLHQpLC4uLm4sY2hpbGRyZW46eS5qc3goQzIse2NsYXNzTmFtZTp4dCgicmVsYXRpdmUgcm91bmRlZC1mdWxsIGJnLWJvcmRlciIsZT09PSJ2ZXJ0aWNhbCImJiJmbGV4LTEiKX0pfSkpOyRTLmRpc3BsYXlOYW1lPWRTLmRpc3BsYXlOYW1lO3ZhciBjUj17eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoyNCxoZWlnaHQ6MjQsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6MixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn07Y29uc3QgdVI9dD0+dC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCksc249KHQsZSk9Pntjb25zdCBuPWguZm9yd2FyZFJlZigoe2NvbG9yOnI9ImN1cnJlbnRDb2xvciIsc2l6ZTppPTI0LHN0cm9rZVdpZHRoOm89MixhYnNvbHV0ZVN0cm9rZVdpZHRoOmwsY2hpbGRyZW46cywuLi5hfSxjKT0+aC5jcmVhdGVFbGVtZW50KCJzdmciLHtyZWY6YywuLi5jUix3aWR0aDppLGhlaWdodDppLHN0cm9rZTpyLHN0cm9rZVdpZHRoOmw/TnVtYmVyKG8pKjI0L051bWJlcihpKTpvLGNsYXNzTmFtZTpgbHVjaWRlIGx1Y2lkZS0ke3VSKHQpfWAsLi4uYX0sWy4uLmUubWFwKChbdSxkXSk9PmguY3JlYXRlRWxlbWVudCh1LGQpKSwuLi4oQXJyYXkuaXNBcnJheShzKT9zOltzXSl8fFtdXSkpO3JldHVybiBuLmRpc3BsYXlOYW1lPWAke3R9YCxufSxkUj1zbigiQ2hlY2siLFtbInBvbHlsaW5lIix7cG9pbnRzOiIyMCA2IDkgMTcgNCAxMiIsa2V5OiIxMGpqZmoifV1dKSxFZD1zbigiQ2hldnJvbkRvd24iLFtbInBhdGgiLHtkOiJtNiA5IDYgNiA2LTYiLGtleToicXJ1bnNsIn1dXSksZlI9c24oIkNoZXZyb25MZWZ0IixbWyJwYXRoIix7ZDoibTE1IDE4LTYtNiA2LTYiLGtleToiMXduZmczIn1dXSkscFI9c24oIkRpZmYiLFtbInBhdGgiLHtkOiJNMTIgM3YxNCIsa2V5OiI3Y2YzdjgifV0sWyJwYXRoIix7ZDoiTTUgMTBoMTQiLGtleToiZWxzYmZ5In1dLFsicGF0aCIse2Q6Ik01IDIxaDE0IixrZXk6IjExYXd1MyJ9XV0pLGhSPXNuKCJGaWxlIixbWyJwYXRoIix7ZDoiTTE0LjUgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjcuNUwxNC41IDJ6IixrZXk6IjFubnB5MiJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiIxNCAyIDE0IDggMjAgOCIsa2V5OiIxZXcwY20ifV1dKSxGMD1zbigiTG9nSW4iLFtbInBhdGgiLHtkOiJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNCIsa2V5OiJ1NTNzNnIifV0sWyJwb2x5bGluZSIse3BvaW50czoiMTAgMTcgMTUgMTIgMTAgNyIsa2V5OiIxYWlsMGgifV0sWyJsaW5lIix7eDE6IjE1Iix4MjoiMyIseTE6IjEyIix5MjoiMTIiLGtleToidjZncng4In1dXSksbVI9c24oIk1heGltaXplMiIsW1sicG9seWxpbmUiLHtwb2ludHM6IjE1IDMgMjEgMyAyMSA5IixrZXk6Im16bnlhZCJ9XSxbInBvbHlsaW5lIix7cG9pbnRzOiI5IDIxIDMgMjEgMyAxNSIsa2V5OiIxYXZuMWkifV0sWyJsaW5lIix7eDE6IjIxIix4MjoiMTQiLHkxOiIzIix5MjoiMTAiLGtleToib3RhN21uIn1dLFsibGluZSIse3gxOiIzIix4MjoiMTAiLHkxOiIyMSIseTI6IjE0IixrZXk6IjFhdGwwciJ9XV0pLGdSPXNuKCJNZW51IixbWyJsaW5lIix7eDE6IjQiLHgyOiIyMCIseTE6IjEyIix5MjoiMTIiLGtleToiMWUwYTlpIn1dLFsibGluZSIse3gxOiI0Iix4MjoiMjAiLHkxOiI2Iix5MjoiNiIsa2V5OiIxb3dvYjMifV0sWyJsaW5lIix7eDE6IjQiLHgyOiIyMCIseTE6IjE4Iix5MjoiMTgiLGtleToieWs1emoxIn1dXSksdlI9c24oIk1pbmltaXplMiIsW1sicG9seWxpbmUiLHtwb2ludHM6IjQgMTQgMTAgMTQgMTAgMjAiLGtleToiMTFrZm5yIn1dLFsicG9seWxpbmUiLHtwb2ludHM6IjIwIDEwIDE0IDEwIDE0IDQiLGtleToicmxtc2NlIn1dLFsibGluZSIse3gxOiIxNCIseDI6IjIxIix5MToiMTAiLHkyOiIzIixrZXk6Im81bGFmeiJ9XSxbImxpbmUiLHt4MToiMyIseDI6IjEwIix5MToiMjEiLHkyOiIxNCIsa2V5OiIxYXRsMHIifV1dKSx5Uj1zbigiTW9vbiIsW1sicGF0aCIse2Q6Ik0xMiAzYTYgNiAwIDAgMCA5IDkgOSA5IDAgMSAxLTktOVoiLGtleToiYTd0bjE4In1dXSkseFI9c24oIlBhdXNlIixbWyJyZWN0Iix7d2lkdGg6IjQiLGhlaWdodDoiMTYiLHg6IjYiLHk6IjQiLGtleToiaWZmaGU0In1dLFsicmVjdCIse3dpZHRoOiI0IixoZWlnaHQ6IjE2Iix4OiIxNCIseToiNCIsa2V5OiJzamluN2oifV1dKSxfUj1zbigiUGxheSIsW1sicG9seWdvbiIse3BvaW50czoiNSAzIDE5IDEyIDUgMjEgNSAzIixrZXk6IjE5MTYzNyJ9XV0pLHdSPXNuKCJQb3dlciIsW1sicGF0aCIse2Q6Ik0xMiAydjEwIixrZXk6Im1uZmJsIn1dLFsicGF0aCIse2Q6Ik0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiLGtleToib2JvZnU5In1dXSksU1I9c24oIlNlbmQiLFtbInBhdGgiLHtkOiJtMjIgMi03IDIwLTQtOS05LTRaIixrZXk6IjFxM3ZnZyJ9XSxbInBhdGgiLHtkOiJNMjIgMiAxMSAxMyIsa2V5OiJuemJxZWYifV1dKSxFUj1zbigiU3VuIixbWyJjaXJjbGUiLHtjeDoiMTIiLGN5OiIxMiIscjoiNCIsa2V5OiI0ZXhpcDIifV0sWyJwYXRoIix7ZDoiTTEyIDJ2MiIsa2V5OiJ0dXMwM20ifV0sWyJwYXRoIix7ZDoiTTEyIDIwdjIiLGtleToiMWxoMWtnIn1dLFsicGF0aCIse2Q6Im00LjkzIDQuOTMgMS40MSAxLjQxIixrZXk6IjE0OXQ2aiJ9XSxbInBhdGgiLHtkOiJtMTcuNjYgMTcuNjYgMS40MSAxLjQxIixrZXk6InB0Ymd1diJ9XSxbInBhdGgiLHtkOiJNMiAxMmgyIixrZXk6IjF0OGY4biJ9XSxbInBhdGgiLHtkOiJNMjAgMTJoMiIsa2V5OiIxcThtancifV0sWyJwYXRoIix7ZDoibTYuMzQgMTcuNjYtMS40MSAxLjQxIixrZXk6IjFtOHp6NSJ9XSxbInBhdGgiLHtkOiJtMTkuMDcgNC45My0xLjQxIDEuNDEiLGtleToiMXNobGNzIn1dXSksbG09c24oIlgiLFtbInBhdGgiLHtkOiJNMTggNiA2IDE4IixrZXk6IjFibDVmOCJ9XSxbInBhdGgiLHtkOiJtNiA2IDEyIDEyIixrZXk6ImQ4Yms2diJ9XV0pO2Z1bmN0aW9uIFRhKHtjaGlsZHJlbjp0fSl7Y29uc3QgZT1oLnVzZVJlZihudWxsKSxuPWgudXNlUmVmKG51bGwpLHI9aC51c2VSZWYoITEpLGk9aC51c2VSZWYoMCksbz1oLnVzZVJlZihudWxsKSxsPWgudXNlUmVmKDApLFtzLGFdPWgudXNlU3RhdGUoITApLGM9KCk9PntyLmN1cnJlbnQ9ITEsby5jdXJyZW50PW51bGwsaS5jdXJyZW50PTAsbC5jdXJyZW50PTB9LHU9eD0+e3gucHJldmVudERlZmF1bHQoKTtjb25zdCBfPW8uY3VycmVudD09PSJsZWZ0Ij9lOm47aWYoXy5jdXJyZW50JiZyLmN1cnJlbnQpe2NvbnN0IFM9by5jdXJyZW50PT09ImxlZnQiP3guc2NyZWVuWC1pLmN1cnJlbnQ6aS5jdXJyZW50LXguc2NyZWVuWDtfLmN1cnJlbnQuc3R5bGUud2lkdGg9YCR7TWF0aC5tYXgobC5jdXJyZW50K1MsMTUwKX1weGB9fSxkPXg9Pl89PntpZihfLnRhcmdldCl7Y29uc3QgRT14PT09ImxlZnQiP2U6eD09PSJyaWdodCI/bjpudWxsO3IuY3VycmVudD0hMCxFJiZFLmN1cnJlbnQmJihpLmN1cnJlbnQ9Xy5zY3JlZW5YLG8uY3VycmVudD14LEUuY3VycmVudCYmKGwuY3VycmVudD1FLmN1cnJlbnQub2Zmc2V0V2lkdGgpKX19LFtmLHAsZyxtLHcsdl09aC5DaGlsZHJlbi50b0FycmF5KHQpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+KGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLGMpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixjKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHUpfSksW10pLHkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4IGgtc2NyZWVuIixjaGlsZHJlbjpbeS5qc3hzKCJkaXYiLHtyZWY6ZSxjbGFzc05hbWU6Rm4oImFic29sdXRlIHRvcC0wIGxlZnQtMCBib3JkZXItciBib3JkZXItYm9yZGVyIG1kOnJlbGF0aXZlIHotWzFdIGJnLWdyYWRpZW50LXRvLWJyIGZyb20tY2FyZCBmcm9tLTUwJSB0by1iYWNrZ3JvdW5kIix7InctWzMwMHB4XSI6cywidy0wIG1kOnctWzMwMHB4XSI6IXN9KSxjaGlsZHJlbjpbeS5qc3hzKFRhLkNvbHVtbix7Y2hpbGRyZW46W3kuanN4KEIwLHtzaG93T25Nb2JpbGU6IXMsb25DbGljazooKT0+e2EoIXMpfSxjaGlsZHJlbjpmfSkseS5qc3goJGEse3N0eWxlOntoZWlnaHQ6ImNhbGMoMTAwdmggLSA1MHB4KSJ9LG9uQ2xpY2s6KCk9PnthKCExKX0sY2hpbGRyZW46cH0pXX0pLHkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGluc2V0LXktMCByaWdodC0wIGN1cnNvci1jb2wtcmVzaXplIHctWzFweF0gaG92ZXI6dy1bM3B4XSBoLWZ1bGwgaG92ZXI6YmctYm9yZGVyIixvbk1vdXNlRG93bjpkKCJsZWZ0Iil9KV19KSx5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOkZuKCIiLHsidy1mdWxsIjohdyYmIXZ9KSxjaGlsZHJlbjp5LmpzeHMoVGEuQ29sdW1uLHtjaGlsZHJlbjpbeS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IHctZnVsbCBib3JkZXItYiBib3JkZXItYm9yZGVyIixjaGlsZHJlbjpbeS5qc3goQjAse2NsYXNzTmFtZToibWQ6aGlkZGVuIixzaG93T25Nb2JpbGU6cyxvbkNsaWNrOigpPT57YSghcyl9LGNoaWxkcmVuOmZ9KSx5LmpzeCgic3BhbiIse2NsYXNzTmFtZTpGbih7InBsLVszMDBweF0gbWQ6cGwtMCI6c30pLGNoaWxkcmVuOmd9KV19KSx5LmpzeCgkYSx7c3R5bGU6e2hlaWdodDoiY2FsYygxMDB2aCAtIDUwcHgpIn0sY2hpbGRyZW46bX0pXX0pfSksd3x8diYmeS5qc3hzKCJkaXYiLHtyZWY6bixjbGFzc05hbWU6InJlbGF0aXZlIGgtc2NyZWVuIGJvcmRlci1sIGJvcmRlci1ib3JkZXIiLHN0eWxlOnt3aWR0aDozMDB9LGNoaWxkcmVuOlt5LmpzeHMoVGEuQ29sdW1uLHtjaGlsZHJlbjpbdyx5LmpzeCgkYSx7c3R5bGU6e2hlaWdodDoiY2FsYygxMDB2aCAtIDUwcHgpIn0sY2hpbGRyZW46dn0pXX0pLHkuanN4KCJkaXYiLHtvbk1vdXNlRG93bjpkKCJyaWdodCIpLGNsYXNzTmFtZToiYWJzb2x1dGUgaW5zZXQteS0wIGxlZnQtMCBjdXJzb3ItY29sLXJlc2l6ZSB3LVsxcHhdIGJnLWJvcmRlciBob3Zlcjp3LVszcHhdIGhvdmVyOmJnLWJvcmRlciJ9KV19KV19KX1mdW5jdGlvbiBCMCh7Y2xhc3NOYW1lOnQsc2hvd09uTW9iaWxlOmUsb25DbGljazpuLGNoaWxkcmVuOnJ9KXtyZXR1cm4geS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6Rm4oImZsZXggaXRlbXMtY2VudGVyIHB4LTQgbWQ6cHgtNCIsdCx7ImhpZGRlbiBtZDpmbGV4IjplfSksY2hpbGRyZW46W3kuanN4KCJidXR0b24iLHtjbGFzc05hbWU6Im1kOmhpZGRlbiIsb25DbGljazpuLGNoaWxkcmVuOnkuanN4KGdSLHt9KX0pLHkuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIixjaGlsZHJlbjpyfSldfSl9VGEuQ29sdW1uPSh7Y2hpbGRyZW46dCxjbGFzc05hbWU6ZX0pPT57Y29uc3RbbixyXT1oLkNoaWxkcmVuLnRvQXJyYXkodCk7cmV0dXJuIHkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOkZuKCJmbGV4IGZsZXgtY29sIixlKSxjaGlsZHJlbjpbeS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLWIgYm9yZGVyLWJvcmRlciIsY2hpbGRyZW46bn0pLHJdfSl9O3ZhciBJPXt9O2xldCBOZj17fSxUUz17fSxpYz17fSxOYT17fSxzbT17fSxlcz17fSxhdj17fSxhbT17fSxvYz17fSxsYz17fSxLaT17fSxjdj17fSx1dj17fSxOUz17fSxSUz17fSxPUz17fSxQUz17fSxBUz17fSxNUz17fSxMUz17fSxDZD17fSxEUz17fSxJUz17fSxqUz17fSx6Uz17fSxGUz17fSxCUz17fSxVUz17fSxXUz17fSxIUz17fSxkdj17fSxmdj17fSxjbT17fSxWUz17fSxLUz17fSxaUz17fTtmdW5jdGlvbiBWKHQpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7ZS5hcHBlbmQoImNvZGUiLHQpO2ZvcihsZXQgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZS5hcHBlbmQoInYiLGFyZ3VtZW50c1tuXSk7dGhyb3cgRXJyb3IoYE1pbmlmaWVkIExleGljYWwgZXJyb3IgIyR7dH07IHZpc2l0IGh0dHBzOi8vbGV4aWNhbC5kZXYvZG9jcy9lcnJvcj8ke2V9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5gKX1sZXQgYmk9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLENSPWJpJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50P2RvY3VtZW50LmRvY3VtZW50TW9kZTpudWxsLEp0PWJpJiYvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKSxzbz1iaSYmL14oPyEuKlNlYW1vbmtleSkoPz0uKkZpcmVmb3gpLiovaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGJkPWJpJiYiSW5wdXRFdmVudCJpbiB3aW5kb3cmJiFDUj8iZ2V0VGFyZ2V0UmFuZ2VzImluIG5ldyB3aW5kb3cuSW5wdXRFdmVudCgiaW5wdXQiKTohMSxwdj1iaSYmL1ZlcnNpb25cL1tcZC5dKy4qU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLFJmPWJpJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5NU1N0cmVhbSxiUj1iaSYmL14oPz0uKkNocm9tZSkuKi9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksaHY9YmkmJi9BcHBsZVdlYktpdFwvW1xkLl0rLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhYlIsT2Y9cHZ8fFJmfHxodj8iwqAiOiLigIsiLGtSPXNvPyLCoCI6T2YsJFI9L15bXkEtWmEtelx1MDBjMC1cdTAwZDZcdTAwZDgtXHUwMGY2XHUwMGY4LVx1MDJiOFx1MDMwMC1cdTA1OTBcdTA4MDAtXHUxZmZmXHUyMDBlXHUyYzAwLVx1ZmIxY1x1ZmUwMC1cdWZlNmZcdWZlZmQtXHVmZmZmXSpbXHUwNTkxLVx1MDdmZlx1ZmIxZC1cdWZkZmRcdWZlNzAtXHVmZWZjXS8sVFI9L15bXlx1MDU5MS1cdTA3ZmZcdWZiMWQtXHVmZGZkXHVmZTcwLVx1ZmVmY10qW0EtWmEtelx1MDBjMC1cdTAwZDZcdTAwZDgtXHUwMGY2XHUwMGY4LVx1MDJiOFx1MDMwMC1cdTA1OTBcdTA4MDAtXHUxZmZmXHUyMDBlXHUyYzAwLVx1ZmIxY1x1ZmUwMC1cdWZlNmZcdWZlZmQtXHVmZmZmXS8sQm89e2JvbGQ6MSxjb2RlOjE2LGhpZ2hsaWdodDoxMjgsaXRhbGljOjIsc3RyaWtldGhyb3VnaDo0LHN1YnNjcmlwdDozMixzdXBlcnNjcmlwdDo2NCx1bmRlcmxpbmU6OH0sTlI9e2RpcmVjdGlvbmxlc3M6MSx1bm1lcmdlYWJsZToyfSxVMD17Y2VudGVyOjIsZW5kOjYsanVzdGlmeTo0LGxlZnQ6MSxyaWdodDozLHN0YXJ0OjV9LFJSPXsyOiJjZW50ZXIiLDY6ImVuZCIsNDoianVzdGlmeSIsMToibGVmdCIsMzoicmlnaHQiLDU6InN0YXJ0In0sT1I9e25vcm1hbDowLHNlZ21lbnRlZDoyLHRva2VuOjF9LFBSPXswOiJub3JtYWwiLDI6InNlZ21lbnRlZCIsMToidG9rZW4ifSx1bT0hMSxtdj0wO2Z1bmN0aW9uIEFSKHQpe212PXQudGltZVN0YW1wfWZ1bmN0aW9uIElwKHQsZSxuKXtyZXR1cm4gZS5fX2xleGljYWxMaW5lQnJlYWs9PT10fHx0W2BfX2xleGljYWxLZXlfJHtuLl9rZXl9YF0hPT12b2lkIDB9ZnVuY3Rpb24gTVIodCl7cmV0dXJuIHQuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpPT57bGV0IGU9cnQoKTtyZXR1cm4gZSE9PW51bGw/ZS5jbG9uZSgpOm51bGx9KX1mdW5jdGlvbiBHUyh0LGUsbil7dW09ITA7bGV0IHI9MTAwPHBlcmZvcm1hbmNlLm5vdygpLW12O3RyeXtWbih0LCgpPT57bGV0IGk9cnQoKXx8TVIodCk7dmFyIG89bmV3IE1hcCxsPXQuZ2V0Um9vdEVsZW1lbnQoKSxzPXQuX2VkaXRvclN0YXRlLGE9dC5fYmxvY2tDdXJzb3JFbGVtZW50O2xldCBjPSExLHU9IiI7Zm9yKHZhciBkPTA7ZDxlLmxlbmd0aDtkKyspe3ZhciBmPWVbZF0scD1mLnR5cGUsZz1mLnRhcmdldCxtPUZjKGcscyk7aWYoIShtPT09bnVsbCYmZyE9PWx8fHR0KG0pKSl7aWYocD09PSJjaGFyYWN0ZXJEYXRhIil7aWYoZj1yJiZxKG0pKWU6e2Y9aSxwPWc7dmFyIHc9bTtpZihnZShmKSl7dmFyIHY9Zi5hbmNob3IuZ2V0Tm9kZSgpO2lmKHYuaXModykmJmYuZm9ybWF0IT09di5nZXRGb3JtYXQoKSl7Zj0hMTticmVhayBlfX1mPXAubm9kZVR5cGU9PT0zJiZ3LmlzQXR0YWNoZWQoKX1mJiYodz1Kcih0Ll93aW5kb3cpLHA9Zj1udWxsLHchPT1udWxsJiZ3LmFuY2hvck5vZGU9PT1nJiYoZj13LmFuY2hvck9mZnNldCxwPXcuZm9jdXNPZmZzZXQpLGc9Zy5ub2RlVmFsdWUsZyE9PW51bGwmJnd2KG0sZyxmLHAsITEpKX1lbHNlIGlmKHA9PT0iY2hpbGRMaXN0Iil7Zm9yKGM9ITAscD1mLmFkZGVkTm9kZXMsdz0wO3c8cC5sZW5ndGg7dysrKXt2PXBbd107dmFyIHg9dEUodiksXz12LnBhcmVudE5vZGU7Xz09bnVsbHx8dj09PWF8fHghPT1udWxsfHx2Lm5vZGVOYW1lPT09IkJSIiYmSXAodixfLHQpfHwoc28mJih4PXYuaW5uZXJUZXh0fHx2Lm5vZGVWYWx1ZSkmJih1Kz14KSxfLnJlbW92ZUNoaWxkKHYpKX1pZihmPWYucmVtb3ZlZE5vZGVzLHA9Zi5sZW5ndGgsMDxwKXtmb3Iodz0wLHY9MDt2PHA7disrKV89Zlt2XSwoXy5ub2RlTmFtZT09PSJCUiImJklwKF8sZyx0KXx8YT09PV8pJiYoZy5hcHBlbmRDaGlsZChfKSx3KyspO3AhPT13JiYoZz09PWwmJihtPXMuX25vZGVNYXAuZ2V0KCJyb290IikpLG8uc2V0KGcsbSkpfX19fWlmKDA8by5zaXplKWZvcihsZXRbUyxFXW9mIG8paWYoVShFKSlmb3Iobz1FLmdldENoaWxkcmVuS2V5cygpLGw9Uy5maXJzdENoaWxkLHM9MDtzPG8ubGVuZ3RoO3MrKylhPXQuZ2V0RWxlbWVudEJ5S2V5KG9bc10pLGEhPT1udWxsJiYobD09bnVsbD8oUy5hcHBlbmRDaGlsZChhKSxsPWEpOmwhPT1hJiZTLnJlcGxhY2VDaGlsZChhLGwpLGw9bC5uZXh0U2libGluZyk7ZWxzZSBxKEUpJiZFLm1hcmtEaXJ0eSgpO2lmKG89bi50YWtlUmVjb3JkcygpLDA8by5sZW5ndGgpe2ZvcihsPTA7bDxvLmxlbmd0aDtsKyspZm9yKGE9b1tsXSxzPWEuYWRkZWROb2RlcyxhPWEudGFyZ2V0LGQ9MDtkPHMubGVuZ3RoO2QrKyltPXNbZF0sZz1tLnBhcmVudE5vZGUsZz09bnVsbHx8bS5ub2RlTmFtZSE9PSJCUiJ8fElwKG0sYSx0KXx8Zy5yZW1vdmVDaGlsZChtKTtuLnRha2VSZWNvcmRzKCl9aSE9PW51bGwmJihjJiYoaS5kaXJ0eT0hMCxIcihpKSksc28mJm9FKHQpJiZpLmluc2VydFJhd1RleHQodSkpfSl9ZmluYWxseXt1bT0hMX19ZnVuY3Rpb24gWVModCl7bGV0IGU9dC5fb2JzZXJ2ZXI7aWYoZSE9PW51bGwpe2xldCBuPWUudGFrZVJlY29yZHMoKTtHUyh0LG4sZSl9fWZ1bmN0aW9uIFhTKHQpe212PT09MCYmQWYodCkuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IixBUiwhMCksdC5fb2JzZXJ2ZXI9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoKGUsbik9PntHUyh0LGUsbil9KX1mdW5jdGlvbiBXMCh0LGUpe2xldCBuPXQuX19tb2RlLHI9dC5fX2Zvcm1hdDt0PXQuX19zdHlsZTtsZXQgaT1lLl9fbW9kZSxvPWUuX19mb3JtYXQ7cmV0dXJuIGU9ZS5fX3N0eWxlLChuPT09bnVsbHx8bj09PWkpJiYocj09PW51bGx8fHI9PT1vKSYmKHQ9PT1udWxsfHx0PT09ZSl9ZnVuY3Rpb24gSDAodCxlKXtsZXQgbj10Lm1lcmdlV2l0aFNpYmxpbmcoZSkscj1odCgpLl9ub3JtYWxpemVkTm9kZXM7cmV0dXJuIHIuYWRkKHQuX19rZXkpLHIuYWRkKGUuX19rZXkpLG59ZnVuY3Rpb24gSlModCl7aWYodC5fX3RleHQ9PT0iIiYmdC5pc1NpbXBsZVRleHQoKSYmIXQuaXNVbm1lcmdlYWJsZSgpKXQucmVtb3ZlKCk7ZWxzZXtmb3IodmFyIGU7KGU9dC5nZXRQcmV2aW91c1NpYmxpbmcoKSkhPT1udWxsJiZxKGUpJiZlLmlzU2ltcGxlVGV4dCgpJiYhZS5pc1VubWVyZ2VhYmxlKCk7KWlmKGUuX190ZXh0PT09IiIpZS5yZW1vdmUoKTtlbHNle1cwKGUsdCkmJih0PUgwKGUsdCkpO2JyZWFrfWZvcih2YXIgbjsobj10LmdldE5leHRTaWJsaW5nKCkpIT09bnVsbCYmcShuKSYmbi5pc1NpbXBsZVRleHQoKSYmIW4uaXNVbm1lcmdlYWJsZSgpOylpZihuLl9fdGV4dD09PSIiKW4ucmVtb3ZlKCk7ZWxzZXtXMCh0LG4pJiZIMCh0LG4pO2JyZWFrfX19ZnVuY3Rpb24gZ3YodCl7cmV0dXJuIFYwKHQuYW5jaG9yKSxWMCh0LmZvY3VzKSx0fWZ1bmN0aW9uIFYwKHQpe2Zvcig7dC50eXBlPT09ImVsZW1lbnQiOyl7dmFyIGU9dC5nZXROb2RlKCksbj10Lm9mZnNldDtpZihuPT09ZS5nZXRDaGlsZHJlblNpemUoKT8oZT1lLmdldENoaWxkQXRJbmRleChuLTEpLG49ITApOihlPWUuZ2V0Q2hpbGRBdEluZGV4KG4pLG49ITEpLHEoZSkpe3Quc2V0KGUuX19rZXksbj9lLmdldFRleHRDb250ZW50U2l6ZSgpOjAsInRleHQiKTticmVha31lbHNlIGlmKCFVKGUpKWJyZWFrO3Quc2V0KGUuX19rZXksbj9lLmdldENoaWxkcmVuU2l6ZSgpOjAsImVsZW1lbnQiKX19bGV0IExSPTEsRFI9dHlwZW9mIHF1ZXVlTWljcm90YXNrPT0iZnVuY3Rpb24iP3F1ZXVlTWljcm90YXNrOnQ9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKHQpfTtmdW5jdGlvbiB2dih0KXtsZXQgZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKGU9PT1udWxsKXJldHVybiExO2xldCBuPWUubm9kZU5hbWU7cmV0dXJuIHR0KEZjKHQpKSYmKG49PT0iSU5QVVQifHxuPT09IlRFWFRBUkVBInx8ZS5jb250ZW50RWRpdGFibGU9PT0idHJ1ZSImJmUuX19sZXhpY2FsRWRpdG9yPT1udWxsKX1mdW5jdGlvbiB6Yyh0LGUsbil7bGV0IHI9dC5nZXRSb290RWxlbWVudCgpO3RyeXtyZXR1cm4gciE9PW51bGwmJnIuY29udGFpbnMoZSkmJnIuY29udGFpbnMobikmJmUhPT1udWxsJiYhdnYoZSkmJnl2KGUpPT09dH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24geXYodCl7Zm9yKDt0IT1udWxsOyl7bGV0IGU9dC5fX2xleGljYWxFZGl0b3I7aWYoZSE9bnVsbClyZXR1cm4gZTt0PVBmKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIGRtKHQpe3JldHVybiB0LmlzVG9rZW4oKXx8dC5pc1NlZ21lbnRlZCgpfWZ1bmN0aW9uIGtkKHQpe2Zvcig7dCE9bnVsbDspe2lmKHQubm9kZVR5cGU9PT0zKXJldHVybiB0O3Q9dC5maXJzdENoaWxkfXJldHVybiBudWxsfWZ1bmN0aW9uIFFTKHQsZSxuKXtyZXR1cm4gZT1Cb1tlXSx0JmUmJihuPT09bnVsbHx8IShuJmUpKT90XmU6bj09PW51bGx8fG4mZT90fGU6dH1mdW5jdGlvbiBxUyh0KXtyZXR1cm4gcSh0KXx8dWModCl8fHR0KHQpfWZ1bmN0aW9uIGVFKHQsZSl7aWYoZSE9bnVsbCl0Ll9fa2V5PWU7ZWxzZXttbigpLDk5PGRjJiZWKDE0KSxlPWh0KCk7dmFyIG49UXIoKSxyPSIiK0xSKys7bi5fbm9kZU1hcC5zZXQocix0KSxVKHQpP2UuX2RpcnR5RWxlbWVudHMuc2V0KHIsITApOmUuX2RpcnR5TGVhdmVzLmFkZChyKSxlLl9jbG9uZU5vdE5lZWRlZC5hZGQociksZS5fZGlydHlUeXBlPTEsdC5fX2tleT1yfX1mdW5jdGlvbiBVbyh0KXt2YXIgZT10LmdldFBhcmVudCgpO2lmKGUhPT1udWxsKXtsZXQgaT10LmdldFdyaXRhYmxlKCk7ZT1lLmdldFdyaXRhYmxlKCk7dmFyIG49dC5nZXRQcmV2aW91c1NpYmxpbmcoKTtpZih0PXQuZ2V0TmV4dFNpYmxpbmcoKSxuPT09bnVsbClpZih0IT09bnVsbCl7dmFyIHI9dC5nZXRXcml0YWJsZSgpO2UuX19maXJzdD10Ll9fa2V5LHIuX19wcmV2PW51bGx9ZWxzZSBlLl9fZmlyc3Q9bnVsbDtlbHNle2lmKHI9bi5nZXRXcml0YWJsZSgpLHQhPT1udWxsKXtsZXQgbz10LmdldFdyaXRhYmxlKCk7by5fX3ByZXY9ci5fX2tleSxyLl9fbmV4dD1vLl9fa2V5fWVsc2Ugci5fX25leHQ9bnVsbDtpLl9fcHJldj1udWxsfXQ9PT1udWxsP24hPT1udWxsPyh0PW4uZ2V0V3JpdGFibGUoKSxlLl9fbGFzdD1uLl9fa2V5LHQuX19uZXh0PW51bGwpOmUuX19sYXN0PW51bGw6KHQ9dC5nZXRXcml0YWJsZSgpLG4hPT1udWxsPyhuPW4uZ2V0V3JpdGFibGUoKSxuLl9fbmV4dD10Ll9fa2V5LHQuX19wcmV2PW4uX19rZXkpOnQuX19wcmV2PW51bGwsaS5fX25leHQ9bnVsbCksZS5fX3NpemUtLSxpLl9fcGFyZW50PW51bGx9fWZ1bmN0aW9uICRkKHQpezk5PGRjJiZWKDE0KTt2YXIgZT10LmdldExhdGVzdCgpLG49ZS5fX3BhcmVudCxyPVFyKCk7bGV0IGk9aHQoKSxvPXIuX25vZGVNYXA7aWYocj1pLl9kaXJ0eUVsZW1lbnRzLG4hPT1udWxsKWU6Zm9yKDtuIT09bnVsbDspe2lmKHIuaGFzKG4pKWJyZWFrIGU7bGV0IGw9by5nZXQobik7aWYobD09PXZvaWQgMClicmVhaztyLnNldChuLCExKSxuPWwuX19wYXJlbnR9ZT1lLl9fa2V5LGkuX2RpcnR5VHlwZT0xLFUodCk/ci5zZXQoZSwhMCk6aS5fZGlydHlMZWF2ZXMuYWRkKGUpfWZ1bmN0aW9uIEt0KHQpe21uKCk7dmFyIGU9aHQoKTtsZXQgbj1lLl9jb21wb3NpdGlvbktleTt0IT09biYmKGUuX2NvbXBvc2l0aW9uS2V5PXQsbiE9PW51bGwmJihlPUl0KG4pLGUhPT1udWxsJiZlLmdldFdyaXRhYmxlKCkpLHQhPT1udWxsJiYodD1JdCh0KSx0IT09bnVsbCYmdC5nZXRXcml0YWJsZSgpKSl9ZnVuY3Rpb24gWmkoKXtyZXR1cm4gQXMoKT9udWxsOmh0KCkuX2NvbXBvc2l0aW9uS2V5fWZ1bmN0aW9uIEl0KHQsZSl7cmV0dXJuIHQ9KGV8fFFyKCkpLl9ub2RlTWFwLmdldCh0KSx0PT09dm9pZCAwP251bGw6dH1mdW5jdGlvbiB0RSh0LGUpe2xldCBuPWh0KCk7cmV0dXJuIHQ9dFtgX19sZXhpY2FsS2V5XyR7bi5fa2V5fWBdLHQhPT12b2lkIDA/SXQodCxlKTpudWxsfWZ1bmN0aW9uIEZjKHQsZSl7Zm9yKDt0IT1udWxsOyl7bGV0IG49dEUodCxlKTtpZihuIT09bnVsbClyZXR1cm4gbjt0PVBmKHQpfXJldHVybiBudWxsfWZ1bmN0aW9uIG5FKHQpe2xldCBlPU9iamVjdC5hc3NpZ24oe30sdC5fZGVjb3JhdG9ycyk7cmV0dXJuIHQuX3BlbmRpbmdEZWNvcmF0b3JzPWV9ZnVuY3Rpb24gSzAodCl7cmV0dXJuIHQucmVhZCgoKT0+WHIoKS5nZXRUZXh0Q29udGVudCgpKX1mdW5jdGlvbiBJUih0LGUpe1ZuKHQsKCk9Pnt2YXIgbj1RcigpO2lmKCFuLmlzRW1wdHkoKSlpZihlPT09InJvb3QiKVhyKCkubWFya0RpcnR5KCk7ZWxzZXtuPW4uX25vZGVNYXA7Zm9yKGxldFsscl1vZiBuKXIubWFya0RpcnR5KCl9fSx0Ll9wZW5kaW5nRWRpdG9yU3RhdGU9PT1udWxsP3t0YWc6Imhpc3RvcnktbWVyZ2UifTp2b2lkIDApfWZ1bmN0aW9uIFhyKCl7cmV0dXJuIFFyKCkuX25vZGVNYXAuZ2V0KCJyb290Iil9ZnVuY3Rpb24gSHIodCl7bW4oKTtsZXQgZT1RcigpO3QhPT1udWxsJiYodC5kaXJ0eT0hMCx0Ll9jYWNoZWROb2Rlcz1udWxsKSxlLl9zZWxlY3Rpb249dH1mdW5jdGlvbiBXbCh0KXt2YXIgZT1odCgpLG47ZTp7Zm9yKG49dDtuIT1udWxsOyl7bGV0IHI9bltgX19sZXhpY2FsS2V5XyR7ZS5fa2V5fWBdO2lmKHIhPT12b2lkIDApe249cjticmVhayBlfW49UGYobil9bj1udWxsfXJldHVybiBuPT09bnVsbD8oZT1lLmdldFJvb3RFbGVtZW50KCksdD09PWU/SXQoInJvb3QiKTpudWxsKTpJdChuKX1mdW5jdGlvbiByRSh0KXtyZXR1cm4vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2cudGVzdCh0KX1mdW5jdGlvbiB4dih0KXtsZXQgZT1bXTtmb3IoO3QhPT1udWxsOyllLnB1c2godCksdD10Ll9wYXJlbnRFZGl0b3I7cmV0dXJuIGV9ZnVuY3Rpb24gaUUoKXtyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCIiKS5zdWJzdHIoMCw1KX1mdW5jdGlvbiBfdih0LGUsbil7aWYoZT1KcihlLl93aW5kb3cpLGUhPT1udWxsKXt2YXIgcj1lLmFuY2hvck5vZGUse2FuY2hvck9mZnNldDppLGZvY3VzT2Zmc2V0Om99PWU7aWYociE9PW51bGwmJihlPXIubm9kZVR5cGU9PT0zP3Iubm9kZVZhbHVlOm51bGwscj1GYyhyKSxlIT09bnVsbCYmcShyKSkpe2lmKGU9PT1PZiYmbil7bGV0IGw9bi5sZW5ndGg7ZT1uLG89aT1sfWUhPT1udWxsJiZ3dihyLGUsaSxvLHQpfX19ZnVuY3Rpb24gd3YodCxlLG4scixpKXtsZXQgbz10O2lmKG8uaXNBdHRhY2hlZCgpJiYoaXx8IW8uaXNEaXJ0eSgpKSl7bGV0IGM9by5pc0NvbXBvc2luZygpLHU9ZTtpZigoY3x8aSkmJmVbZS5sZW5ndGgtMV09PT1PZiYmKHU9ZS5zbGljZSgwLC0xKSksZT1vLmdldFRleHRDb250ZW50KCksaXx8dSE9PWUpaWYodT09PSIiKWlmKEt0KG51bGwpLHB2fHxSZnx8aHYpby5yZW1vdmUoKTtlbHNle2xldCBkPWh0KCk7c2V0VGltZW91dCgoKT0+e2QudXBkYXRlKCgpPT57by5pc0F0dGFjaGVkKCkmJm8ucmVtb3ZlKCl9KX0sMjApfWVsc2V7aT1vLmdldFBhcmVudCgpLGU9UHMoKTt2YXIgbD1vLmdldFRleHRDb250ZW50U2l6ZSgpLHM9WmkoKSxhPW8uZ2V0S2V5KCk7by5pc1Rva2VuKCl8fHMhPT1udWxsJiZhPT09cyYmIWN8fGdlKGUpJiYoaSE9PW51bGwmJiFpLmNhbkluc2VydFRleHRCZWZvcmUoKSYmZS5hbmNob3Iub2Zmc2V0PT09MHx8ZS5hbmNob3Iua2V5PT09dC5fX2tleSYmZS5hbmNob3Iub2Zmc2V0PT09MCYmIW8uY2FuSW5zZXJ0VGV4dEJlZm9yZSgpfHxlLmZvY3VzLmtleT09PXQuX19rZXkmJmUuZm9jdXMub2Zmc2V0PT09bCYmIW8uY2FuSW5zZXJ0VGV4dEFmdGVyKCkpP28ubWFya0RpcnR5KCk6KHQ9cnQoKSxnZSh0KSYmbiE9PW51bGwmJnIhPT1udWxsJiYodC5zZXRUZXh0Tm9kZVJhbmdlKG8sbixvLHIpLG8uaXNTZWdtZW50ZWQoKSYmKG49by5nZXRUZXh0Q29udGVudCgpLG49THQobiksby5yZXBsYWNlKG4pLG89bikpLG8uc2V0VGV4dENvbnRlbnQodSkpfX19ZnVuY3Rpb24galIodCxlKXtpZihlLmlzU2VnbWVudGVkKCkpcmV0dXJuITA7aWYoIXQuaXNDb2xsYXBzZWQoKSlyZXR1cm4hMTt0PXQuYW5jaG9yLm9mZnNldDtsZXQgbj1lLmdldFBhcmVudE9yVGhyb3coKSxyPWUuaXNUb2tlbigpO3JldHVybiB0PT09MD8oKHQ9IWUuY2FuSW5zZXJ0VGV4dEJlZm9yZSgpfHwhbi5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fHIpfHwoZT1lLmdldFByZXZpb3VzU2libGluZygpLHQ9KHEoZSl8fFUoZSkmJmUuaXNJbmxpbmUoKSkmJiFlLmNhbkluc2VydFRleHRBZnRlcigpKSx0KTp0PT09ZS5nZXRUZXh0Q29udGVudFNpemUoKT8hZS5jYW5JbnNlcnRUZXh0QWZ0ZXIoKXx8IW4uY2FuSW5zZXJ0VGV4dEFmdGVyKCl8fHI6ITF9ZnVuY3Rpb24gUmEodCxlKXt0Ll9fbGV4aWNhbENsYXNzTmFtZUNhY2hlPT09dm9pZCAwJiYodC5fX2xleGljYWxDbGFzc05hbWVDYWNoZT17fSk7bGV0IG49dC5fX2xleGljYWxDbGFzc05hbWVDYWNoZSxyPW5bZV07cmV0dXJuIHIhPT12b2lkIDA/cjoodD10W2VdLHR5cGVvZiB0PT0ic3RyaW5nIj8odD10LnNwbGl0KCIgIiksbltlXT10KTp0KX1mdW5jdGlvbiBTdih0LGUsbixyLGkpe24uc2l6ZSE9PTAmJihuPXIuX190eXBlLHI9ci5fX2tleSxlPWUuZ2V0KG4pLGU9PT12b2lkIDAmJlYoMzMsbiksbj1lLmtsYXNzLGU9dC5nZXQobiksZT09PXZvaWQgMCYmKGU9bmV3IE1hcCx0LnNldChuLGUpKSx0PWUuZ2V0KHIpLG49dD09PSJkZXN0cm95ZWQiJiZpPT09ImNyZWF0ZWQiLCh0PT09dm9pZCAwfHxuKSYmZS5zZXQocixuPyJ1cGRhdGVkIjppKSl9ZnVuY3Rpb24gWjAodCxlLG4pe2xldCByPXQuZ2V0UGFyZW50KCksaT1uO3JldHVybiByIT09bnVsbCYmKGUmJm49PT0wPyhpPXQuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSx0PXIpOmV8fG4hPT10LmdldENoaWxkcmVuU2l6ZSgpfHwoaT10LmdldEluZGV4V2l0aGluUGFyZW50KCkrMSx0PXIpKSx0LmdldENoaWxkQXRJbmRleChlP2ktMTppKX1mdW5jdGlvbiBmbSh0LGUpe3ZhciBuPXQub2Zmc2V0O3JldHVybiB0LnR5cGU9PT0iZWxlbWVudCI/KHQ9dC5nZXROb2RlKCksWjAodCxlLG4pKToodD10LmdldE5vZGUoKSxlJiZuPT09MHx8IWUmJm49PT10LmdldFRleHRDb250ZW50U2l6ZSgpPyhuPWU/dC5nZXRQcmV2aW91c1NpYmxpbmcoKTp0LmdldE5leHRTaWJsaW5nKCksbj09PW51bGw/WjAodC5nZXRQYXJlbnRPclRocm93KCksZSx0LmdldEluZGV4V2l0aGluUGFyZW50KCkrKGU/MDoxKSk6bik6bnVsbCl9ZnVuY3Rpb24gb0UodCl7cmV0dXJuIHQ9KHQ9QWYodCkuZXZlbnQpJiZ0LmlucHV0VHlwZSx0PT09Imluc2VydEZyb21QYXN0ZSJ8fHQ9PT0iaW5zZXJ0RnJvbVBhc3RlQXNRdW90YXRpb24ifWZ1bmN0aW9uIFRkKHQpe3JldHVybiF2bih0KSYmIXQuaXNMYXN0Q2hpbGQoKSYmIXQuaXNJbmxpbmUoKX1mdW5jdGlvbiBOZCh0LGUpe3JldHVybiB0PXQuX2tleVRvRE9NTWFwLmdldChlKSx0PT09dm9pZCAwJiZWKDc1LGUpLHR9ZnVuY3Rpb24gUGYodCl7cmV0dXJuIHQ9dC5hc3NpZ25lZFNsb3R8fHQucGFyZW50RWxlbWVudCx0IT09bnVsbCYmdC5ub2RlVHlwZT09PTExP3QuaG9zdDp0fWZ1bmN0aW9uIFJkKHQsZSl7Zm9yKHQ9dC5nZXRQYXJlbnQoKTt0IT09bnVsbDspe2lmKHQuaXMoZSkpcmV0dXJuITA7dD10LmdldFBhcmVudCgpfXJldHVybiExfWZ1bmN0aW9uIEFmKHQpe3JldHVybiB0PXQuX3dpbmRvdyx0PT09bnVsbCYmVig3OCksdH1mdW5jdGlvbiBsRSh0KXtmb3IodD10LmdldFBhcmVudE9yVGhyb3coKTt0IT09bnVsbCYmIV9yKHQpOyl0PXQuZ2V0UGFyZW50T3JUaHJvdygpO3JldHVybiB0fWZ1bmN0aW9uIF9yKHQpe3JldHVybiB2bih0KXx8VSh0KSYmdC5pc1NoYWRvd1Jvb3QoKX1mdW5jdGlvbiBzRSh0KXtyZXR1cm4gdD10LmNvbnN0cnVjdG9yLmNsb25lKHQpLGVFKHQsbnVsbCksdH1mdW5jdGlvbiBCYyh0KXt2YXIgZT1odCgpO2xldCBuPXQuY29uc3RydWN0b3IuZ2V0VHlwZSgpO3JldHVybiBlPWUuX25vZGVzLmdldChuKSxlPT09dm9pZCAwJiZWKDk3KSxlPWUucmVwbGFjZSxlIT09bnVsbD8oZT1lKHQpLGUgaW5zdGFuY2VvZiB0LmNvbnN0cnVjdG9yfHxWKDk4KSxlKTp0fWZ1bmN0aW9uIGpwKHQsZSl7dD10LmdldFBhcmVudCgpLCF2bih0KXx8VShlKXx8dHQoZSl8fFYoOTkpfWZ1bmN0aW9uIHpwKHQpe3JldHVybih0dCh0KXx8VSh0KSYmIXQuY2FuQmVFbXB0eSgpKSYmIXQuaXNJbmxpbmUoKX1mdW5jdGlvbiBwbSh0LGUsbil7bi5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgiY2FyZXQtY29sb3IiKSxlLl9ibG9ja0N1cnNvckVsZW1lbnQ9bnVsbCxlPXQucGFyZW50RWxlbWVudCxlIT09bnVsbCYmZS5yZW1vdmVDaGlsZCh0KX1mdW5jdGlvbiBKcih0KXtyZXR1cm4gYmk/KHR8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCk6bnVsbH1mdW5jdGlvbiBhRSh0LGUpe2xldCBuPXQuZ2V0Q2hpbGRBdEluZGV4KGUpO249PW51bGwmJihuPXQpLF9yKHQpJiZWKDEwMik7bGV0IHI9bD0+e2NvbnN0IHM9bC5nZXRQYXJlbnRPclRocm93KCksYT1fcihzKSxjPWwhPT1ufHxhP3NFKGwpOmw7aWYoYSlyZXR1cm4gbC5pbnNlcnRBZnRlcihjKSxbbCxjLGNdO2NvbnN0W3UsZCxmXT1yKHMpO3JldHVybiBsPWwuZ2V0TmV4dFNpYmxpbmdzKCksZi5hcHBlbmQoYywuLi5sKSxbdSxkLGNdfSxbaSxvXT1yKG4pO3JldHVybltpLG9dfWZ1bmN0aW9uIE9kKHQsZSl7Zm9yKDt0IT09WHIoKSYmdCE9bnVsbDspe2lmKGUodCkpcmV0dXJuIHQ7dD10LmdldFBhcmVudCgpfXJldHVybiBudWxsfWZ1bmN0aW9uIHpSKHQpe2xldCBlPVtdLG49W3RdO2Zvcig7MDxuLmxlbmd0aDspe2xldCByPW4ucG9wKCk7cj09PXZvaWQgMCYmVigxMTIpLFUocikmJm4udW5zaGlmdCguLi5yLmdldENoaWxkcmVuKCkpLHIhPT10JiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gTWYodCl7cmV0dXJuIHQubm9kZVR5cGU9PT0xfWZ1bmN0aW9uIGNFKHQsZSxuLHIsaSxvKXtmb3IodD10LmdldEZpcnN0Q2hpbGQoKTt0IT09bnVsbDspe2xldCBsPXQuX19rZXk7dC5fX3BhcmVudD09PWUmJihVKHQpJiZjRSh0LGwsbixyLGksbyksbi5oYXMobCl8fG8uZGVsZXRlKGwpLGkucHVzaChsKSksdD10LmdldE5leHRTaWJsaW5nKCl9fWZ1bmN0aW9uIEZSKHQsZSxuLHIpe3Q9dC5fbm9kZU1hcCxlPWUuX25vZGVNYXA7bGV0IGk9W107Zm9yKGxldFtvXW9mIHIpe2xldCBsPWUuZ2V0KG8pO2w9PT12b2lkIDB8fGwuaXNBdHRhY2hlZCgpfHwoVShsKSYmY0UobCxvLHQsZSxpLHIpLHQuaGFzKG8pfHxyLmRlbGV0ZShvKSxpLnB1c2gobykpfWZvcihsZXQgbyBvZiBpKWUuZGVsZXRlKG8pO2ZvcihsZXQgbyBvZiBuKXI9ZS5nZXQobykscj09PXZvaWQgMHx8ci5pc0F0dGFjaGVkKCl8fCh0LmhhcyhvKXx8bi5kZWxldGUobyksZS5kZWxldGUobykpfWxldCBOdD0iIixobj0iIixsaT0iIixhbyx0bixzYyx1RT0hMSxFdj0hMSxMZixXdT1udWxsLGhtLG1tLEpvLGNvLGdtLGFjO2Z1bmN0aW9uIEh1KHQsZSl7bGV0IG49Sm8uZ2V0KHQpO2lmKGUhPT1udWxsKXtsZXQgcj14bSh0KTtyLnBhcmVudE5vZGU9PT1lJiZlLnJlbW92ZUNoaWxkKHIpfWNvLmhhcyh0KXx8dG4uX2tleVRvRE9NTWFwLmRlbGV0ZSh0KSxVKG4pJiYodD1QZChuLEpvKSx2bSh0LDAsdC5sZW5ndGgtMSxudWxsKSksbiE9PXZvaWQgMCYmU3YoYWMsc2MsTGYsbiwiZGVzdHJveWVkIil9ZnVuY3Rpb24gdm0odCxlLG4scil7Zm9yKDtlPD1uOysrZSl7bGV0IGk9dFtlXTtpIT09dm9pZCAwJiZIdShpLHIpfX1mdW5jdGlvbiBUbyh0LGUpe3Quc2V0UHJvcGVydHkoInRleHQtYWxpZ24iLGUpfWZ1bmN0aW9uIGRFKHQsZSl7dmFyIG49YW8udGhlbWUuaW5kZW50O2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7bGV0IHI9dC5jbGFzc0xpc3QuY29udGFpbnMobik7MDxlJiYhcj90LmNsYXNzTGlzdC5hZGQobik6MT5lJiZyJiZ0LmNsYXNzTGlzdC5yZW1vdmUobil9bj1nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoIi0tbGV4aWNhbC1pbmRlbnQtYmFzZS12YWx1ZSIpfHwiNDBweCIsdC5zdHlsZS5zZXRQcm9wZXJ0eSgicGFkZGluZy1pbmxpbmUtc3RhcnQiLGU9PT0wPyIiOmBjYWxjKCR7ZX0gKiAke259KWApfWZ1bmN0aW9uIGZFKHQsZSl7dD10LnN0eWxlLGU9PT0wP1RvKHQsIiIpOmU9PT0xP1RvKHQsImxlZnQiKTplPT09Mj9Ubyh0LCJjZW50ZXIiKTplPT09Mz9Ubyh0LCJyaWdodCIpOmU9PT00P1RvKHQsImp1c3RpZnkiKTplPT09NT9Ubyh0LCJzdGFydCIpOmU9PT02JiZUbyh0LCJlbmQiKX1mdW5jdGlvbiBWdSh0LGUsbil7bGV0IHI9Y28uZ2V0KHQpO3I9PT12b2lkIDAmJlYoNjApO2xldCBpPXIuY3JlYXRlRE9NKGFvLHRuKTt2YXIgbz10bi5fa2V5VG9ET01NYXA7aWYoaVsiX19sZXhpY2FsS2V5XyIrdG4uX2tleV09dCxvLnNldCh0LGkpLHEocik/aS5zZXRBdHRyaWJ1dGUoImRhdGEtbGV4aWNhbC10ZXh0IiwidHJ1ZSIpOnR0KHIpJiZpLnNldEF0dHJpYnV0ZSgiZGF0YS1sZXhpY2FsLWRlY29yYXRvciIsInRydWUiKSxVKHIpKXtpZih0PXIuX19pbmRlbnQsbz1yLl9fc2l6ZSx0IT09MCYmZEUoaSx0KSxvIT09MCl7LS1vLHQ9UGQocixjbyk7dmFyIGw9aG47aG49IiIseW0odCxyLDAsbyxpLG51bGwpLGhFKHIsaSksaG49bH10PXIuX19mb3JtYXQsdCE9PTAmJmZFKGksdCksci5pc0lubGluZSgpfHxwRShudWxsLHIsaSksVGQocikmJihOdCs9YAoKYCxsaSs9YAoKYCl9ZWxzZSBvPXIuZ2V0VGV4dENvbnRlbnQoKSx0dChyKT8obD1yLmRlY29yYXRlKHRuLGFvKSxsIT09bnVsbCYmbUUodCxsKSxpLmNvbnRlbnRFZGl0YWJsZT0iZmFsc2UiKTpxKHIpJiYoci5pc0RpcmVjdGlvbmxlc3MoKXx8KGhuKz1vKSksTnQrPW8sbGkrPW87cmV0dXJuIGUhPT1udWxsJiYobiE9bnVsbD9lLmluc2VydEJlZm9yZShpLG4pOihuPWUuX19sZXhpY2FsTGluZUJyZWFrLG4hPW51bGw/ZS5pbnNlcnRCZWZvcmUoaSxuKTplLmFwcGVuZENoaWxkKGkpKSksU3YoYWMsc2MsTGYsciwiY3JlYXRlZCIpLGl9ZnVuY3Rpb24geW0odCxlLG4scixpLG8pe2xldCBsPU50O2ZvcihOdD0iIjtuPD1yOysrbilWdSh0W25dLGksbyk7VGQoZSkmJihOdCs9YAoKYCksaS5fX2xleGljYWxUZXh0Q29udGVudD1OdCxOdD1sK050fWZ1bmN0aW9uIEcwKHQsZSl7cmV0dXJuIHQ9ZS5nZXQodCksdWModCl8fHR0KHQpJiZ0LmlzSW5saW5lKCl9ZnVuY3Rpb24gcEUodCxlLG4pe3Q9dCE9PW51bGwmJih0Ll9fc2l6ZT09PTB8fEcwKHQuX19sYXN0LEpvKSksZT1lLl9fc2l6ZT09PTB8fEcwKGUuX19sYXN0LGNvKSx0P2V8fChlPW4uX19sZXhpY2FsTGluZUJyZWFrLGUhPW51bGwmJm4ucmVtb3ZlQ2hpbGQoZSksbi5fX2xleGljYWxMaW5lQnJlYWs9bnVsbCk6ZSYmKGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSxuLl9fbGV4aWNhbExpbmVCcmVhaz1lLG4uYXBwZW5kQ2hpbGQoZSkpfWZ1bmN0aW9uIGhFKHQsZSl7dmFyIG49ZS5fX2xleGljYWxEaXI7aWYoZS5fX2xleGljYWxEaXJUZXh0Q29udGVudCE9PWhufHxuIT09V3Upe2xldCBvPWhuPT09IiI7aWYobyl2YXIgcj1XdTtlbHNlIHI9aG4scj0kUi50ZXN0KHIpPyJydGwiOlRSLnRlc3Qocik/Imx0ciI6bnVsbDtpZihyIT09bil7bGV0IGw9ZS5jbGFzc0xpc3Qscz1hby50aGVtZTt2YXIgaT1uIT09bnVsbD9zW25dOnZvaWQgMDtsZXQgYT1yIT09bnVsbD9zW3JdOnZvaWQgMDtpIT09dm9pZCAwJiYodHlwZW9mIGk9PSJzdHJpbmciJiYoaT1pLnNwbGl0KCIgIiksaT1zW25dPWkpLGwucmVtb3ZlKC4uLmkpKSxyPT09bnVsbHx8byYmcj09PSJsdHIiP2UucmVtb3ZlQXR0cmlidXRlKCJkaXIiKTooYSE9PXZvaWQgMCYmKHR5cGVvZiBhPT0ic3RyaW5nIiYmKG49YS5zcGxpdCgiICIpLGE9c1tyXT1uKSxhIT09dm9pZCAwJiZsLmFkZCguLi5hKSksZS5kaXI9ciksRXZ8fCh0LmdldFdyaXRhYmxlKCkuX19kaXI9cil9V3U9cixlLl9fbGV4aWNhbERpclRleHRDb250ZW50PWhuLGUuX19sZXhpY2FsRGlyPXJ9fWZ1bmN0aW9uIFBkKHQsZSl7bGV0IG49W107Zm9yKHQ9dC5fX2ZpcnN0O3QhPT1udWxsOyl7bGV0IHI9ZS5nZXQodCk7cj09PXZvaWQgMCYmVigxMDEpLG4ucHVzaCh0KSx0PXIuX19uZXh0fXJldHVybiBufWZ1bmN0aW9uIGhhKHQsZSl7dmFyIG49Sm8uZ2V0KHQpLHI9Y28uZ2V0KHQpO24hPT12b2lkIDAmJnIhPT12b2lkIDB8fFYoNjEpO3ZhciBpPXVFfHxtbS5oYXModCl8fGhtLmhhcyh0KTtsZXQgbz1OZCh0bix0KTtpZihuPT09ciYmIWkpcmV0dXJuIFUobik/KHI9by5fX2xleGljYWxUZXh0Q29udGVudCxyIT09dm9pZCAwJiYoTnQrPXIsbGkrPXIpLHI9by5fX2xleGljYWxEaXJUZXh0Q29udGVudCxyIT09dm9pZCAwJiYoaG4rPXIpKToocj1uLmdldFRleHRDb250ZW50KCkscShuKSYmIW4uaXNEaXJlY3Rpb25sZXNzKCkmJihobis9ciksbGkrPXIsTnQrPXIpLG87aWYobiE9PXImJmkmJlN2KGFjLHNjLExmLHIsInVwZGF0ZWQiKSxyLnVwZGF0ZURPTShuLG8sYW8pKXJldHVybiByPVZ1KHQsbnVsbCxudWxsKSxlPT09bnVsbCYmVig2MiksZS5yZXBsYWNlQ2hpbGQocixvKSxIdSh0LG51bGwpLHI7aWYoVShuKSYmVShyKSl7aWYodD1yLl9faW5kZW50LHQhPT1uLl9faW5kZW50JiZkRShvLHQpLHQ9ci5fX2Zvcm1hdCx0IT09bi5fX2Zvcm1hdCYmZkUobyx0KSxpKXt0PXIsaT1obixobj0iIixlPU50O3ZhciBsPW4uX19zaXplLHM9dC5fX3NpemU7aWYoTnQ9IiIsbD09PTEmJnM9PT0xKXt2YXIgYT1uLl9fZmlyc3QsYz10Ll9fZmlyc3Q7aWYoYT09PWMpaGEoYSxvKTtlbHNle3ZhciB1PXhtKGEpO2M9VnUoYyxudWxsLG51bGwpLG8ucmVwbGFjZUNoaWxkKGMsdSksSHUoYSxudWxsKX19ZWxzZXtjPVBkKG4sSm8pO3ZhciBkPVBkKHQsY28pO2lmKGw9PT0wKXMhPT0wJiZ5bShkLHQsMCxzLTEsbyxudWxsKTtlbHNlIGlmKHM9PT0wKWwhPT0wJiYoYT1vLl9fbGV4aWNhbExpbmVCcmVhaz09bnVsbCx2bShjLDAsbC0xLGE/bnVsbDpvKSxhJiYoby50ZXh0Q29udGVudD0iIikpO2Vsc2V7dmFyIGY9YztjPWQsZD1sLTEsbD1zLTE7bGV0IGc9by5maXJzdENoaWxkLG09MDtmb3Iocz0wO208PWQmJnM8PWw7KXt2YXIgcD1mW21dO2xldCB3PWNbc107aWYocD09PXcpZz1GcChoYSh3LG8pKSxtKysscysrO2Vsc2V7YT09PXZvaWQgMCYmKGE9bmV3IFNldChmKSksdT09PXZvaWQgMCYmKHU9bmV3IFNldChjKSk7bGV0IHY9dS5oYXMocCkseD1hLmhhcyh3KTt2Pyh4PyhwPU5kKHRuLHcpLHA9PT1nP2c9RnAoaGEodyxvKSk6KGchPW51bGw/by5pbnNlcnRCZWZvcmUocCxnKTpvLmFwcGVuZENoaWxkKHApLGhhKHcsbykpLG0rKyk6VnUodyxvLGcpLHMrKyk6KGc9RnAoeG0ocCkpLEh1KHAsbyksbSsrKX19YT1tPmQsdT1zPmwsYSYmIXU/KGE9Y1tsKzFdLGE9YT09PXZvaWQgMD9udWxsOnRuLmdldEVsZW1lbnRCeUtleShhKSx5bShjLHQscyxsLG8sYSkpOnUmJiFhJiZ2bShmLG0sZCxvKX19VGQodCkmJihOdCs9YAoKYCksby5fX2xleGljYWxUZXh0Q29udGVudD1OdCxOdD1lK050LGhFKHQsbyksaG49aSx2bihyKXx8ci5pc0lubGluZSgpfHxwRShuLHIsbyl9VGQocikmJihOdCs9YAoKYCxsaSs9YAoKYCl9ZWxzZSBuPXIuZ2V0VGV4dENvbnRlbnQoKSx0dChyKT8oaT1yLmRlY29yYXRlKHRuLGFvKSxpIT09bnVsbCYmbUUodCxpKSk6cShyKSYmIXIuaXNEaXJlY3Rpb25sZXNzKCkmJihobis9biksTnQrPW4sbGkrPW47cmV0dXJuIUV2JiZ2bihyKSYmci5fX2NhY2hlZFRleHQhPT1saSYmKHI9ci5nZXRXcml0YWJsZSgpLHIuX19jYWNoZWRUZXh0PWxpKSxvfWZ1bmN0aW9uIG1FKHQsZSl7bGV0IG49dG4uX3BlbmRpbmdEZWNvcmF0b3JzLHI9dG4uX2RlY29yYXRvcnM7aWYobj09PW51bGwpe2lmKHJbdF09PT1lKXJldHVybjtuPW5FKHRuKX1uW3RdPWV9ZnVuY3Rpb24gRnAodCl7cmV0dXJuIHQ9dC5uZXh0U2libGluZyx0IT09bnVsbCYmdD09PXRuLl9ibG9ja0N1cnNvckVsZW1lbnQmJih0PXQubmV4dFNpYmxpbmcpLHR9ZnVuY3Rpb24geG0odCl7bGV0IGU9Z20uZ2V0KHQpO3JldHVybiBlPT09dm9pZCAwJiZWKDc1LHQpLGV9bGV0IHRpPU9iamVjdC5mcmVlemUoe30pLF9tPVtbImtleWRvd24iLEdSXSxbInBvaW50ZXJkb3duIixVUl0sWyJjb21wb3NpdGlvbnN0YXJ0IixLUl0sWyJjb21wb3NpdGlvbmVuZCIsWlJdLFsiaW5wdXQiLFZSXSxbImNsaWNrIixCUl0sWyJjdXQiLHRpXSxbImNvcHkiLHRpXSxbImRyYWdzdGFydCIsdGldLFsiZHJhZ292ZXIiLHRpXSxbImRyYWdlbmQiLHRpXSxbInBhc3RlIix0aV0sWyJmb2N1cyIsdGldLFsiYmx1ciIsdGldLFsiZHJvcCIsdGldXTtiZCYmX20ucHVzaChbImJlZm9yZWlucHV0IiwodCxlKT0+SFIodCxlKV0pO2xldCBjYz0wLGdFPTAsdkU9MCxObD1udWxsLE9hPTAsd209ITEsU209ITEsUGE9ITEsbWE9ITEseUU9WzAsIiIsMCwicm9vdCIsMF07ZnVuY3Rpb24geEUodCxlLG4scixpKXtsZXQgbz10LmFuY2hvcixsPXQuZm9jdXMscz1vLmdldE5vZGUoKTt2YXIgYT1odCgpO2xldCBjPUpyKGEuX3dpbmRvdyksdT1jIT09bnVsbD9jLmFuY2hvck5vZGU6bnVsbCxkPW8ua2V5O2E9YS5nZXRFbGVtZW50QnlLZXkoZCk7bGV0IGY9bi5sZW5ndGg7cmV0dXJuIGQhPT1sLmtleXx8IXEocyl8fCghaSYmKCFiZHx8dkU8cis1MCl8fHMuaXNEaXJ0eSgpJiYyPmZ8fHJFKG4pKSYmby5vZmZzZXQhPT1sLm9mZnNldCYmIXMuaXNDb21wb3NpbmcoKXx8ZG0ocyl8fHMuaXNEaXJ0eSgpJiYxPGZ8fChpfHwhYmQpJiZhIT09bnVsbCYmIXMuaXNDb21wb3NpbmcoKSYmdSE9PWtkKGEpfHxjIT09bnVsbCYmZSE9PW51bGwmJighZS5jb2xsYXBzZWR8fGUuc3RhcnRDb250YWluZXIhPT1jLmFuY2hvck5vZGV8fGUuc3RhcnRPZmZzZXQhPT1jLmFuY2hvck9mZnNldCl8fHMuZ2V0Rm9ybWF0KCkhPT10LmZvcm1hdHx8cy5nZXRTdHlsZSgpIT09dC5zdHlsZXx8alIodCxzKX1mdW5jdGlvbiBZMCh0LGUpe3JldHVybiB0IT09bnVsbCYmdC5ub2RlVmFsdWUhPT1udWxsJiZ0Lm5vZGVUeXBlPT09MyYmZSE9PTAmJmUhPT10Lm5vZGVWYWx1ZS5sZW5ndGh9ZnVuY3Rpb24gWDAodCxlLG4pe2xldHthbmNob3JOb2RlOnIsYW5jaG9yT2Zmc2V0OmksZm9jdXNOb2RlOm8sZm9jdXNPZmZzZXQ6bH09dDt3bSYmKHdtPSExLFkwKHIsaSkmJlkwKG8sbCkpfHxWbihlLCgpPT57aWYoIW4pSHIobnVsbCk7ZWxzZSBpZih6YyhlLHIsbykpe3ZhciBzPXJ0KCk7aWYoZ2Uocykpe3ZhciBhPXMuYW5jaG9yLGM9YS5nZXROb2RlKCk7aWYocy5pc0NvbGxhcHNlZCgpKXt0LnR5cGU9PT0iUmFuZ2UiJiZ0LmFuY2hvck5vZGU9PT10LmZvY3VzTm9kZSYmKHMuZGlydHk9ITApO3ZhciB1PUFmKGUpLmV2ZW50O3U9dT91LnRpbWVTdGFtcDpwZXJmb3JtYW5jZS5ub3coKTtsZXRbZCxmLHAsZyxtXT15RTt1PG0rMjAwJiZhLm9mZnNldD09PXAmJmEua2V5PT09Zz8ocy5mb3JtYXQ9ZCxzLnN0eWxlPWYpOmEudHlwZT09PSJ0ZXh0Ij8ocy5mb3JtYXQ9Yy5nZXRGb3JtYXQoKSxzLnN0eWxlPWMuZ2V0U3R5bGUoKSk6YS50eXBlPT09ImVsZW1lbnQiJiYocy5mb3JtYXQ9MCxzLnN0eWxlPSIiKX1lbHNle2E9MjU1LGM9ITEsdT1zLmdldE5vZGVzKCk7bGV0IGQ9dS5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxkO2YrKyl7bGV0IHA9dVtmXTtpZihxKHApJiYoYz0hMCxhJj1wLmdldEZvcm1hdCgpLGE9PT0wKSlicmVha31zLmZvcm1hdD1jP2E6MH19SihlLE5mLHZvaWQgMCl9fSl9ZnVuY3Rpb24gQlIodCxlKXtWbihlLCgpPT57bGV0IG49cnQoKTt2YXIgcj1KcihlLl93aW5kb3cpO2xldCBpPVBzKCk7aWYocilpZihnZShuKSl7bGV0IGw9bi5hbmNob3I7dmFyIG89bC5nZXROb2RlKCk7bC50eXBlPT09ImVsZW1lbnQiJiZsLm9mZnNldD09PTAmJm4uaXNDb2xsYXBzZWQoKSYmIXZuKG8pJiZYcigpLmdldENoaWxkcmVuU2l6ZSgpPT09MSYmby5nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCkuaXNFbXB0eSgpJiZpIT09bnVsbCYmbi5pcyhpKT8oci5yZW1vdmVBbGxSYW5nZXMoKSxuLmRpcnR5PSEwKTp0LmRldGFpbCE9PTN8fG4uaXNDb2xsYXBzZWQoKXx8KHI9bi5mb2N1cy5nZXROb2RlKCksbyE9PXImJihVKG8pP28uc2VsZWN0KDApOm8uZ2V0UGFyZW50T3JUaHJvdygpLnNlbGVjdCgwKSkpfWVsc2UgdC5wb2ludGVyVHlwZT09PSJ0b3VjaCImJihvPXIuYW5jaG9yTm9kZSxvIT09bnVsbCYmKG89by5ub2RlVHlwZSxvPT09MXx8bz09PTMpKSYmKHI9YnYoaSxyLGUpLEhyKHIpKTtKKGUsVFMsdCl9KX1mdW5jdGlvbiBVUih0LGUpe2xldCBuPXQudGFyZ2V0O3Q9dC5wb2ludGVyVHlwZSxuIGluc3RhbmNlb2YgTm9kZSYmdCE9PSJ0b3VjaCImJlZuKGUsKCk9Pnt0dChGYyhuKSl8fChTbT0hMCl9KX1mdW5jdGlvbiBfRSh0KXtyZXR1cm4gdC5nZXRUYXJnZXRSYW5nZXM/KHQ9dC5nZXRUYXJnZXRSYW5nZXMoKSx0Lmxlbmd0aD09PTA/bnVsbDp0WzBdKTpudWxsfWZ1bmN0aW9uIFdSKHQsZSl7cmV0dXJuIHQhPT1lfHxVKHQpfHxVKGUpfHwhdC5pc1Rva2VuKCl8fCFlLmlzVG9rZW4oKX1mdW5jdGlvbiBIUih0LGUpe2xldCBuPXQuaW5wdXRUeXBlLHI9X0UodCk7bj09PSJkZWxldGVDb21wb3NpdGlvblRleHQifHxzbyYmb0UoZSl8fG4hPT0iaW5zZXJ0Q29tcG9zaXRpb25UZXh0IiYmVm4oZSwoKT0+e2xldCBpPXJ0KCk7aWYobj09PSJkZWxldGVDb250ZW50QmFja3dhcmQiKXtpZihpPT09bnVsbCl7dmFyIG89UHMoKTtpZighZ2UobykpcmV0dXJuO0hyKG8uY2xvbmUoKSl9aWYoZ2UoaSkpe2dFPT09MjI5JiZ0LnRpbWVTdGFtcDxjYyszMCYmZS5pc0NvbXBvc2luZygpJiZpLmFuY2hvci5rZXk9PT1pLmZvY3VzLmtleT8oS3QobnVsbCksY2M9MCxzZXRUaW1lb3V0KCgpPT57Vm4oZSwoKT0+e0t0KG51bGwpfSl9LDMwKSxnZShpKSYmKG89aS5hbmNob3IuZ2V0Tm9kZSgpLG8ubWFya0RpcnR5KCksaS5mb3JtYXQ9by5nZXRGb3JtYXQoKSxpLnN0eWxlPW8uZ2V0U3R5bGUoKSkpOih0LnByZXZlbnREZWZhdWx0KCksSihlLGljLCEwKSk7cmV0dXJufX1pZihnZShpKSl7bz10LmRhdGEsTmwhPT1udWxsJiZfdighMSxlLE5sKSxpLmRpcnR5JiZObD09PW51bGx8fCFpLmlzQ29sbGFwc2VkKCl8fHZuKGkuYW5jaG9yLmdldE5vZGUoKSl8fHI9PT1udWxsfHxpLmFwcGx5RE9NUmFuZ2UociksTmw9bnVsbDt2YXIgbD1pLmZvY3VzLHM9aS5hbmNob3IuZ2V0Tm9kZSgpO2lmKGw9bC5nZXROb2RlKCksbj09PSJpbnNlcnRUZXh0Inx8bj09PSJpbnNlcnRUcmFuc3Bvc2UiKW89PT1gCmA/KHQucHJldmVudERlZmF1bHQoKSxKKGUsTmEsITEpKTpvPT09YAoKYD8odC5wcmV2ZW50RGVmYXVsdCgpLEooZSxzbSx2b2lkIDApKTpvPT1udWxsJiZ0LmRhdGFUcmFuc2Zlcj8obz10LmRhdGFUcmFuc2Zlci5nZXREYXRhKCJ0ZXh0L3BsYWluIiksdC5wcmV2ZW50RGVmYXVsdCgpLGkuaW5zZXJ0UmF3VGV4dChvKSk6byE9bnVsbCYmeEUoaSxyLG8sdC50aW1lU3RhbXAsITApPyh0LnByZXZlbnREZWZhdWx0KCksSihlLGVzLG8pKTpObD1vLHZFPXQudGltZVN0YW1wO2Vsc2Ugc3dpdGNoKHQucHJldmVudERlZmF1bHQoKSxuKXtjYXNlImluc2VydEZyb21ZYW5rIjpjYXNlImluc2VydEZyb21Ecm9wIjpjYXNlImluc2VydFJlcGxhY2VtZW50VGV4dCI6SihlLGVzLHQpO2JyZWFrO2Nhc2UiaW5zZXJ0RnJvbUNvbXBvc2l0aW9uIjpLdChudWxsKSxKKGUsZXMsdCk7YnJlYWs7Y2FzZSJpbnNlcnRMaW5lQnJlYWsiOkt0KG51bGwpLEooZSxOYSwhMSk7YnJlYWs7Y2FzZSJpbnNlcnRQYXJhZ3JhcGgiOkt0KG51bGwpLFBhJiYhUmY/KFBhPSExLEooZSxOYSwhMSkpOkooZSxzbSx2b2lkIDApO2JyZWFrO2Nhc2UiaW5zZXJ0RnJvbVBhc3RlIjpjYXNlImluc2VydEZyb21QYXN0ZUFzUXVvdGF0aW9uIjpKKGUsYXYsdCk7YnJlYWs7Y2FzZSJkZWxldGVCeUNvbXBvc2l0aW9uIjpXUihzLGwpJiZKKGUsYW0sdCk7YnJlYWs7Y2FzZSJkZWxldGVCeURyYWciOmNhc2UiZGVsZXRlQnlDdXQiOkooZSxhbSx0KTticmVhaztjYXNlImRlbGV0ZUNvbnRlbnQiOkooZSxpYywhMSk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkQmFja3dhcmQiOkooZSxvYywhMCk7YnJlYWs7Y2FzZSJkZWxldGVXb3JkRm9yd2FyZCI6SihlLG9jLCExKTticmVhaztjYXNlImRlbGV0ZUhhcmRMaW5lQmFja3dhcmQiOmNhc2UiZGVsZXRlU29mdExpbmVCYWNrd2FyZCI6SihlLGxjLCEwKTticmVhaztjYXNlImRlbGV0ZUNvbnRlbnRGb3J3YXJkIjpjYXNlImRlbGV0ZUhhcmRMaW5lRm9yd2FyZCI6Y2FzZSJkZWxldGVTb2Z0TGluZUZvcndhcmQiOkooZSxsYywhMSk7YnJlYWs7Y2FzZSJmb3JtYXRTdHJpa2VUaHJvdWdoIjpKKGUsS2ksInN0cmlrZXRocm91Z2giKTticmVhaztjYXNlImZvcm1hdEJvbGQiOkooZSxLaSwiYm9sZCIpO2JyZWFrO2Nhc2UiZm9ybWF0SXRhbGljIjpKKGUsS2ksIml0YWxpYyIpO2JyZWFrO2Nhc2UiZm9ybWF0VW5kZXJsaW5lIjpKKGUsS2ksInVuZGVybGluZSIpO2JyZWFrO2Nhc2UiaGlzdG9yeVVuZG8iOkooZSxjdix2b2lkIDApO2JyZWFrO2Nhc2UiaGlzdG9yeVJlZG8iOkooZSx1dix2b2lkIDApfX19KX1mdW5jdGlvbiBWUih0LGUpe3Quc3RvcFByb3BhZ2F0aW9uKCksVm4oZSwoKT0+e3ZhciBuPXJ0KCkscj10LmRhdGEsaT1fRSh0KTtpZihyIT1udWxsJiZnZShuKSYmeEUobixpLHIsdC50aW1lU3RhbXAsITEpKXttYSYmKEVtKGUsciksbWE9ITEpO3ZhciBvPW4uYW5jaG9yLGw9by5nZXROb2RlKCk7aWYoaT1KcihlLl93aW5kb3cpLGk9PT1udWxsKXJldHVybjtsZXQgcz1vLm9mZnNldDsobz1iZCYmIW4uaXNDb2xsYXBzZWQoKSYmcShsKSYmaS5hbmNob3JOb2RlIT09bnVsbCkmJihsPWwuZ2V0VGV4dENvbnRlbnQoKS5zbGljZSgwLHMpK3IrbC5nZXRUZXh0Q29udGVudCgpLnNsaWNlKHMrbi5mb2N1cy5vZmZzZXQpLGk9aS5hbmNob3JOb2RlLG89bD09PShpLm5vZGVUeXBlPT09Mz9pLm5vZGVWYWx1ZTpudWxsKSksb3x8SihlLGVzLHIpLHI9ci5sZW5ndGgsc28mJjE8ciYmdC5pbnB1dFR5cGU9PT0iaW5zZXJ0Q29tcG9zaXRpb25UZXh0IiYmIWUuaXNDb21wb3NpbmcoKSYmKG4uYW5jaG9yLm9mZnNldC09cikscHZ8fFJmfHxodnx8IWUuaXNDb21wb3NpbmcoKXx8KGNjPTAsS3QobnVsbCkpfWVsc2UgX3YoITEsZSxyIT09bnVsbD9yOnZvaWQgMCksbWEmJihFbShlLHJ8fHZvaWQgMCksbWE9ITEpO21uKCksbj1odCgpLFlTKG4pfSksTmw9bnVsbH1mdW5jdGlvbiBLUih0LGUpe1ZuKGUsKCk9PntsZXQgbj1ydCgpO2lmKGdlKG4pJiYhZS5pc0NvbXBvc2luZygpKXtsZXQgcj1uLmFuY2hvcixpPW4uYW5jaG9yLmdldE5vZGUoKTtLdChyLmtleSksKHQudGltZVN0YW1wPGNjKzMwfHxyLnR5cGU9PT0iZWxlbWVudCJ8fCFuLmlzQ29sbGFwc2VkKCl8fGkuZ2V0Rm9ybWF0KCkhPT1uLmZvcm1hdHx8aS5nZXRTdHlsZSgpIT09bi5zdHlsZSkmJkooZSxlcyxrUil9fSl9ZnVuY3Rpb24gRW0odCxlKXt2YXIgbj10Ll9jb21wb3NpdGlvbktleTtpZihLdChudWxsKSxuIT09bnVsbCYmZSE9bnVsbCl7aWYoZT09PSIiKXtlPUl0KG4pLHQ9a2QodC5nZXRFbGVtZW50QnlLZXkobikpLHQhPT1udWxsJiZ0Lm5vZGVWYWx1ZSE9PW51bGwmJnEoZSkmJnd2KGUsdC5ub2RlVmFsdWUsbnVsbCxudWxsLCEwKTtyZXR1cm59aWYoZVtlLmxlbmd0aC0xXT09PWAKYCYmKG49cnQoKSxnZShuKSkpe2U9bi5mb2N1cyxuLmFuY2hvci5zZXQoZS5rZXksZS5vZmZzZXQsZS50eXBlKSxKKHQsQ2QsbnVsbCk7cmV0dXJufX1fdighMCx0LGUpfWZ1bmN0aW9uIFpSKHQsZSl7c28/bWE9ITA6Vm4oZSwoKT0+e0VtKGUsdC5kYXRhKX0pfWZ1bmN0aW9uIEdSKHQsZSl7aWYoY2M9dC50aW1lU3RhbXAsZ0U9dC5rZXlDb2RlLCFlLmlzQ29tcG9zaW5nKCkpe3ZhcntrZXlDb2RlOm4sc2hpZnRLZXk6cixjdHJsS2V5OmksbWV0YUtleTpvLGFsdEtleTpsfT10O2lmKCFKKGUsTlMsdCkpe2lmKG4hPT0zOXx8aXx8b3x8bClpZihuIT09Mzl8fGx8fHJ8fCFpJiYhbylpZihuIT09Mzd8fGl8fG98fGwpaWYobiE9PTM3fHxsfHxyfHwhaSYmIW8paWYobiE9PTM4fHxpfHxvKWlmKG4hPT00MHx8aXx8bylpZihuPT09MTMmJnIpUGE9ITAsSihlLENkLHQpO2Vsc2UgaWYobj09PTMyKUooZSxEUyx0KTtlbHNlIGlmKEp0JiZpJiZuPT09NzkpdC5wcmV2ZW50RGVmYXVsdCgpLFBhPSEwLEooZSxOYSwhMCk7ZWxzZSBpZihuIT09MTN8fHIpe3ZhciBzPUp0P2x8fG8/ITE6bj09PTh8fG49PT03MiYmaTppfHxsfHxvPyExOm49PT04O3M/bj09PTg/SihlLElTLHQpOih0LnByZXZlbnREZWZhdWx0KCksSihlLGljLCEwKSk6bj09PTI3P0ooZSxqUyx0KToocz1KdD9yfHxsfHxvPyExOm49PT00Nnx8bj09PTY4JiZpOml8fGx8fG8/ITE6bj09PTQ2LHM/bj09PTQ2P0ooZSx6Uyx0KToodC5wcmV2ZW50RGVmYXVsdCgpLEooZSxpYywhMSkpOm49PT04JiYoSnQ/bDppKT8odC5wcmV2ZW50RGVmYXVsdCgpLEooZSxvYywhMCkpOm49PT00NiYmKEp0P2w6aSk/KHQucHJldmVudERlZmF1bHQoKSxKKGUsb2MsITEpKTpKdCYmbyYmbj09PTg/KHQucHJldmVudERlZmF1bHQoKSxKKGUsbGMsITApKTpKdCYmbyYmbj09PTQ2Pyh0LnByZXZlbnREZWZhdWx0KCksSihlLGxjLCExKSk6bj09PTY2JiYhbCYmKEp0P286aSk/KHQucHJldmVudERlZmF1bHQoKSxKKGUsS2ksImJvbGQiKSk6bj09PTg1JiYhbCYmKEp0P286aSk/KHQucHJldmVudERlZmF1bHQoKSxKKGUsS2ksInVuZGVybGluZSIpKTpuPT09NzMmJiFsJiYoSnQ/bzppKT8odC5wcmV2ZW50RGVmYXVsdCgpLEooZSxLaSwiaXRhbGljIikpOm4hPT05fHxsfHxpfHxvP249PT05MCYmIXImJihKdD9vOmkpPyh0LnByZXZlbnREZWZhdWx0KCksSihlLGN2LHZvaWQgMCkpOihzPUp0P249PT05MCYmbyYmcjpuPT09ODkmJml8fG49PT05MCYmaSYmcixzPyh0LnByZXZlbnREZWZhdWx0KCksSihlLHV2LHZvaWQgMCkpOk9zKGUuX2VkaXRvclN0YXRlLl9zZWxlY3Rpb24pPyhzPXI/ITE6bj09PTY3P0p0P286aTohMSxzPyh0LnByZXZlbnREZWZhdWx0KCksSihlLGR2LHQpKToocz1yPyExOm49PT04OD9KdD9vOmk6ITEscz8odC5wcmV2ZW50RGVmYXVsdCgpLEooZSxmdix0KSk6bj09PTY1JiYoSnQ/bzppKSYmKHQucHJldmVudERlZmF1bHQoKSxKKGUsY20sdCkpKSk6IXNvJiZuPT09NjUmJihKdD9vOmkpJiYodC5wcmV2ZW50RGVmYXVsdCgpLEooZSxjbSx0KSkpOkooZSxGUyx0KSl9ZWxzZSBQYT0hMSxKKGUsQ2QsdCk7ZWxzZSBKKGUsTFMsdCk7ZWxzZSBKKGUsTVMsdCk7ZWxzZSBKKGUsQVMsdCk7ZWxzZSBKKGUsUFMsdCk7ZWxzZSBKKGUsT1MsdCk7ZWxzZSBKKGUsUlMsdCk7KGl8fHJ8fGx8fG8pJiZKKGUsWlMsdCl9fX1mdW5jdGlvbiB3RSh0KXtsZXQgZT10Ll9fbGV4aWNhbEV2ZW50SGFuZGxlcztyZXR1cm4gZT09PXZvaWQgMCYmKGU9W10sdC5fX2xleGljYWxFdmVudEhhbmRsZXM9ZSksZX1sZXQgdHM9bmV3IE1hcDtmdW5jdGlvbiBTRSh0KXt0PXQudGFyZ2V0O2xldCBlPUpyKHQ9PW51bGw/bnVsbDp0Lm5vZGVUeXBlPT09OT90LmRlZmF1bHRWaWV3OnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyk7aWYoZSE9PW51bGwpe3ZhciBuPXl2KGUuYW5jaG9yTm9kZSk7aWYobiE9PW51bGwpe1NtJiYoU209ITEsVm4obiwoKT0+e3ZhciBsPVBzKCkscz1lLmFuY2hvck5vZGU7cyE9PW51bGwmJihzPXMubm9kZVR5cGUscz09PTF8fHM9PT0zKSYmKGw9YnYobCxlLG4pLEhyKGwpKX0pKSx0PXh2KG4pLHQ9dFt0Lmxlbmd0aC0xXTt2YXIgcj10Ll9rZXksaT10cy5nZXQociksbz1pfHx0O28hPT1uJiZYMChlLG8sITEpLFgwKGUsbiwhMCksbiE9PXQ/dHMuc2V0KHIsbik6aSYmdHMuZGVsZXRlKHIpfX19ZnVuY3Rpb24gWVIodCxlKXtPYT09PTAmJnQub3duZXJEb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLFNFKSxPYSsrLHQuX19sZXhpY2FsRWRpdG9yPWU7bGV0IG49d0UodCk7Zm9yKGxldCByPTA7cjxfbS5sZW5ndGg7cisrKXtsZXRbaSxvXT1fbVtyXSxsPXR5cGVvZiBvPT0iZnVuY3Rpb24iP3M9PntzLl9sZXhpY2FsSGFuZGxlZCE9PSEwJiYocy5fbGV4aWNhbEhhbmRsZWQ9ITAsZS5pc0VkaXRhYmxlKCkmJm8ocyxlKSl9OnM9PntpZihzLl9sZXhpY2FsSGFuZGxlZCE9PSEwJiYocy5fbGV4aWNhbEhhbmRsZWQ9ITAsZS5pc0VkaXRhYmxlKCkpKXN3aXRjaChpKXtjYXNlImN1dCI6cmV0dXJuIEooZSxmdixzKTtjYXNlImNvcHkiOnJldHVybiBKKGUsZHYscyk7Y2FzZSJwYXN0ZSI6cmV0dXJuIEooZSxhdixzKTtjYXNlImRyYWdzdGFydCI6cmV0dXJuIEooZSxVUyxzKTtjYXNlImRyYWdvdmVyIjpyZXR1cm4gSihlLFdTLHMpO2Nhc2UiZHJhZ2VuZCI6cmV0dXJuIEooZSxIUyxzKTtjYXNlImZvY3VzIjpyZXR1cm4gSihlLFZTLHMpO2Nhc2UiYmx1ciI6cmV0dXJuIEooZSxLUyxzKTtjYXNlImRyb3AiOnJldHVybiBKKGUsQlMscyl9fTt0LmFkZEV2ZW50TGlzdGVuZXIoaSxsKSxuLnB1c2goKCk9Pnt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxsKX0pfX1mdW5jdGlvbiBDbSh0LGUsbil7bW4oKTt2YXIgcj10Ll9fa2V5O2xldCBpPXQuZ2V0UGFyZW50KCk7aWYoaSE9PW51bGwpe3ZhciBvPXJ0KCk7aWYoZ2UobykmJlUodCkpe3ZhcnthbmNob3I6bCxmb2N1czpzfT1vLGE9bC5nZXROb2RlKCksYz1zLmdldE5vZGUoKTtSZChhLHQpJiZsLnNldCh0Ll9fa2V5LDAsImVsZW1lbnQiKSxSZChjLHQpJiZzLnNldCh0Ll9fa2V5LDAsImVsZW1lbnQiKX1pZihhPW8sYz0hMSxnZShhKSYmZSl7bz1hLmFuY2hvcjtsZXQgdT1hLmZvY3VzO28ua2V5PT09ciYmKE1kKG8sdCxpLHQuZ2V0UHJldmlvdXNTaWJsaW5nKCksdC5nZXROZXh0U2libGluZygpKSxjPSEwKSx1LmtleT09PXImJihNZCh1LHQsaSx0LmdldFByZXZpb3VzU2libGluZygpLHQuZ2V0TmV4dFNpYmxpbmcoKSksYz0hMCl9ZWxzZSBPcyhhKSYmZSYmdC5pc1NlbGVjdGVkKCkmJnQuc2VsZWN0UHJldmlvdXMoKTtnZShhKSYmZSYmIWM/KHI9dC5nZXRJbmRleFdpdGhpblBhcmVudCgpLFVvKHQpLEFkKGEsaSxyLC0xKSk6VW8odCksbnx8X3IoaSl8fGkuY2FuQmVFbXB0eSgpfHwhaS5pc0VtcHR5KCl8fENtKGksZSksZSYmdm4oaSkmJmkuaXNFbXB0eSgpJiZpLnNlbGVjdEVuZCgpfX1jbGFzcyBVY3tzdGF0aWMgZ2V0VHlwZSgpe1YoNjQsdGhpcy5uYW1lKX1zdGF0aWMgY2xvbmUoKXtWKDY1LHRoaXMubmFtZSl9Y29uc3RydWN0b3IoZSl7dGhpcy5fX3R5cGU9dGhpcy5jb25zdHJ1Y3Rvci5nZXRUeXBlKCksdGhpcy5fX25leHQ9dGhpcy5fX3ByZXY9dGhpcy5fX3BhcmVudD1udWxsLGVFKHRoaXMsZSl9Z2V0VHlwZSgpe3JldHVybiB0aGlzLl9fdHlwZX1pc0F0dGFjaGVkKCl7Zm9yKHZhciBlPXRoaXMuX19rZXk7ZSE9PW51bGw7KXtpZihlPT09InJvb3QiKXJldHVybiEwO2lmKGU9SXQoZSksZT09PW51bGwpYnJlYWs7ZT1lLl9fcGFyZW50fXJldHVybiExfWlzU2VsZWN0ZWQoZSl7aWYoZT1lfHxydCgpLGU9PW51bGwpcmV0dXJuITE7bGV0IG49ZS5nZXROb2RlcygpLnNvbWUocj0+ci5fX2tleT09PXRoaXMuX19rZXkpO3JldHVybiBxKHRoaXMpP246Z2UoZSkmJmUuYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJmUuZm9jdXMudHlwZT09PSJlbGVtZW50IiYmZS5hbmNob3Iua2V5PT09ZS5mb2N1cy5rZXkmJmUuYW5jaG9yLm9mZnNldD09PWUuZm9jdXMub2Zmc2V0PyExOm59Z2V0S2V5KCl7cmV0dXJuIHRoaXMuX19rZXl9Z2V0SW5kZXhXaXRoaW5QYXJlbnQoKXt2YXIgZT10aGlzLmdldFBhcmVudCgpO2lmKGU9PT1udWxsKXJldHVybi0xO2U9ZS5nZXRGaXJzdENoaWxkKCk7bGV0IG49MDtmb3IoO2UhPT1udWxsOyl7aWYodGhpcy5pcyhlKSlyZXR1cm4gbjtuKyssZT1lLmdldE5leHRTaWJsaW5nKCl9cmV0dXJuLTF9Z2V0UGFyZW50KCl7bGV0IGU9dGhpcy5nZXRMYXRlc3QoKS5fX3BhcmVudDtyZXR1cm4gZT09PW51bGw/bnVsbDpJdChlKX1nZXRQYXJlbnRPclRocm93KCl7bGV0IGU9dGhpcy5nZXRQYXJlbnQoKTtyZXR1cm4gZT09PW51bGwmJlYoNjYsdGhpcy5fX2tleSksZX1nZXRUb3BMZXZlbEVsZW1lbnQoKXtsZXQgZT10aGlzO2Zvcig7ZSE9PW51bGw7KXtsZXQgbj1lLmdldFBhcmVudCgpO2lmKF9yKG4pKXJldHVybiBlO2U9bn1yZXR1cm4gbnVsbH1nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCl7bGV0IGU9dGhpcy5nZXRUb3BMZXZlbEVsZW1lbnQoKTtyZXR1cm4gZT09PW51bGwmJlYoNjcsdGhpcy5fX2tleSksZX1nZXRQYXJlbnRzKCl7bGV0IGU9W10sbj10aGlzLmdldFBhcmVudCgpO2Zvcig7biE9PW51bGw7KWUucHVzaChuKSxuPW4uZ2V0UGFyZW50KCk7cmV0dXJuIGV9Z2V0UGFyZW50S2V5cygpe2xldCBlPVtdLG49dGhpcy5nZXRQYXJlbnQoKTtmb3IoO24hPT1udWxsOyllLnB1c2gobi5fX2tleSksbj1uLmdldFBhcmVudCgpO3JldHVybiBlfWdldFByZXZpb3VzU2libGluZygpe2xldCBlPXRoaXMuZ2V0TGF0ZXN0KCkuX19wcmV2O3JldHVybiBlPT09bnVsbD9udWxsOkl0KGUpfWdldFByZXZpb3VzU2libGluZ3MoKXtsZXQgZT1bXTt2YXIgbj10aGlzLmdldFBhcmVudCgpO2lmKG49PT1udWxsKXJldHVybiBlO2ZvcihuPW4uZ2V0Rmlyc3RDaGlsZCgpO24hPT1udWxsJiYhbi5pcyh0aGlzKTspZS5wdXNoKG4pLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldE5leHRTaWJsaW5nKCl7bGV0IGU9dGhpcy5nZXRMYXRlc3QoKS5fX25leHQ7cmV0dXJuIGU9PT1udWxsP251bGw6SXQoZSl9Z2V0TmV4dFNpYmxpbmdzKCl7bGV0IGU9W10sbj10aGlzLmdldE5leHRTaWJsaW5nKCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4pLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldENvbW1vbkFuY2VzdG9yKGUpe2xldCBuPXRoaXMuZ2V0UGFyZW50cygpO3ZhciByPWUuZ2V0UGFyZW50cygpO1UodGhpcykmJm4udW5zaGlmdCh0aGlzKSxVKGUpJiZyLnVuc2hpZnQoZSksZT1uLmxlbmd0aDt2YXIgaT1yLmxlbmd0aDtpZihlPT09MHx8aT09PTB8fG5bZS0xXSE9PXJbaS0xXSlyZXR1cm4gbnVsbDtmb3Iocj1uZXcgU2V0KHIpLGk9MDtpPGU7aSsrKXtsZXQgbz1uW2ldO2lmKHIuaGFzKG8pKXJldHVybiBvfXJldHVybiBudWxsfWlzKGUpe3JldHVybiBlPT1udWxsPyExOnRoaXMuX19rZXk9PT1lLl9fa2V5fWlzQmVmb3JlKGUpe2lmKHRoaXM9PT1lKXJldHVybiExO2lmKGUuaXNQYXJlbnRPZih0aGlzKSlyZXR1cm4hMDtpZih0aGlzLmlzUGFyZW50T2YoZSkpcmV0dXJuITE7dmFyIG49dGhpcy5nZXRDb21tb25BbmNlc3RvcihlKTtsZXQgcj10aGlzO2Zvcig7Oyl7dmFyIGk9ci5nZXRQYXJlbnRPclRocm93KCk7aWYoaT09PW4pe2k9ci5nZXRJbmRleFdpdGhpblBhcmVudCgpO2JyZWFrfXI9aX1mb3Iocj1lOzspe2lmKGU9ci5nZXRQYXJlbnRPclRocm93KCksZT09PW4pe249ci5nZXRJbmRleFdpdGhpblBhcmVudCgpO2JyZWFrfXI9ZX1yZXR1cm4gaTxufWlzUGFyZW50T2YoZSl7bGV0IG49dGhpcy5fX2tleTtpZihuPT09ZS5fX2tleSlyZXR1cm4hMTtmb3IoO2UhPT1udWxsOyl7aWYoZS5fX2tleT09PW4pcmV0dXJuITA7ZT1lLmdldFBhcmVudCgpfXJldHVybiExfWdldE5vZGVzQmV0d2VlbihlKXtsZXQgbj10aGlzLmlzQmVmb3JlKGUpLHI9W10saT1uZXcgU2V0O2Zvcih2YXIgbz10aGlzOzspe3ZhciBsPW8uX19rZXk7aWYoaS5oYXMobCl8fChpLmFkZChsKSxyLnB1c2gobykpLG89PT1lKWJyZWFrO2lmKGw9VShvKT9uP28uZ2V0Rmlyc3RDaGlsZCgpOm8uZ2V0TGFzdENoaWxkKCk6bnVsbCxsIT09bnVsbClvPWw7ZWxzZSBpZihsPW4/by5nZXROZXh0U2libGluZygpOm8uZ2V0UHJldmlvdXNTaWJsaW5nKCksbCE9PW51bGwpbz1sO2Vsc2V7aWYobz1vLmdldFBhcmVudE9yVGhyb3coKSxpLmhhcyhvLl9fa2V5KXx8ci5wdXNoKG8pLG89PT1lKWJyZWFrO2w9bztkbyBsPT09bnVsbCYmVig2OCksbz1uP2wuZ2V0TmV4dFNpYmxpbmcoKTpsLmdldFByZXZpb3VzU2libGluZygpLGw9bC5nZXRQYXJlbnQoKSxsIT09bnVsbCYmKG8hPT1udWxsfHxpLmhhcyhsLl9fa2V5KXx8ci5wdXNoKGwpKTt3aGlsZShvPT09bnVsbCl9fXJldHVybiBufHxyLnJldmVyc2UoKSxyfWlzRGlydHkoKXtsZXQgZT1odCgpLl9kaXJ0eUxlYXZlcztyZXR1cm4gZSE9PW51bGwmJmUuaGFzKHRoaXMuX19rZXkpfWdldExhdGVzdCgpe2xldCBlPUl0KHRoaXMuX19rZXkpO3JldHVybiBlPT09bnVsbCYmVigxMTMpLGV9Z2V0V3JpdGFibGUoKXttbigpO3ZhciBlPVFyKCksbj1odCgpO2U9ZS5fbm9kZU1hcDtsZXQgcj10aGlzLl9fa2V5LGk9dGhpcy5nZXRMYXRlc3QoKSxvPWkuX19wYXJlbnQ7bj1uLl9jbG9uZU5vdE5lZWRlZDt2YXIgbD1ydCgpO3JldHVybiBsIT09bnVsbCYmKGwuX2NhY2hlZE5vZGVzPW51bGwpLG4uaGFzKHIpPygkZChpKSxpKToobD1pLmNvbnN0cnVjdG9yLmNsb25lKGkpLGwuX19wYXJlbnQ9byxsLl9fbmV4dD1pLl9fbmV4dCxsLl9fcHJldj1pLl9fcHJldixVKGkpJiZVKGwpPyhsLl9fZmlyc3Q9aS5fX2ZpcnN0LGwuX19sYXN0PWkuX19sYXN0LGwuX19zaXplPWkuX19zaXplLGwuX19pbmRlbnQ9aS5fX2luZGVudCxsLl9fZm9ybWF0PWkuX19mb3JtYXQsbC5fX2Rpcj1pLl9fZGlyKTpxKGkpJiZxKGwpJiYobC5fX2Zvcm1hdD1pLl9fZm9ybWF0LGwuX19zdHlsZT1pLl9fc3R5bGUsbC5fX21vZGU9aS5fX21vZGUsbC5fX2RldGFpbD1pLl9fZGV0YWlsKSxuLmFkZChyKSxsLl9fa2V5PXIsJGQobCksZS5zZXQocixsKSxsKX1nZXRUZXh0Q29udGVudCgpe3JldHVybiIifWdldFRleHRDb250ZW50U2l6ZSgpe3JldHVybiB0aGlzLmdldFRleHRDb250ZW50KCkubGVuZ3RofWNyZWF0ZURPTSgpe1YoNzApfXVwZGF0ZURPTSgpe1YoNzEpfWV4cG9ydERPTShlKXtyZXR1cm57ZWxlbWVudDp0aGlzLmNyZWF0ZURPTShlLl9jb25maWcsZSl9fWV4cG9ydEpTT04oKXtWKDcyKX1zdGF0aWMgaW1wb3J0SlNPTigpe1YoMTgsdGhpcy5uYW1lKX1zdGF0aWMgdHJhbnNmb3JtKCl7cmV0dXJuIG51bGx9cmVtb3ZlKGUpe0NtKHRoaXMsITAsZSl9cmVwbGFjZShlLG4pe21uKCk7dmFyIHI9cnQoKTtyIT09bnVsbCYmKHI9ci5jbG9uZSgpKSxqcCh0aGlzLGUpO2xldCBpPXRoaXMuZ2V0TGF0ZXN0KCksbz10aGlzLl9fa2V5LGw9ZS5fX2tleSxzPWUuZ2V0V3JpdGFibGUoKTtlPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLmdldFdyaXRhYmxlKCk7bGV0IGE9ZS5fX3NpemU7VW8ocyk7bGV0IGM9aS5nZXRQcmV2aW91c1NpYmxpbmcoKSx1PWkuZ2V0TmV4dFNpYmxpbmcoKSxkPWkuX19wcmV2LGY9aS5fX25leHQscD1pLl9fcGFyZW50O3JldHVybiBDbShpLCExLCEwKSxjPT09bnVsbD9lLl9fZmlyc3Q9bDpjLmdldFdyaXRhYmxlKCkuX19uZXh0PWwscy5fX3ByZXY9ZCx1PT09bnVsbD9lLl9fbGFzdD1sOnUuZ2V0V3JpdGFibGUoKS5fX3ByZXY9bCxzLl9fbmV4dD1mLHMuX19wYXJlbnQ9cCxlLl9fc2l6ZT1hLG4mJnRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKGc9PntzLmFwcGVuZChnKX0pLGdlKHIpJiYoSHIociksbj1yLmFuY2hvcixyPXIuZm9jdXMsbi5rZXk9PT1vJiZxMChuLHMpLHIua2V5PT09byYmcTAocixzKSksWmkoKT09PW8mJkt0KGwpLHN9aW5zZXJ0QWZ0ZXIoZSxuPSEwKXttbigpLGpwKHRoaXMsZSk7dmFyIHI9dGhpcy5nZXRXcml0YWJsZSgpO2xldCBpPWUuZ2V0V3JpdGFibGUoKTt2YXIgbz1pLmdldFBhcmVudCgpO2xldCBsPXJ0KCk7dmFyIHM9ITEsYT0hMTtpZihvIT09bnVsbCl7dmFyIGM9ZS5nZXRJbmRleFdpdGhpblBhcmVudCgpO1VvKGkpLGdlKGwpJiYoYT1vLl9fa2V5LHM9bC5hbmNob3Isbz1sLmZvY3VzLHM9cy50eXBlPT09ImVsZW1lbnQiJiZzLmtleT09PWEmJnMub2Zmc2V0PT09YysxLGE9by50eXBlPT09ImVsZW1lbnQiJiZvLmtleT09PWEmJm8ub2Zmc2V0PT09YysxKX1vPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxjPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLmdldFdyaXRhYmxlKCk7bGV0IHU9aS5fX2tleSxkPXIuX19uZXh0O3JldHVybiBvPT09bnVsbD9jLl9fbGFzdD11Om8uZ2V0V3JpdGFibGUoKS5fX3ByZXY9dSxjLl9fc2l6ZSsrLHIuX19uZXh0PXUsaS5fX25leHQ9ZCxpLl9fcHJldj1yLl9fa2V5LGkuX19wYXJlbnQ9ci5fX3BhcmVudCxuJiZnZShsKSYmKG49dGhpcy5nZXRJbmRleFdpdGhpblBhcmVudCgpLEFkKGwsYyxuKzEpLHI9Yy5fX2tleSxzJiZsLmFuY2hvci5zZXQocixuKzIsImVsZW1lbnQiKSxhJiZsLmZvY3VzLnNldChyLG4rMiwiZWxlbWVudCIpKSxlfWluc2VydEJlZm9yZShlLG49ITApe21uKCksanAodGhpcyxlKTt2YXIgcj10aGlzLmdldFdyaXRhYmxlKCk7bGV0IGk9ZS5nZXRXcml0YWJsZSgpLG89aS5fX2tleTtVbyhpKTtsZXQgbD10aGlzLmdldFByZXZpb3VzU2libGluZygpLHM9dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0V3JpdGFibGUoKSxhPXIuX19wcmV2LGM9dGhpcy5nZXRJbmRleFdpdGhpblBhcmVudCgpO3JldHVybiBsPT09bnVsbD9zLl9fZmlyc3Q9bzpsLmdldFdyaXRhYmxlKCkuX19uZXh0PW8scy5fX3NpemUrKyxyLl9fcHJldj1vLGkuX19wcmV2PWEsaS5fX25leHQ9ci5fX2tleSxpLl9fcGFyZW50PXIuX19wYXJlbnQscj1ydCgpLG4mJmdlKHIpJiYobj10aGlzLmdldFBhcmVudE9yVGhyb3coKSxBZChyLG4sYykpLGV9aXNQYXJlbnRSZXF1aXJlZCgpe3JldHVybiExfWNyZWF0ZVBhcmVudEVsZW1lbnROb2RlKCl7cmV0dXJuIFFvKCl9c2VsZWN0UHJldmlvdXMoZSxuKXttbigpO2xldCByPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCksaT10aGlzLmdldFBhcmVudE9yVGhyb3coKTtyZXR1cm4gcj09PW51bGw/aS5zZWxlY3QoMCwwKTpVKHIpP3Iuc2VsZWN0KCk6cShyKT9yLnNlbGVjdChlLG4pOihlPXIuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxLGkuc2VsZWN0KGUsZSkpfXNlbGVjdE5leHQoZSxuKXttbigpO2xldCByPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxpPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO3JldHVybiByPT09bnVsbD9pLnNlbGVjdCgpOlUocik/ci5zZWxlY3QoMCwwKTpxKHIpP3Iuc2VsZWN0KGUsbik6KGU9ci5nZXRJbmRleFdpdGhpblBhcmVudCgpLGkuc2VsZWN0KGUsZSkpfW1hcmtEaXJ0eSgpe3RoaXMuZ2V0V3JpdGFibGUoKX19Y2xhc3MgTnMgZXh0ZW5kcyBVY3tzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaW5lYnJlYWsifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IE5zKGUuX19rZXkpfWNvbnN0cnVjdG9yKGUpe3N1cGVyKGUpfWdldFRleHRDb250ZW50KCl7cmV0dXJuYApgfWNyZWF0ZURPTSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpfXVwZGF0ZURPTSgpe3JldHVybiExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57YnI6ZT0+e2xldCBuPWUucGFyZW50RWxlbWVudCxyLGk7cmV0dXJuIG4hPT1udWxsJiYoKHI9bi5maXJzdENoaWxkKT09PWV8fHIubmV4dFNpYmxpbmc9PT1lJiZyLm5vZGVUeXBlPT09MyYmKHIudGV4dENvbnRlbnR8fCIiKS5tYXRjaCgvXiggfFx0fFxyP1xuKSskLykhPT1udWxsKSYmKChpPW4ubGFzdENoaWxkKT09PWV8fGkucHJldmlvdXNTaWJsaW5nPT09ZSYmaS5ub2RlVHlwZT09PTMmJihpLnRleHRDb250ZW50fHwiIikubWF0Y2goL14oIHxcdHxccj9cbikrJC8pIT09bnVsbCk/bnVsbDp7Y29udmVyc2lvbjpYUixwcmlvcml0eTowfX19fXN0YXRpYyBpbXBvcnRKU09OKCl7cmV0dXJuIGdzKCl9ZXhwb3J0SlNPTigpe3JldHVybnt0eXBlOiJsaW5lYnJlYWsiLHZlcnNpb246MX19fWZ1bmN0aW9uIFhSKCl7cmV0dXJue25vZGU6Z3MoKX19ZnVuY3Rpb24gZ3MoKXtyZXR1cm4gQmMobmV3IE5zKX1mdW5jdGlvbiB1Yyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5zfWZ1bmN0aW9uIEJwKHQsZSl7cmV0dXJuIGUmMTY/ImNvZGUiOmUmMTI4PyJtYXJrIjplJjMyPyJzdWIiOmUmNjQ/InN1cCI6bnVsbH1mdW5jdGlvbiBVcCh0LGUpe3JldHVybiBlJjE/InN0cm9uZyI6ZSYyPyJlbSI6InNwYW4ifWZ1bmN0aW9uIFdwKHQsZSxuLHIsaSl7dD1yLmNsYXNzTGlzdCxyPVJhKGksImJhc2UiKSxyIT09dm9pZCAwJiZ0LmFkZCguLi5yKSxyPVJhKGksInVuZGVybGluZVN0cmlrZXRocm91Z2giKTtsZXQgbz0hMSxsPWUmOCYmZSY0O3ZhciBzPW4mOCYmbiY0O3IhPT12b2lkIDAmJihzPyhvPSEwLGx8fHQuYWRkKC4uLnIpKTpsJiZ0LnJlbW92ZSguLi5yKSk7Zm9yKGxldCBhIGluIEJvKXM9Qm9bYV0scj1SYShpLGEpLHIhPT12b2lkIDAmJihuJnM/IW98fGEhPT0idW5kZXJsaW5lIiYmYSE9PSJzdHJpa2V0aHJvdWdoIj8oIShlJnMpfHxsJiZhPT09InVuZGVybGluZSJ8fGE9PT0ic3RyaWtldGhyb3VnaCIpJiZ0LmFkZCguLi5yKTplJnMmJnQucmVtb3ZlKC4uLnIpOmUmcyYmdC5yZW1vdmUoLi4ucikpfWZ1bmN0aW9uIEhwKHQsZSxuKXtsZXQgcj1lLmZpcnN0Q2hpbGQ7aWYobj1uLmlzQ29tcG9zaW5nKCksdCs9bj9PZjoiIixyPT1udWxsKWUudGV4dENvbnRlbnQ9dDtlbHNlIGlmKGU9ci5ub2RlVmFsdWUsZSE9PXQpaWYobnx8c28pe249ZS5sZW5ndGg7bGV0IGk9dC5sZW5ndGgsbz0wLGw9MDtmb3IoO288biYmbzxpJiZlW29dPT09dFtvXTspbysrO2Zvcig7bCtvPG4mJmwrbzxpJiZlW24tbC0xXT09PXRbaS1sLTFdOylsKys7dD1bbyxuLW8tbCx0LnNsaWNlKG8saS1sKV07bGV0W3MsYSxjXT10O2EhPT0wJiZyLmRlbGV0ZURhdGEocyxhKSxyLmluc2VydERhdGEocyxjKX1lbHNlIHIubm9kZVZhbHVlPXR9ZnVuY3Rpb24gdnUodCxlKXtyZXR1cm4gZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpLGUuYXBwZW5kQ2hpbGQodCksZX1jbGFzcyB1bCBleHRlbmRzIFVje3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInRleHQifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IHVsKGUuX190ZXh0LGUuX19rZXkpfWNvbnN0cnVjdG9yKGUsbil7c3VwZXIobiksdGhpcy5fX3RleHQ9ZSx0aGlzLl9fZm9ybWF0PTAsdGhpcy5fX3N0eWxlPSIiLHRoaXMuX19kZXRhaWw9dGhpcy5fX21vZGU9MH1nZXRGb3JtYXQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2Zvcm1hdH1nZXREZXRhaWwoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2RldGFpbH1nZXRNb2RlKCl7bGV0IGU9dGhpcy5nZXRMYXRlc3QoKTtyZXR1cm4gUFJbZS5fX21vZGVdfWdldFN0eWxlKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19zdHlsZX1pc1Rva2VuKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19tb2RlPT09MX1pc0NvbXBvc2luZygpe3JldHVybiB0aGlzLl9fa2V5PT09WmkoKX1pc1NlZ21lbnRlZCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fbW9kZT09PTJ9aXNEaXJlY3Rpb25sZXNzKCl7cmV0dXJuKHRoaXMuZ2V0TGF0ZXN0KCkuX19kZXRhaWwmMSkhPT0wfWlzVW5tZXJnZWFibGUoKXtyZXR1cm4odGhpcy5nZXRMYXRlc3QoKS5fX2RldGFpbCYyKSE9PTB9aGFzRm9ybWF0KGUpe3JldHVybiBlPUJvW2VdLCh0aGlzLmdldEZvcm1hdCgpJmUpIT09MH1pc1NpbXBsZVRleHQoKXtyZXR1cm4gdGhpcy5fX3R5cGU9PT0idGV4dCImJnRoaXMuX19tb2RlPT09MH1nZXRUZXh0Q29udGVudCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdGV4dH1nZXRGb3JtYXRGbGFncyhlLG4pe2xldCByPXRoaXMuZ2V0TGF0ZXN0KCkuX19mb3JtYXQ7cmV0dXJuIFFTKHIsZSxuKX1jcmVhdGVET00oZSl7dmFyIG49dGhpcy5fX2Zvcm1hdCxyPUJwKHRoaXMsbik7bGV0IGk9VXAodGhpcyxuKSxvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocj09PW51bGw/aTpyKSxsPW87cmV0dXJuIHRoaXMuaGFzRm9ybWF0KCJjb2RlIikmJm8uc2V0QXR0cmlidXRlKCJzcGVsbGNoZWNrIiwiZmFsc2UiKSxyIT09bnVsbCYmKGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpKSxvLmFwcGVuZENoaWxkKGwpKSxyPWwsSHAodGhpcy5fX3RleHQscix0aGlzKSxlPWUudGhlbWUudGV4dCxlIT09dm9pZCAwJiZXcChpLDAsbixyLGUpLG49dGhpcy5fX3N0eWxlLG4hPT0iIiYmKG8uc3R5bGUuY3NzVGV4dD1uKSxvfXVwZGF0ZURPTShlLG4scil7bGV0IGk9dGhpcy5fX3RleHQ7dmFyIG89ZS5fX2Zvcm1hdCxsPXRoaXMuX19mb3JtYXQscz1CcCh0aGlzLG8pO2xldCBhPUJwKHRoaXMsbCk7dmFyIGM9VXAodGhpcyxvKTtsZXQgdT1VcCh0aGlzLGwpO3JldHVybihzPT09bnVsbD9jOnMpIT09KGE9PT1udWxsP3U6YSk/ITA6cz09PWEmJmMhPT11PyhvPW4uZmlyc3RDaGlsZCxvPT1udWxsJiZWKDQ4KSxlPXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh1KSxIcChpLGUsdGhpcykscj1yLnRoZW1lLnRleHQsciE9PXZvaWQgMCYmV3AodSwwLGwsZSxyKSxuLnJlcGxhY2VDaGlsZChzLG8pLCExKTooYz1uLGEhPT1udWxsJiZzIT09bnVsbCYmKGM9bi5maXJzdENoaWxkLGM9PW51bGwmJlYoNDkpKSxIcChpLGMsdGhpcykscj1yLnRoZW1lLnRleHQsciE9PXZvaWQgMCYmbyE9PWwmJldwKHUsbyxsLGMsciksbD10aGlzLl9fc3R5bGUsZS5fX3N0eWxlIT09bCYmKG4uc3R5bGUuY3NzVGV4dD1sKSwhMSl9c3RhdGljIGltcG9ydERPTSgpe3JldHVybnsiI3RleHQiOigpPT4oe2NvbnZlcnNpb246cVIscHJpb3JpdHk6MH0pLGI6KCk9Pih7Y29udmVyc2lvbjpRUixwcmlvcml0eTowfSksY29kZTooKT0+KHtjb252ZXJzaW9uOk1pLHByaW9yaXR5OjB9KSxlbTooKT0+KHtjb252ZXJzaW9uOk1pLHByaW9yaXR5OjB9KSxpOigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pLHM6KCk9Pih7Y29udmVyc2lvbjpNaSxwcmlvcml0eTowfSksc3BhbjooKT0+KHtjb252ZXJzaW9uOkpSLHByaW9yaXR5OjB9KSxzdHJvbmc6KCk9Pih7Y29udmVyc2lvbjpNaSxwcmlvcml0eTowfSksc3ViOigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pLHN1cDooKT0+KHtjb252ZXJzaW9uOk1pLHByaW9yaXR5OjB9KSx1OigpPT4oe2NvbnZlcnNpb246TWkscHJpb3JpdHk6MH0pfX1zdGF0aWMgaW1wb3J0SlNPTihlKXtsZXQgbj1MdChlLnRleHQpO3JldHVybiBuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXREZXRhaWwoZS5kZXRhaWwpLG4uc2V0TW9kZShlLm1vZGUpLG4uc2V0U3R5bGUoZS5zdHlsZSksbn1leHBvcnRET00oZSl7cmV0dXJue2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUhPT1udWxsJiZNZihlKXx8VigxMzIpLGUuc3R5bGUud2hpdGVTcGFjZT0icHJlLXdyYXAiLHRoaXMuaGFzRm9ybWF0KCJib2xkIikmJihlPXZ1KGUsImIiKSksdGhpcy5oYXNGb3JtYXQoIml0YWxpYyIpJiYoZT12dShlLCJpIikpLHRoaXMuaGFzRm9ybWF0KCJzdHJpa2V0aHJvdWdoIikmJihlPXZ1KGUsInMiKSksdGhpcy5oYXNGb3JtYXQoInVuZGVybGluZSIpJiYoZT12dShlLCJ1IikpLHtlbGVtZW50OmV9fWV4cG9ydEpTT04oKXtyZXR1cm57ZGV0YWlsOnRoaXMuZ2V0RGV0YWlsKCksZm9ybWF0OnRoaXMuZ2V0Rm9ybWF0KCksbW9kZTp0aGlzLmdldE1vZGUoKSxzdHlsZTp0aGlzLmdldFN0eWxlKCksdGV4dDp0aGlzLmdldFRleHRDb250ZW50KCksdHlwZToidGV4dCIsdmVyc2lvbjoxfX1zZWxlY3Rpb25UcmFuc2Zvcm0oKXt9c2V0Rm9ybWF0KGUpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gbi5fX2Zvcm1hdD10eXBlb2YgZT09InN0cmluZyI/Qm9bZV06ZSxufXNldERldGFpbChlKXtsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX19kZXRhaWw9dHlwZW9mIGU9PSJzdHJpbmciP05SW2VdOmUsbn1zZXRTdHlsZShlKXtsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX19zdHlsZT1lLG59dG9nZ2xlRm9ybWF0KGUpe3JldHVybiBlPUJvW2VdLHRoaXMuc2V0Rm9ybWF0KHRoaXMuZ2V0Rm9ybWF0KCleZSl9dG9nZ2xlRGlyZWN0aW9ubGVzcygpe2xldCBlPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gZS5fX2RldGFpbF49MSxlfXRvZ2dsZVVubWVyZ2VhYmxlKCl7bGV0IGU9dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBlLl9fZGV0YWlsXj0yLGV9c2V0TW9kZShlKXtpZihlPU9SW2VdLHRoaXMuX19tb2RlPT09ZSlyZXR1cm4gdGhpcztsZXQgbj10aGlzLmdldFdyaXRhYmxlKCk7cmV0dXJuIG4uX19tb2RlPWUsbn1zZXRUZXh0Q29udGVudChlKXtpZih0aGlzLl9fdGV4dD09PWUpcmV0dXJuIHRoaXM7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fdGV4dD1lLG59c2VsZWN0KGUsbil7bW4oKTtsZXQgcj1ydCgpO3ZhciBpPXRoaXMuZ2V0VGV4dENvbnRlbnQoKTtsZXQgbz10aGlzLl9fa2V5O2lmKHR5cGVvZiBpPT0ic3RyaW5nIj8oaT1pLmxlbmd0aCxlPT09dm9pZCAwJiYoZT1pKSxuPT09dm9pZCAwJiYobj1pKSk6bj1lPTAsZ2UocikpaT1aaSgpLGkhPT1yLmFuY2hvci5rZXkmJmkhPT1yLmZvY3VzLmtleXx8S3Qobyksci5zZXRUZXh0Tm9kZVJhbmdlKHRoaXMsZSx0aGlzLG4pO2Vsc2UgcmV0dXJuIGJFKG8sZSxvLG4sInRleHQiLCJ0ZXh0Iik7cmV0dXJuIHJ9c3BsaWNlVGV4dChlLG4scixpKXtsZXQgbz10aGlzLmdldFdyaXRhYmxlKCksbD1vLl9fdGV4dCxzPXIubGVuZ3RoLGE9ZTswPmEmJihhPXMrYSwwPmEmJihhPTApKTtsZXQgYz1ydCgpO3JldHVybiBpJiZnZShjKSYmKGUrPXMsYy5zZXRUZXh0Tm9kZVJhbmdlKG8sZSxvLGUpKSxuPWwuc2xpY2UoMCxhKStyK2wuc2xpY2UoYStuKSxvLl9fdGV4dD1uLG99Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiEwfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiEwfXNwbGl0VGV4dCguLi5lKXttbigpO3ZhciBuPXRoaXMuZ2V0TGF0ZXN0KCkscj1uLmdldFRleHRDb250ZW50KCksaT1uLl9fa2V5LG89WmkoKSxsPW5ldyBTZXQoZSk7ZT1bXTtmb3IodmFyIHM9ci5sZW5ndGgsYT0iIixjPTA7YzxzO2MrKylhIT09IiImJmwuaGFzKGMpJiYoZS5wdXNoKGEpLGE9IiIpLGErPXJbY107aWYoYSE9PSIiJiZlLnB1c2goYSksbD1lLmxlbmd0aCxsPT09MClyZXR1cm5bXTtpZihlWzBdPT09cilyZXR1cm5bbl07dmFyIHU9ZVswXTtyPW4uZ2V0UGFyZW50T3JUaHJvdygpLGM9bi5nZXRGb3JtYXQoKTtsZXQgZD1uLmdldFN0eWxlKCksZj1uLl9fZGV0YWlsO3M9ITEsbi5pc1NlZ21lbnRlZCgpPyhhPUx0KHUpLGEuX19mb3JtYXQ9YyxhLl9fc3R5bGU9ZCxhLl9fZGV0YWlsPWYscz0hMCk6KGE9bi5nZXRXcml0YWJsZSgpLGEuX190ZXh0PXUpLG49cnQoKSxhPVthXSx1PXUubGVuZ3RoO2ZvcihsZXQgbT0xO208bDttKyspe3ZhciBwPWVbbV0sZz1wLmxlbmd0aDtwPUx0KHApLmdldFdyaXRhYmxlKCkscC5fX2Zvcm1hdD1jLHAuX19zdHlsZT1kLHAuX19kZXRhaWw9ZjtsZXQgdz1wLl9fa2V5O2lmKGc9dStnLGdlKG4pKXtsZXQgdj1uLmFuY2hvcix4PW4uZm9jdXM7di5rZXk9PT1pJiZ2LnR5cGU9PT0idGV4dCImJnYub2Zmc2V0PnUmJnYub2Zmc2V0PD1nJiYodi5rZXk9dyx2Lm9mZnNldC09dSxuLmRpcnR5PSEwKSx4LmtleT09PWkmJngudHlwZT09PSJ0ZXh0IiYmeC5vZmZzZXQ+dSYmeC5vZmZzZXQ8PWcmJih4LmtleT13LHgub2Zmc2V0LT11LG4uZGlydHk9ITApfW89PT1pJiZLdCh3KSx1PWcsYS5wdXNoKHApfXJldHVybiBpPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCksbz10aGlzLmdldE5leHRTaWJsaW5nKCksaSE9PW51bGwmJiRkKGkpLG8hPT1udWxsJiYkZChvKSxpPXIuZ2V0V3JpdGFibGUoKSxvPXRoaXMuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxzPyhpLnNwbGljZShvLDAsYSksdGhpcy5yZW1vdmUoKSk6aS5zcGxpY2UobywxLGEpLGdlKG4pJiZBZChuLHIsbyxsLTEpLGF9bWVyZ2VXaXRoU2libGluZyhlKXt2YXIgbj1lPT09dGhpcy5nZXRQcmV2aW91c1NpYmxpbmcoKTtufHxlPT09dGhpcy5nZXROZXh0U2libGluZygpfHxWKDUwKTt2YXIgcj10aGlzLl9fa2V5O2xldCBpPWUuX19rZXksbz10aGlzLl9fdGV4dCxsPW8ubGVuZ3RoO1ppKCk9PT1pJiZLdChyKTtsZXQgcz1ydCgpO2lmKGdlKHMpKXtsZXQgYT1zLmFuY2hvcixjPXMuZm9jdXM7YSE9PW51bGwmJmEua2V5PT09aSYmKGx4KGEsbixyLGUsbCkscy5kaXJ0eT0hMCksYyE9PW51bGwmJmMua2V5PT09aSYmKGx4KGMsbixyLGUsbCkscy5kaXJ0eT0hMCl9cmV0dXJuIHI9ZS5fX3RleHQsdGhpcy5zZXRUZXh0Q29udGVudChuP3IrbzpvK3IpLG49dGhpcy5nZXRXcml0YWJsZSgpLGUucmVtb3ZlKCksbn1pc1RleHRFbnRpdHkoKXtyZXR1cm4hMX19ZnVuY3Rpb24gSlIodCl7bGV0IGU9dC5zdHlsZS5mb250V2VpZ2h0PT09IjcwMCIsbj10LnN0eWxlLnRleHREZWNvcmF0aW9uPT09ImxpbmUtdGhyb3VnaCIscj10LnN0eWxlLmZvbnRTdHlsZT09PSJpdGFsaWMiLGk9dC5zdHlsZS50ZXh0RGVjb3JhdGlvbj09PSJ1bmRlcmxpbmUiLG89dC5zdHlsZS52ZXJ0aWNhbEFsaWduO3JldHVybntmb3JDaGlsZDpsPT4ocShsKSYmKGUmJmwudG9nZ2xlRm9ybWF0KCJib2xkIiksbiYmbC50b2dnbGVGb3JtYXQoInN0cmlrZXRocm91Z2giKSxyJiZsLnRvZ2dsZUZvcm1hdCgiaXRhbGljIiksaSYmbC50b2dnbGVGb3JtYXQoInVuZGVybGluZSIpLG89PT0ic3ViIiYmbC50b2dnbGVGb3JtYXQoInN1YnNjcmlwdCIpLG89PT0ic3VwZXIiJiZsLnRvZ2dsZUZvcm1hdCgic3VwZXJzY3JpcHQiKSksbCksbm9kZTpudWxsfX1mdW5jdGlvbiBRUih0KXtsZXQgZT10LnN0eWxlLmZvbnRXZWlnaHQ9PT0ibm9ybWFsIjtyZXR1cm57Zm9yQ2hpbGQ6bj0+KHEobikmJiFlJiZuLnRvZ2dsZUZvcm1hdCgiYm9sZCIpLG4pLG5vZGU6bnVsbH19bGV0IEowPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHFSKHQpe3QucGFyZW50RWxlbWVudD09PW51bGwmJlYoMTI5KTtmb3IodmFyIGU9dC50ZXh0Q29udGVudHx8IiIsbixyPXQucGFyZW50Tm9kZSxpPVt0XTtyIT09bnVsbCYmKG49SjAuZ2V0KHIpKT09PXZvaWQgMCYmIShyLm5vZGVOYW1lPT09IlBSRSJ8fHIubm9kZVR5cGU9PT0xJiZyLnN0eWxlLndoaXRlU3BhY2Uuc3RhcnRzV2l0aCgicHJlIikpOylpLnB1c2gocikscj1yLnBhcmVudE5vZGU7Zm9yKG49bj09PXZvaWQgMD9yOm4scj0wO3I8aS5sZW5ndGg7cisrKUowLnNldChpW3JdLG4pO2lmKG4hPT1udWxsKXtmb3IoZT1lLnNwbGl0KC8oXHI/XG58XHQpLyksdD1bXSxpPWUubGVuZ3RoLG49MDtuPGk7bisrKXI9ZVtuXSxyPT09YApgfHxyPT09YFxyCmA/dC5wdXNoKGdzKCkpOnI9PT0iCSI/dC5wdXNoKERmKCkpOnIhPT0iIiYmdC5wdXNoKEx0KHIpKTtyZXR1cm57bm9kZTp0fX1pZihlPWUucmVwbGFjZSgvXHIvZywiIikucmVwbGFjZSgvWyBcdFxuXSsvZywiICIpLGU9PT0iIilyZXR1cm57bm9kZTpudWxsfTtpZihlWzBdPT09IiAiKXtmb3IoaT10LG49ITA7aSE9PW51bGwmJihpPVEwKGksITEpKSE9PW51bGw7KWlmKHI9aS50ZXh0Q29udGVudHx8IiIsMDxyLmxlbmd0aCl7L1sgXHRcbl0kLy50ZXN0KHIpJiYoZT1lLnNsaWNlKDEpKSxuPSExO2JyZWFrfW4mJihlPWUuc2xpY2UoMSkpfWlmKGVbZS5sZW5ndGgtMV09PT0iICIpe2ZvcihpPSEwO3QhPT1udWxsJiYodD1RMCh0LCEwKSkhPT1udWxsOylpZigwPCh0LnRleHRDb250ZW50fHwiIikucmVwbGFjZSgvXiggfFx0fFxyP1xuKSsvLCIiKS5sZW5ndGgpe2k9ITE7YnJlYWt9aSYmKGU9ZS5zbGljZSgwLGUubGVuZ3RoLTEpKX1yZXR1cm4gZT09PSIiP3tub2RlOm51bGx9Ontub2RlOkx0KGUpfX1sZXQgZU89bmV3IFJlZ0V4cCgvXihhfGFiYnJ8YWNyb255bXxifGNpdGV8Y29kZXxkZWx8ZW18aXxpbnN8a2JkfGxhYmVsfG91dHB1dHxxfHJ1Ynl8c3xzYW1wfHNwYW58c3Ryb25nfHN1YnxzdXB8dGltZXx1fHR0fHZhcikkLywiaSIpO2Z1bmN0aW9uIFEwKHQsZSl7Zm9yKDs7KXtmb3IodmFyIG49dm9pZCAwOyhuPWU/dC5uZXh0U2libGluZzp0LnByZXZpb3VzU2libGluZyk9PT1udWxsOylpZih0PXQucGFyZW50RWxlbWVudCx0PT09bnVsbClyZXR1cm4gbnVsbDtpZih0PW4sdC5ub2RlVHlwZT09PTEmJihuPXQuc3R5bGUuZGlzcGxheSxuPT09IiImJnQubm9kZU5hbWUubWF0Y2goZU8pPT09bnVsbHx8biE9PSIiJiYhbi5zdGFydHNXaXRoKCJpbmxpbmUiKSkpcmV0dXJuIG51bGw7Zm9yKDsobj1lP3QuZmlyc3RDaGlsZDp0Lmxhc3RDaGlsZCkhPT1udWxsOyl0PW47aWYodC5ub2RlVHlwZT09PTMpcmV0dXJuIHQ7aWYodC5ub2RlTmFtZT09PSJCUiIpcmV0dXJuIG51bGx9fWxldCB0Tz17Y29kZToiY29kZSIsZW06Iml0YWxpYyIsaToiaXRhbGljIixzOiJzdHJpa2V0aHJvdWdoIixzdHJvbmc6ImJvbGQiLHN1Yjoic3Vic2NyaXB0IixzdXA6InN1cGVyc2NyaXB0Iix1OiJ1bmRlcmxpbmUifTtmdW5jdGlvbiBNaSh0KXtsZXQgZT10T1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO3JldHVybiBlPT09dm9pZCAwP3tub2RlOm51bGx9Ontmb3JDaGlsZDpuPT4ocShuKSYmIW4uaGFzRm9ybWF0KGUpJiZuLnRvZ2dsZUZvcm1hdChlKSxuKSxub2RlOm51bGx9fWZ1bmN0aW9uIEx0KHQ9IiIpe3JldHVybiBCYyhuZXcgdWwodCkpfWZ1bmN0aW9uIHEodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1bH1jbGFzcyBScyBleHRlbmRzIHVse3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInRhYiJ9c3RhdGljIGNsb25lKGUpe2xldCBuPW5ldyBScyhlLl9fa2V5KTtyZXR1cm4gbi5fX3RleHQ9ZS5fX3RleHQsbi5fX2Zvcm1hdD1lLl9fZm9ybWF0LG4uX19zdHlsZT1lLl9fc3R5bGUsbn1jb25zdHJ1Y3RvcihlKXtzdXBlcigiCSIsZSksdGhpcy5fX2RldGFpbD0yfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm4gbnVsbH1zdGF0aWMgaW1wb3J0SlNPTihlKXtsZXQgbj1EZigpO3JldHVybiBuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXRTdHlsZShlLnN0eWxlKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHR5cGU6InRhYiIsdmVyc2lvbjoxfX1zZXRUZXh0Q29udGVudCgpe1YoMTI2KX1zZXREZXRhaWwoKXtWKDEyNyl9c2V0TW9kZSgpe1YoMTI4KX1jYW5JbnNlcnRUZXh0QmVmb3JlKCl7cmV0dXJuITF9Y2FuSW5zZXJ0VGV4dEFmdGVyKCl7cmV0dXJuITF9fWZ1bmN0aW9uIERmKCl7cmV0dXJuIEJjKG5ldyBScyl9Y2xhc3MgVnJ7Y29uc3RydWN0b3IoZSxuLHIpe3RoaXMuX3NlbGVjdGlvbj1udWxsLHRoaXMua2V5PWUsdGhpcy5vZmZzZXQ9bix0aGlzLnR5cGU9cn1pcyhlKXtyZXR1cm4gdGhpcy5rZXk9PT1lLmtleSYmdGhpcy5vZmZzZXQ9PT1lLm9mZnNldCYmdGhpcy50eXBlPT09ZS50eXBlfWlzQmVmb3JlKGUpe2xldCBuPXRoaXMuZ2V0Tm9kZSgpLHI9ZS5nZXROb2RlKCksaT10aGlzLm9mZnNldDtpZihlPWUub2Zmc2V0LFUobikpe3ZhciBvPW4uZ2V0RGVzY2VuZGFudEJ5SW5kZXgoaSk7bj1vPz9ufXJldHVybiBVKHIpJiYobz1yLmdldERlc2NlbmRhbnRCeUluZGV4KGUpLHI9bz8/ciksbj09PXI/aTxlOm4uaXNCZWZvcmUocil9Z2V0Tm9kZSgpe2xldCBlPUl0KHRoaXMua2V5KTtyZXR1cm4gZT09PW51bGwmJlYoMjApLGV9c2V0KGUsbixyKXtsZXQgaT10aGlzLl9zZWxlY3Rpb24sbz10aGlzLmtleTt0aGlzLmtleT1lLHRoaXMub2Zmc2V0PW4sdGhpcy50eXBlPXIsQXMoKXx8KFppKCk9PT1vJiZLdChlKSxpIT09bnVsbCYmKGkuX2NhY2hlZE5vZGVzPW51bGwsaS5kaXJ0eT0hMCkpfX1mdW5jdGlvbiBWcCh0LGUpe2xldCBuPWUuX19rZXkscj10Lm9mZnNldCxpPSJlbGVtZW50IjtpZihxKGUpKWk9InRleHQiLGU9ZS5nZXRUZXh0Q29udGVudFNpemUoKSxyPmUmJihyPWUpO2Vsc2UgaWYoIVUoZSkpe3ZhciBvPWUuZ2V0TmV4dFNpYmxpbmcoKTtxKG8pPyhuPW8uX19rZXkscj0wLGk9InRleHQiKToobz1lLmdldFBhcmVudCgpKSYmKG49by5fX2tleSxyPWUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSsxKX10LnNldChuLHIsaSl9ZnVuY3Rpb24gcTAodCxlKXtpZihVKGUpKXtsZXQgbj1lLmdldExhc3REZXNjZW5kYW50KCk7VShuKXx8cShuKT9WcCh0LG4pOlZwKHQsZSl9ZWxzZSBWcCh0LGUpfWZ1bmN0aW9uIGV4KHQsZSxuLHIpe2xldCBpPXQuZ2V0Tm9kZSgpLG89aS5nZXRDaGlsZEF0SW5kZXgodC5vZmZzZXQpLGw9THQoKSxzPXZuKGkpP1FvKCkuYXBwZW5kKGwpOmw7bC5zZXRGb3JtYXQobiksbC5zZXRTdHlsZShyKSxvPT09bnVsbD9pLmFwcGVuZChzKTooby5pbnNlcnRCZWZvcmUocyksZS50eXBlPT09ImVsZW1lbnQiJiZlLmtleT09PXQua2V5JiZlLm9mZnNldCE9PXQub2Zmc2V0JiZlLnNldChlLmtleSxlLm9mZnNldCsxLCJlbGVtZW50IikpLHQuaXMoZSkmJmUuc2V0KGwuX19rZXksMCwidGV4dCIpLHQuc2V0KGwuX19rZXksMCwidGV4dCIpfWZ1bmN0aW9uIHppKHQsZSxuLHIpe3Qua2V5PWUsdC5vZmZzZXQ9bix0LnR5cGU9cn1jbGFzcyBJZntjb25zdHJ1Y3RvcihlKXt0aGlzLmRpcnR5PSExLHRoaXMuX25vZGVzPWUsdGhpcy5fY2FjaGVkTm9kZXM9bnVsbH1pcyhlKXtpZighT3MoZSkpcmV0dXJuITE7bGV0IG49dGhpcy5fbm9kZXMscj1lLl9ub2RlcztyZXR1cm4gbi5zaXplPT09ci5zaXplJiZBcnJheS5mcm9tKG4pLmV2ZXJ5KGk9PnIuaGFzKGkpKX1hZGQoZSl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9ub2Rlcy5hZGQoZSksdGhpcy5fY2FjaGVkTm9kZXM9bnVsbH1kZWxldGUoZSl7dGhpcy5kaXJ0eT0hMCx0aGlzLl9ub2Rlcy5kZWxldGUoZSksdGhpcy5fY2FjaGVkTm9kZXM9bnVsbH1jbGVhcigpe3RoaXMuZGlydHk9ITAsdGhpcy5fbm9kZXMuY2xlYXIoKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWhhcyhlKXtyZXR1cm4gdGhpcy5fbm9kZXMuaGFzKGUpfWNsb25lKCl7cmV0dXJuIG5ldyBJZihuZXcgU2V0KHRoaXMuX25vZGVzKSl9ZXh0cmFjdCgpe3JldHVybiB0aGlzLmdldE5vZGVzKCl9aW5zZXJ0UmF3VGV4dCgpe31pbnNlcnRUZXh0KCl7fWluc2VydE5vZGVzKGUsbil7bGV0IHI9dGhpcy5nZXROb2RlcygpLGk9ci5sZW5ndGg7dmFyIG89cltpLTFdO2lmKHEobykpbz1vLnNlbGVjdCgpO2Vsc2V7bGV0IGw9by5nZXRJbmRleFdpdGhpblBhcmVudCgpKzE7bz1vLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3QobCxsKX1mb3Ioby5pbnNlcnROb2RlcyhlLG4pLGU9MDtlPGk7ZSsrKXJbZV0ucmVtb3ZlKCk7cmV0dXJuITB9Z2V0Tm9kZXMoKXt2YXIgZT10aGlzLl9jYWNoZWROb2RlcztpZihlIT09bnVsbClyZXR1cm4gZTt2YXIgbj10aGlzLl9ub2RlcztlPVtdO2ZvcihsZXQgciBvZiBuKW49SXQociksbiE9PW51bGwmJmUucHVzaChuKTtyZXR1cm4gQXMoKXx8KHRoaXMuX2NhY2hlZE5vZGVzPWUpLGV9Z2V0VGV4dENvbnRlbnQoKXtsZXQgZT10aGlzLmdldE5vZGVzKCksbj0iIjtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyluKz1lW3JdLmdldFRleHRDb250ZW50KCk7cmV0dXJuIG59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZGx9ZnVuY3Rpb24gYm0odCl7bGV0W2UsLG5dPSRFKHQpO3Q9bi5nZXRDaGlsZHJlbigpO2xldCByPXQubGVuZ3RoO3ZhciBpPXRbMF0uZ2V0Q2hpbGRyZW4oKS5sZW5ndGg7bGV0IG89QXJyYXkocik7Zm9yKHZhciBsPTA7bDxyO2wrKylvW2xdPUFycmF5KGkpO2ZvcihpPTA7aTxyO2krKyl7bD10W2ldLmdldENoaWxkcmVuKCk7bGV0IHM9MDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Zm9yKDtvW2ldW3NdOylzKys7bGV0IGM9bFthXSx1PWMuX19yb3dTcGFufHwxLGQ9Yy5fX2NvbFNwYW58fDE7Zm9yKGxldCBmPTA7Zjx1O2YrKylmb3IobGV0IHA9MDtwPGQ7cCsrKW9baStmXVtzK3BdPWM7aWYoZT09PWMpcmV0dXJue2NvbFNwYW46ZCxjb2x1bW5JbmRleDpzLHJvd0luZGV4Omkscm93U3Bhbjp1fTtzKz1kfX1yZXR1cm4gbnVsbH1jbGFzcyBqZntjb25zdHJ1Y3RvcihlLG4scil7dGhpcy5ncmlkS2V5PWUsdGhpcy5hbmNob3I9bix0aGlzLmZvY3VzPXIsdGhpcy5kaXJ0eT0hMSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsLG4uX3NlbGVjdGlvbj10aGlzLHIuX3NlbGVjdGlvbj10aGlzfWlzKGUpe3JldHVybiBDdihlKT90aGlzLmdyaWRLZXk9PT1lLmdyaWRLZXkmJnRoaXMuYW5jaG9yLmlzKGUuYW5jaG9yKSYmdGhpcy5mb2N1cy5pcyhlLmZvY3VzKTohMX1zZXQoZSxuLHIpe3RoaXMuZGlydHk9ITAsdGhpcy5ncmlkS2V5PWUsdGhpcy5hbmNob3Iua2V5PW4sdGhpcy5mb2N1cy5rZXk9cix0aGlzLl9jYWNoZWROb2Rlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBqZih0aGlzLmdyaWRLZXksdGhpcy5hbmNob3IsdGhpcy5mb2N1cyl9aXNDb2xsYXBzZWQoKXtyZXR1cm4hMX1pc0JhY2t3YXJkKCl7cmV0dXJuIHRoaXMuZm9jdXMuaXNCZWZvcmUodGhpcy5hbmNob3IpfWdldENoYXJhY3Rlck9mZnNldHMoKXtyZXR1cm4gS3UodGhpcyl9ZXh0cmFjdCgpe3JldHVybiB0aGlzLmdldE5vZGVzKCl9aW5zZXJ0UmF3VGV4dCgpe31pbnNlcnRUZXh0KCl7fWluc2VydE5vZGVzKGUsbil7bGV0IHI9dGhpcy5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIGd2KHIuc2VsZWN0KDAsci5nZXRDaGlsZHJlblNpemUoKSkpLmluc2VydE5vZGVzKGUsbil9Z2V0U2hhcGUoKXt2YXIgZT1JdCh0aGlzLmFuY2hvci5rZXkpO2lmKGVyKGUpfHxWKDEwMyksZT1ibShlKSxlPT09bnVsbCl0aHJvdyBFcnJvcigiZ2V0Q2VsbFJlY3Q6IGV4cGVjdGVkIHRvIGZpbmQgQW5jaG9yTm9kZSIpO3ZhciBuPUl0KHRoaXMuZm9jdXMua2V5KTtlcihuKXx8VigxMDQpO2xldCByPWJtKG4pO2lmKHI9PT1udWxsKXRocm93IEVycm9yKCJnZXRDZWxsUmVjdDogZXhwZWN0ZWQgdG8gZmluZCBmb2N1c0NlbGxOb2RlIik7bj1NYXRoLm1pbihlLmNvbHVtbkluZGV4LHIuY29sdW1uSW5kZXgpO2xldCBpPU1hdGgubWF4KGUuY29sdW1uSW5kZXgsci5jb2x1bW5JbmRleCksbz1NYXRoLm1pbihlLnJvd0luZGV4LHIucm93SW5kZXgpO3JldHVybiBlPU1hdGgubWF4KGUucm93SW5kZXgsci5yb3dJbmRleCkse2Zyb21YOk1hdGgubWluKG4saSksZnJvbVk6TWF0aC5taW4obyxlKSx0b1g6TWF0aC5tYXgobixpKSx0b1k6TWF0aC5tYXgobyxlKX19Z2V0Tm9kZXMoKXtmdW5jdGlvbiBlKHcpe2xldHtjZWxsOnYsc3RhcnRDb2x1bW46eCxzdGFydFJvdzpffT13O2E9TWF0aC5taW4oYSx4KSxjPU1hdGgubWluKGMsXyksdT1NYXRoLm1heCh1LHgrdi5fX2NvbFNwYW4tMSksZD1NYXRoLm1heChkLF8rdi5fX3Jvd1NwYW4tMSl9dmFyIG49dGhpcy5fY2FjaGVkTm9kZXM7aWYobiE9PW51bGwpcmV0dXJuIG47dmFyIHI9dGhpcy5hbmNob3IuZ2V0Tm9kZSgpO249dGhpcy5mb2N1cy5nZXROb2RlKCkscj1PZChyLGVyKTt2YXIgaT1PZChuLGVyKTtlcihyKXx8VigxMDMpLGVyKGkpfHxWKDEwNCksbj1yLmdldFBhcmVudCgpLGZjKG4pfHxWKDEwNSksbj1uLmdldFBhcmVudCgpLE52KG4pfHxWKDEwNik7bGV0W28sbCxzXT1rRShuLHIsaSksYT1NYXRoLm1pbihsLnN0YXJ0Q29sdW1uLHMuc3RhcnRDb2x1bW4pLGM9TWF0aC5taW4obC5zdGFydFJvdyxzLnN0YXJ0Um93KSx1PU1hdGgubWF4KGwuc3RhcnRDb2x1bW4rbC5jZWxsLl9fY29sU3Bhbi0xLHMuc3RhcnRDb2x1bW4rcy5jZWxsLl9fY29sU3Bhbi0xKSxkPU1hdGgubWF4KGwuc3RhcnRSb3crbC5jZWxsLl9fcm93U3Bhbi0xLHMuc3RhcnRSb3crcy5jZWxsLl9fcm93U3Bhbi0xKTtyPWEsaT1jO2Zvcih2YXIgZj1hLHA9YzthPHJ8fGM8aXx8dT5mfHxkPnA7KXtpZihhPHIpe3ZhciBnPXAtaTstLXI7Zm9yKHZhciBtPTA7bTw9ZzttKyspZShvW2krbV1bcl0pfWlmKGM8aSlmb3IoZz1mLXIsLS1pLG09MDttPD1nO20rKyllKG9baV1bcittXSk7aWYodT5mKWZvcihnPXAtaSxmKz0xLG09MDttPD1nO20rKyllKG9baSttXVtmXSk7aWYoZD5wKWZvcihnPWYtcixwKz0xLG09MDttPD1nO20rKyllKG9bcF1bcittXSl9Zm9yKG49W25dLHI9bnVsbCxpPWM7aTw9ZDtpKyspZm9yKGY9YTtmPD11O2YrKykoe2NlbGw6cH09b1tpXVtmXSksZz1wLmdldFBhcmVudCgpLGZjKGcpfHxWKDEwNyksZyE9PXImJm4ucHVzaChnKSxuLnB1c2gocCwuLi56UihwKSkscj1nO3JldHVybiBBcygpfHwodGhpcy5fY2FjaGVkTm9kZXM9biksbn1nZXRUZXh0Q29udGVudCgpe2xldCBlPXRoaXMuZ2V0Tm9kZXMoKSxuPSIiO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKW4rPWVbcl0uZ2V0VGV4dENvbnRlbnQoKTtyZXR1cm4gbn19ZnVuY3Rpb24gQ3YodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBqZn1jbGFzcyBkbHtjb25zdHJ1Y3RvcihlLG4scixpKXt0aGlzLmFuY2hvcj1lLHRoaXMuZm9jdXM9bix0aGlzLmRpcnR5PSExLHRoaXMuZm9ybWF0PXIsdGhpcy5zdHlsZT1pLHRoaXMuX2NhY2hlZE5vZGVzPW51bGwsZS5fc2VsZWN0aW9uPXRoaXMsbi5fc2VsZWN0aW9uPXRoaXN9aXMoZSl7cmV0dXJuIGdlKGUpP3RoaXMuYW5jaG9yLmlzKGUuYW5jaG9yKSYmdGhpcy5mb2N1cy5pcyhlLmZvY3VzKSYmdGhpcy5mb3JtYXQ9PT1lLmZvcm1hdCYmdGhpcy5zdHlsZT09PWUuc3R5bGU6ITF9aXNCYWNrd2FyZCgpe3JldHVybiB0aGlzLmZvY3VzLmlzQmVmb3JlKHRoaXMuYW5jaG9yKX1pc0NvbGxhcHNlZCgpe3JldHVybiB0aGlzLmFuY2hvci5pcyh0aGlzLmZvY3VzKX1nZXROb2Rlcygpe3ZhciBlPXRoaXMuX2NhY2hlZE5vZGVzO2lmKGUhPT1udWxsKXJldHVybiBlO2U9dGhpcy5hbmNob3I7dmFyIG49dGhpcy5mb2N1cyxyPWUuaXNCZWZvcmUobiksaT1yP2U6bjtyPXI/bjplLGU9aS5nZXROb2RlKCksbj1yLmdldE5vZGUoKTtsZXQgbz1pLm9mZnNldDtyZXR1cm4gaT1yLm9mZnNldCxVKGUpJiYocj1lLmdldERlc2NlbmRhbnRCeUluZGV4KG8pLGU9cj8/ZSksVShuKSYmKHI9bi5nZXREZXNjZW5kYW50QnlJbmRleChpKSxyIT09bnVsbCYmciE9PWUmJm4uZ2V0Q2hpbGRBdEluZGV4KGkpPT09ciYmKHI9ci5nZXRQcmV2aW91c1NpYmxpbmcoKSksbj1yPz9uKSxlPWUuaXMobik/VShlKSYmMDxlLmdldENoaWxkcmVuU2l6ZSgpP1tdOltlXTplLmdldE5vZGVzQmV0d2VlbihuKSxBcygpfHwodGhpcy5fY2FjaGVkTm9kZXM9ZSksZX1zZXRUZXh0Tm9kZVJhbmdlKGUsbixyLGkpe3ppKHRoaXMuYW5jaG9yLGUuX19rZXksbiwidGV4dCIpLHppKHRoaXMuZm9jdXMsci5fX2tleSxpLCJ0ZXh0IiksdGhpcy5fY2FjaGVkTm9kZXM9bnVsbCx0aGlzLmRpcnR5PSEwfWdldFRleHRDb250ZW50KCl7bGV0IGU9dGhpcy5nZXROb2RlcygpO2lmKGUubGVuZ3RoPT09MClyZXR1cm4iIjtsZXQgbj1lWzBdLHI9ZVtlLmxlbmd0aC0xXSxpPXRoaXMuYW5jaG9yLG89dGhpcy5mb2N1cyxsPWkuaXNCZWZvcmUobyksW3MsYV09S3UodGhpcyksYz0iIix1PSEwO2ZvcihsZXQgZD0wO2Q8ZS5sZW5ndGg7ZCsrKXtsZXQgZj1lW2RdO2lmKFUoZikmJiFmLmlzSW5saW5lKCkpdXx8KGMrPWAKYCksdT0hZi5pc0VtcHR5KCk7ZWxzZSBpZih1PSExLHEoZikpe2xldCBwPWYuZ2V0VGV4dENvbnRlbnQoKTtmPT09bj9mPT09cj8oaS50eXBlIT09ImVsZW1lbnQifHxvLnR5cGUhPT0iZWxlbWVudCJ8fG8ub2Zmc2V0PT09aS5vZmZzZXQpJiYocD1zPGE/cC5zbGljZShzLGEpOnAuc2xpY2UoYSxzKSk6cD1sP3Auc2xpY2Uocyk6cC5zbGljZShhKTpmPT09ciYmKHA9bD9wLnNsaWNlKDAsYSk6cC5zbGljZSgwLHMpKSxjKz1wfWVsc2UhdHQoZikmJiF1YyhmKXx8Zj09PXImJnRoaXMuaXNDb2xsYXBzZWQoKXx8KGMrPWYuZ2V0VGV4dENvbnRlbnQoKSl9cmV0dXJuIGN9YXBwbHlET01SYW5nZShlKXtsZXQgbj1odCgpLHI9bi5nZXRFZGl0b3JTdGF0ZSgpLl9zZWxlY3Rpb247aWYoZT1DRShlLnN0YXJ0Q29udGFpbmVyLGUuc3RhcnRPZmZzZXQsZS5lbmRDb250YWluZXIsZS5lbmRPZmZzZXQsbixyKSxlIT09bnVsbCl7dmFyW2ksb109ZTt6aSh0aGlzLmFuY2hvcixpLmtleSxpLm9mZnNldCxpLnR5cGUpLHppKHRoaXMuZm9jdXMsby5rZXksby5vZmZzZXQsby50eXBlKSx0aGlzLl9jYWNoZWROb2Rlcz1udWxsfX1jbG9uZSgpe2xldCBlPXRoaXMuYW5jaG9yLG49dGhpcy5mb2N1cztyZXR1cm4gbmV3IGRsKG5ldyBWcihlLmtleSxlLm9mZnNldCxlLnR5cGUpLG5ldyBWcihuLmtleSxuLm9mZnNldCxuLnR5cGUpLHRoaXMuZm9ybWF0LHRoaXMuc3R5bGUpfXRvZ2dsZUZvcm1hdChlKXt0aGlzLmZvcm1hdD1RUyh0aGlzLmZvcm1hdCxlLG51bGwpLHRoaXMuZGlydHk9ITB9c2V0U3R5bGUoZSl7dGhpcy5zdHlsZT1lLHRoaXMuZGlydHk9ITB9aGFzRm9ybWF0KGUpe3JldHVybih0aGlzLmZvcm1hdCZCb1tlXSkhPT0wfWluc2VydFJhd1RleHQoZSl7ZT1lLnNwbGl0KC8oXHI/XG58XHQpLyk7bGV0IG49W10scj1lLmxlbmd0aDtmb3IobGV0IGk9MDtpPHI7aSsrKXtsZXQgbz1lW2ldO289PT1gCmB8fG89PT1gXHIKYD9uLnB1c2goZ3MoKSk6bz09PSIJIj9uLnB1c2goRGYoKSk6bi5wdXNoKEx0KG8pKX10aGlzLmluc2VydE5vZGVzKG4pfWluc2VydFRleHQoZSl7dmFyIG49dGhpcy5hbmNob3Iscj10aGlzLmZvY3VzLGk9dGhpcy5pc0NvbGxhcHNlZCgpfHxuLmlzQmVmb3JlKHIpLG89dGhpcy5mb3JtYXQsbD10aGlzLnN0eWxlO2kmJm4udHlwZT09PSJlbGVtZW50Ij9leChuLHIsbyxsKTppfHxyLnR5cGUhPT0iZWxlbWVudCJ8fGV4KHIsbixvLGwpO3ZhciBzPXRoaXMuZ2V0Tm9kZXMoKSxhPXMubGVuZ3RoLGM9aT9yOm47cj0oaT9uOnIpLm9mZnNldDt2YXIgdT1jLm9mZnNldDtuPXNbMF0scShuKXx8VigyNiksaT1uLmdldFRleHRDb250ZW50KCkubGVuZ3RoO3ZhciBkPW4uZ2V0UGFyZW50T3JUaHJvdygpLGY9c1thLTFdO2lmKHRoaXMuaXNDb2xsYXBzZWQoKSYmcj09PWkmJihuLmlzU2VnbWVudGVkKCl8fG4uaXNUb2tlbigpfHwhbi5jYW5JbnNlcnRUZXh0QWZ0ZXIoKXx8IWQuY2FuSW5zZXJ0VGV4dEFmdGVyKCkmJm4uZ2V0TmV4dFNpYmxpbmcoKT09PW51bGwpKXt2YXIgcD1uLmdldE5leHRTaWJsaW5nKCk7aWYocShwKSYmcC5jYW5JbnNlcnRUZXh0QmVmb3JlKCkmJiFkbShwKXx8KHA9THQoKSxwLnNldEZvcm1hdChvKSxkLmNhbkluc2VydFRleHRBZnRlcigpP24uaW5zZXJ0QWZ0ZXIocCk6ZC5pbnNlcnRBZnRlcihwKSkscC5zZWxlY3QoMCwwKSxuPXAsZSE9PSIiKXt0aGlzLmluc2VydFRleHQoZSk7cmV0dXJufX1lbHNlIGlmKHRoaXMuaXNDb2xsYXBzZWQoKSYmcj09PTAmJihuLmlzU2VnbWVudGVkKCl8fG4uaXNUb2tlbigpfHwhbi5jYW5JbnNlcnRUZXh0QmVmb3JlKCl8fCFkLmNhbkluc2VydFRleHRCZWZvcmUoKSYmbi5nZXRQcmV2aW91c1NpYmxpbmcoKT09PW51bGwpKXtpZihwPW4uZ2V0UHJldmlvdXNTaWJsaW5nKCksKCFxKHApfHxkbShwKSkmJihwPUx0KCkscC5zZXRGb3JtYXQobyksZC5jYW5JbnNlcnRUZXh0QmVmb3JlKCk/bi5pbnNlcnRCZWZvcmUocCk6ZC5pbnNlcnRCZWZvcmUocCkpLHAuc2VsZWN0KCksbj1wLGUhPT0iIil7dGhpcy5pbnNlcnRUZXh0KGUpO3JldHVybn19ZWxzZSBpZihuLmlzU2VnbWVudGVkKCkmJnIhPT1pKWQ9THQobi5nZXRUZXh0Q29udGVudCgpKSxkLnNldEZvcm1hdChvKSxuLnJlcGxhY2UoZCksbj1kO2Vsc2UgaWYoISh0aGlzLmlzQ29sbGFwc2VkKCl8fGU9PT0iInx8KHA9Zi5nZXRQYXJlbnQoKSxkLmNhbkluc2VydFRleHRCZWZvcmUoKSYmZC5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSYmKCFVKHApfHxwLmNhbkluc2VydFRleHRCZWZvcmUoKSYmcC5jYW5JbnNlcnRUZXh0QWZ0ZXIoKSkpKSl7dGhpcy5pbnNlcnRUZXh0KCIiKSxFRSh0aGlzLmFuY2hvcix0aGlzLmZvY3VzLG51bGwpLHRoaXMuaW5zZXJ0VGV4dChlKTtyZXR1cm59aWYoYT09PTEpaWYobi5pc1Rva2VuKCkpZT1MdChlKSxlLnNlbGVjdCgpLG4ucmVwbGFjZShlKTtlbHNle2lmKHM9bi5nZXRGb3JtYXQoKSxhPW4uZ2V0U3R5bGUoKSxyPT09dSYmKHMhPT1vfHxhIT09bCkpaWYobi5nZXRUZXh0Q29udGVudCgpPT09IiIpbi5zZXRGb3JtYXQobyksbi5zZXRTdHlsZShsKTtlbHNle3M9THQoZSkscy5zZXRGb3JtYXQobykscy5zZXRTdHlsZShsKSxzLnNlbGVjdCgpLHI9PT0wP24uaW5zZXJ0QmVmb3JlKHMsITEpOihbYV09bi5zcGxpdFRleHQociksYS5pbnNlcnRBZnRlcihzLCExKSkscy5pc0NvbXBvc2luZygpJiZ0aGlzLmFuY2hvci50eXBlPT09InRleHQiJiYodGhpcy5hbmNob3Iub2Zmc2V0LT1lLmxlbmd0aCk7cmV0dXJufW49bi5zcGxpY2VUZXh0KHIsdS1yLGUsITApLG4uZ2V0VGV4dENvbnRlbnQoKT09PSIiP24ucmVtb3ZlKCk6dGhpcy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmKG4uaXNDb21wb3NpbmcoKT90aGlzLmFuY2hvci5vZmZzZXQtPWUubGVuZ3RoOih0aGlzLmZvcm1hdD1zLHRoaXMuc3R5bGU9YSkpfWVsc2V7aWYobz1uZXcgU2V0KFsuLi5uLmdldFBhcmVudEtleXMoKSwuLi5mLmdldFBhcmVudEtleXMoKV0pLHA9VShuKT9uOm4uZ2V0UGFyZW50T3JUaHJvdygpLGw9VShmKT9mOmYuZ2V0UGFyZW50T3JUaHJvdygpLGQ9ZiwhcC5pcyhsKSYmbC5pc0lubGluZSgpKWRvIGQ9bCxsPWwuZ2V0UGFyZW50T3JUaHJvdygpO3doaWxlKGwuaXNJbmxpbmUoKSk7aWYoYy50eXBlPT09InRleHQiJiYodSE9PTB8fGYuZ2V0VGV4dENvbnRlbnQoKT09PSIiKXx8Yy50eXBlPT09ImVsZW1lbnQiJiZmLmdldEluZGV4V2l0aGluUGFyZW50KCk8dSlpZihxKGYpJiYhZi5pc1Rva2VuKCkmJnUhPT1mLmdldFRleHRDb250ZW50U2l6ZSgpKXtpZihmLmlzU2VnbWVudGVkKCkpe3ZhciBnPUx0KGYuZ2V0VGV4dENvbnRlbnQoKSk7Zi5yZXBsYWNlKGcpLGY9Z312bihjLmdldE5vZGUoKSl8fChmPWYuc3BsaWNlVGV4dCgwLHUsIiIpKSxvLmFkZChmLl9fa2V5KX1lbHNlIGM9Zi5nZXRQYXJlbnRPclRocm93KCksYy5jYW5CZUVtcHR5KCl8fGMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0xP2YucmVtb3ZlKCk6Yy5yZW1vdmUoKTtlbHNlIG8uYWRkKGYuX19rZXkpO2ZvcihjPWwuZ2V0Q2hpbGRyZW4oKSx1PW5ldyBTZXQocyksZj1wLmlzKGwpLHA9cC5pc0lubGluZSgpJiZuLmdldE5leHRTaWJsaW5nKCk9PT1udWxsP3A6bixnPWMubGVuZ3RoLTE7MDw9ZztnLS0pe2xldCBtPWNbZ107aWYobS5pcyhuKXx8VShtKSYmbS5pc1BhcmVudE9mKG4pKWJyZWFrO20uaXNBdHRhY2hlZCgpJiYoIXUuaGFzKG0pfHxtLmlzKGQpP2Z8fHAuaW5zZXJ0QWZ0ZXIobSwhMSk6bS5yZW1vdmUoKSl9aWYoIWYpZm9yKGM9bCx1PW51bGw7YyE9PW51bGw7KWw9Yy5nZXRDaGlsZHJlbigpLGY9bC5sZW5ndGgsKGY9PT0wfHxsW2YtMV0uaXModSkpJiYoby5kZWxldGUoYy5fX2tleSksdT1jKSxjPWMuZ2V0UGFyZW50KCk7Zm9yKG4uaXNUb2tlbigpP3I9PT1pP24uc2VsZWN0KCk6KGU9THQoZSksZS5zZWxlY3QoKSxuLnJlcGxhY2UoZSkpOihuPW4uc3BsaWNlVGV4dChyLGktcixlLCEwKSxuLmdldFRleHRDb250ZW50KCk9PT0iIj9uLnJlbW92ZSgpOm4uaXNDb21wb3NpbmcoKSYmdGhpcy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmKHRoaXMuYW5jaG9yLm9mZnNldC09ZS5sZW5ndGgpKSxlPTE7ZTxhO2UrKyluPXNbZV0sby5oYXMobi5fX2tleSl8fG4ucmVtb3ZlKCl9fXJlbW92ZVRleHQoKXt0aGlzLmluc2VydFRleHQoIiIpfWZvcm1hdFRleHQoZSl7aWYodGhpcy5pc0NvbGxhcHNlZCgpKXRoaXMudG9nZ2xlRm9ybWF0KGUpLEt0KG51bGwpO2Vsc2V7dmFyIG49dGhpcy5nZXROb2RlcygpLHI9W107Zm9yKHZhciBpIG9mIG4pcShpKSYmci5wdXNoKGkpO3ZhciBvPXIubGVuZ3RoO2lmKG89PT0wKXRoaXMudG9nZ2xlRm9ybWF0KGUpLEt0KG51bGwpO2Vsc2V7aT10aGlzLmFuY2hvcjt2YXIgbD10aGlzLmZvY3VzLHM9dGhpcy5pc0JhY2t3YXJkKCk7bj1zP2w6aSxpPXM/aTpsO3ZhciBhPTAsYz1yWzBdO2lmKGw9bi50eXBlPT09ImVsZW1lbnQiPzA6bi5vZmZzZXQsbi50eXBlPT09InRleHQiJiZsPT09Yy5nZXRUZXh0Q29udGVudFNpemUoKSYmKGE9MSxjPXJbMV0sbD0wKSxjIT1udWxsKXtzPWMuZ2V0Rm9ybWF0RmxhZ3MoZSxudWxsKTt2YXIgdT1vLTEsZD1yW3VdO2lmKG89aS50eXBlPT09InRleHQiP2kub2Zmc2V0OmQuZ2V0VGV4dENvbnRlbnRTaXplKCksYy5pcyhkKSlsIT09byYmKGw9PT0wJiZvPT09Yy5nZXRUZXh0Q29udGVudFNpemUoKT9jLnNldEZvcm1hdChzKTooZT1jLnNwbGl0VGV4dChsLG8pLGU9bD09PTA/ZVswXTplWzFdLGUuc2V0Rm9ybWF0KHMpLG4udHlwZT09PSJ0ZXh0IiYmbi5zZXQoZS5fX2tleSwwLCJ0ZXh0IiksaS50eXBlPT09InRleHQiJiZpLnNldChlLl9fa2V5LG8tbCwidGV4dCIpKSx0aGlzLmZvcm1hdD1zKTtlbHNle2whPT0wJiYoWyxjXT1jLnNwbGl0VGV4dChsKSxsPTApLGMuc2V0Rm9ybWF0KHMpO3ZhciBmPWQuZ2V0Rm9ybWF0RmxhZ3MoZSxzKTtmb3IoMDxvJiYobyE9PWQuZ2V0VGV4dENvbnRlbnRTaXplKCkmJihbZF09ZC5zcGxpdFRleHQobykpLGQuc2V0Rm9ybWF0KGYpKSxhKz0xO2E8dTthKyspe2xldCBwPXJbYV07aWYoIXAuaXNUb2tlbigpKXtsZXQgZz1wLmdldEZvcm1hdEZsYWdzKGUsZik7cC5zZXRGb3JtYXQoZyl9fW4udHlwZT09PSJ0ZXh0IiYmbi5zZXQoYy5fX2tleSxsLCJ0ZXh0IiksaS50eXBlPT09InRleHQiJiZpLnNldChkLl9fa2V5LG8sInRleHQiKSx0aGlzLmZvcm1hdD1zfGZ9fX19fWluc2VydE5vZGVzKGUsbil7aWYoIXRoaXMuaXNDb2xsYXBzZWQoKSl7dmFyIHI9dGhpcy5pc0JhY2t3YXJkKCk/dGhpcy5hbmNob3I6dGhpcy5mb2N1cyxpPXIuZ2V0Tm9kZSgpLmdldE5leHRTaWJsaW5nKCk7aWYoaT1pP2kuZ2V0S2V5KCk6bnVsbCxyPShyPXIuZ2V0Tm9kZSgpLmdldFByZXZpb3VzU2libGluZygpKT9yLmdldEtleSgpOm51bGwsdGhpcy5yZW1vdmVUZXh0KCksdGhpcy5pc0NvbGxhcHNlZCgpJiZ0aGlzLmZvY3VzLnR5cGU9PT0iZWxlbWVudCIpe2lmKHRoaXMuZm9jdXMua2V5PT09aSYmdGhpcy5mb2N1cy5vZmZzZXQ9PT0wKXt2YXIgbz1MdCgpO3RoaXMuZm9jdXMuZ2V0Tm9kZSgpLmluc2VydEJlZm9yZShvKX1lbHNlIHRoaXMuZm9jdXMua2V5PT09ciYmdGhpcy5mb2N1cy5vZmZzZXQ9PT10aGlzLmZvY3VzLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKSYmKG89THQoKSx0aGlzLmZvY3VzLmdldE5vZGUoKS5pbnNlcnRBZnRlcihvKSk7byYmKHRoaXMuZm9jdXMuc2V0KG8uX19rZXksMCwidGV4dCIpLHRoaXMuYW5jaG9yLnNldChvLl9fa2V5LDAsInRleHQiKSl9fW89dGhpcy5hbmNob3Iscj1vLm9mZnNldDt2YXIgbD1vLmdldE5vZGUoKTtpPWwsby50eXBlPT09ImVsZW1lbnQiJiYobz1vLmdldE5vZGUoKSxpPW8uZ2V0Q2hpbGRBdEluZGV4KHItMSksaT1pPT09bnVsbD9vOmkpLG89W107dmFyIHM9bC5nZXROZXh0U2libGluZ3MoKSxhPV9yKGwpP251bGw6bC5nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCk7aWYocShsKSlpZihpPWwuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgscj09PTAmJmkhPT0wKWk9bC5nZXRQcmV2aW91c1NpYmxpbmcoKSxpPWkhPT1udWxsP2k6bC5nZXRQYXJlbnRPclRocm93KCksby5wdXNoKGwpO2Vsc2UgaWYocj09PWkpaT1sO2Vsc2V7aWYobC5pc1Rva2VuKCkpcmV0dXJuITE7W2ksbF09bC5zcGxpdFRleHQociksby5wdXNoKGwpfWw9aSxvLnB1c2goLi4ucykscz1lWzBdO3ZhciBjPSExLHU9bnVsbDtmb3IobGV0IGc9MDtnPGUubGVuZ3RoO2crKyl7dmFyIGQ9ZVtnXTtpZihfcihpKXx8dHQoaSl8fCFVKGQpfHxkLmlzSW5saW5lKCkpYyYmIVUoZCkmJiF0dChkKSYmX3IoaS5nZXRQYXJlbnQoKSkmJlYoMjgpO2Vsc2V7aWYoZC5pcyhzKSl7aWYoVShpKSYmaS5pc0VtcHR5KCkmJmkuY2FuUmVwbGFjZVdpdGgoZCkpe2kucmVwbGFjZShkKSxpPWQsYz0hMDtjb250aW51ZX1pZihjPWQuZ2V0Rmlyc3REZXNjZW5kYW50KCkscVMoYykpe2Zvcih2YXIgZj1jLmdldFBhcmVudE9yVGhyb3coKTtmLmlzSW5saW5lKCk7KWY9Zi5nZXRQYXJlbnRPclRocm93KCk7aWYodT1mLmdldENoaWxkcmVuKCksYz11Lmxlbmd0aCxVKGkpKXt2YXIgcD1pLmdldEZpcnN0Q2hpbGQoKTtmb3IobGV0IG09MDttPGM7bSsrKXtsZXQgdz11W21dO3A9PT1udWxsP2kuYXBwZW5kKHcpOnAuaW5zZXJ0QWZ0ZXIodykscD13fX1lbHNle2ZvcihwPWMtMTswPD1wO3AtLSlpLmluc2VydEFmdGVyKHVbcF0pO2k9aS5nZXRQYXJlbnRPclRocm93KCl9aWYodT11W2MtMV0sZi5yZW1vdmUoKSxjPSEwLGYuaXMoZCkpY29udGludWV9fXEoaSkmJihhPT09bnVsbCYmVigyNyksaT1hKX1jPSExLFUoaSkmJiFpLmlzSW5saW5lKCk/KHU9ZCx0dChkKSYmIWQuaXNJbmxpbmUoKT9pPWUubGVuZ3RoPT09MSYmaS5jYW5CZUVtcHR5KCkmJmkuaXNFbXB0eSgpP2kuaW5zZXJ0QmVmb3JlKGQsITEpOmkuaW5zZXJ0QWZ0ZXIoZCwhMSk6VShkKT8oZC5jYW5CZUVtcHR5KCl8fCFkLmlzRW1wdHkoKSkmJih2bihpKT8oZj1pLmdldENoaWxkQXRJbmRleChyKSxmIT09bnVsbD9mLmluc2VydEJlZm9yZShkKTppLmFwcGVuZChkKSxpPWQpOmQuaXNJbmxpbmUoKT8oaS5hcHBlbmQoZCksaT1kKTppPWkuaW5zZXJ0QWZ0ZXIoZCwhMSkpOihmPWkuZ2V0Rmlyc3RDaGlsZCgpLGYhPT1udWxsP2YuaW5zZXJ0QmVmb3JlKGQpOmkuYXBwZW5kKGQpLGk9ZCkpOiFVKGQpfHxVKGQpJiZkLmlzSW5saW5lKCl8fHR0KGkpJiYhaS5pc0lubGluZSgpPyh1PWQsZ2UodGhpcykmJnR0KGQpJiYoVShpKXx8cShpKSkmJiFkLmlzSW5saW5lKCk/KHEoaSk/KGY9aS5nZXRQYXJlbnRPclRocm93KCksW2ldPWkuc3BsaXRUZXh0KHIpLGk9aS5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEpOihmPWksaT1yKSxbLGldPWFFKGYsaSksaT1pLmluc2VydEJlZm9yZShkKSk6aT1pLmluc2VydEFmdGVyKGQsITEpKTooZD1pLmdldFBhcmVudE9yVGhyb3coKSx1YyhpKSYmaS5yZW1vdmUoKSxpPWQsZy0tKX1pZihuJiYocShsKT9sLnNlbGVjdCgpOihlPWkuZ2V0UHJldmlvdXNTaWJsaW5nKCkscShlKT9lLnNlbGVjdCgpOihlPWkuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxpLmdldFBhcmVudE9yVGhyb3coKS5zZWxlY3QoZSxlKSkpKSxVKGkpKXtpZihlPXEodSk/dTpVKHUpJiZ1LmlzSW5saW5lKCk/dS5nZXRMYXN0RGVzY2VuZGFudCgpOmkuZ2V0TGFzdERlc2NlbmRhbnQoKSxufHwoZT09PW51bGw/aS5zZWxlY3QoKTpxKGUpP2UuZ2V0VGV4dENvbnRlbnQoKT09PSIiP2Uuc2VsZWN0UHJldmlvdXMoKTplLnNlbGVjdCgpOmUuc2VsZWN0TmV4dCgpKSxvLmxlbmd0aCE9PTApZm9yKG49aSxlPW8ubGVuZ3RoLTE7MDw9ZTtlLS0pcj1vW2VdLGE9ci5nZXRQYXJlbnRPclRocm93KCksIVUoaSl8fGttKHIpfHx0dChyKSYmKCFyLmlzSW5saW5lKCl8fHIuaXNJc29sYXRlZCgpKT9VKGkpfHxrbShyKT9VKHIpJiYhci5jYW5JbnNlcnRBZnRlcihpKT8obD1hLmNvbnN0cnVjdG9yLmNsb25lKGEpLFUobCl8fFYoMjkpLGwuYXBwZW5kKHIpLGkuaW5zZXJ0QWZ0ZXIobCkpOmkuaW5zZXJ0QWZ0ZXIocik6KGkuaW5zZXJ0QmVmb3JlKHIpLGk9cik6KG49PT1pP2kuYXBwZW5kKHIpOmkuaW5zZXJ0QmVmb3JlKHIpLGk9ciksYS5pc0VtcHR5KCkmJiFhLmNhbkJlRW1wdHkoKSYmYS5yZW1vdmUoKX1lbHNlIG58fChxKGkpP2kuc2VsZWN0KCk6KG49aS5nZXRQYXJlbnRPclRocm93KCksZT1pLmdldEluZGV4V2l0aGluUGFyZW50KCkrMSxuLnNlbGVjdChlLGUpKSk7cmV0dXJuITB9aW5zZXJ0UGFyYWdyYXBoKCl7dGhpcy5pc0NvbGxhcHNlZCgpfHx0aGlzLnJlbW92ZVRleHQoKTt2YXIgZT10aGlzLmFuY2hvcixuPWUub2Zmc2V0LHI9W107aWYoZS50eXBlPT09InRleHQiKXt2YXIgaT1lLmdldE5vZGUoKSxvPWkuZ2V0TmV4dFNpYmxpbmdzKCkucmV2ZXJzZSgpLGw9aS5nZXRQYXJlbnRPclRocm93KCkscz1sLmlzSW5saW5lKCksYT1zP2wuZ2V0VGV4dENvbnRlbnRTaXplKCk6aS5nZXRUZXh0Q29udGVudFNpemUoKTtuPT09MD9vLnB1c2goaSk6KHMmJihyPWwuZ2V0TmV4dFNpYmxpbmdzKCkpLG49PT1hfHxzJiZuPT09aS5nZXRUZXh0Q29udGVudFNpemUoKXx8KFssaV09aS5zcGxpdFRleHQobiksby5wdXNoKGkpKSl9ZWxzZXtpZihsPWUuZ2V0Tm9kZSgpLF9yKGwpKXtvPVFvKCkscj1sLmdldENoaWxkQXRJbmRleChuKSxvLnNlbGVjdCgpLHIhPT1udWxsP3IuaW5zZXJ0QmVmb3JlKG8sITEpOmwuYXBwZW5kKG8pO3JldHVybn1vPWwuZ2V0Q2hpbGRyZW4oKS5zbGljZShuKS5yZXZlcnNlKCl9aWYoaT1vLmxlbmd0aCxuPT09MCYmMDxpJiZsLmlzSW5saW5lKCkpe2lmKHI9bC5nZXRQYXJlbnRPclRocm93KCksbz1yLmluc2VydE5ld0FmdGVyKHRoaXMsITEpLFUobykpZm9yKHI9ci5nZXRDaGlsZHJlbigpLGw9MDtsPHIubGVuZ3RoO2wrKylvLmFwcGVuZChyW2xdKX1lbHNlIGlmKHM9bC5pbnNlcnROZXdBZnRlcih0aGlzLCExKSxzPT09bnVsbCl0aGlzLmluc2VydExpbmVCcmVhaygpO2Vsc2UgaWYoVShzKSlpZihhPWwuZ2V0Rmlyc3RDaGlsZCgpLG49PT0wJiYobC5pcyhlLmdldE5vZGUoKSl8fGEmJmEuaXMoZS5nZXROb2RlKCkpKSYmMDxpKWwuaW5zZXJ0QmVmb3JlKHMpO2Vsc2V7aWYobD1udWxsLG49ci5sZW5ndGgsZT1zLmdldFBhcmVudE9yVGhyb3coKSwwPG4pZm9yKGE9MDthPG47YSsrKWUuYXBwZW5kKHJbYV0pO2lmKGkhPT0wKWZvcihyPTA7cjxpO3IrKyluPW9bcl0sbD09PW51bGw/cy5hcHBlbmQobik6bC5pbnNlcnRCZWZvcmUobiksbD1uO3MuY2FuQmVFbXB0eSgpfHxzLmdldENoaWxkcmVuU2l6ZSgpIT09MD9zLnNlbGVjdFN0YXJ0KCk6KHMuc2VsZWN0UHJldmlvdXMoKSxzLnJlbW92ZSgpKX19aW5zZXJ0TGluZUJyZWFrKGUpe2xldCBuPWdzKCk7dmFyIHI9dGhpcy5hbmNob3I7ci50eXBlPT09ImVsZW1lbnQiJiYocj1yLmdldE5vZGUoKSx2bihyKSYmdGhpcy5pbnNlcnRQYXJhZ3JhcGgoKSksZT90aGlzLmluc2VydE5vZGVzKFtuXSwhMCk6dGhpcy5pbnNlcnROb2Rlcyhbbl0pJiZuLnNlbGVjdE5leHQoMCwwKX1nZXRDaGFyYWN0ZXJPZmZzZXRzKCl7cmV0dXJuIEt1KHRoaXMpfWV4dHJhY3QoKXt2YXIgZT10aGlzLmdldE5vZGVzKCksbj1lLmxlbmd0aCxyPW4tMSxpPXRoaXMuYW5jaG9yO2xldCBvPXRoaXMuZm9jdXM7dmFyIGw9ZVswXTtsZXQgcz1lW3JdLFthLGNdPUt1KHRoaXMpO3JldHVybiBuPT09MD9bXTpuPT09MT9xKGwpJiYhdGhpcy5pc0NvbGxhcHNlZCgpPyhlPWE+Yz9jOmEscj1sLnNwbGl0VGV4dChlLGE+Yz9hOmMpLGU9ZT09PTA/clswXTpyWzFdLGUhPW51bGw/W2VdOltdKTpbbF06KG49aS5pc0JlZm9yZShvKSxxKGwpJiYoaT1uP2E6YyxpPT09bC5nZXRUZXh0Q29udGVudFNpemUoKT9lLnNoaWZ0KCk6aSE9PTAmJihbLGxdPWwuc3BsaXRUZXh0KGkpLGVbMF09bCkpLHEocykmJihsPXMuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgsbj1uP2M6YSxuPT09MD9lLnBvcCgpOm4hPT1sJiYoW3NdPXMuc3BsaXRUZXh0KG4pLGVbcl09cykpLGUpfW1vZGlmeShlLG4scil7dmFyIGk9dGhpcy5mb2N1cyxvPXRoaXMuYW5jaG9yLGw9ZT09PSJtb3ZlIixzPWZtKGksbik7aWYodHQocykmJiFzLmlzSXNvbGF0ZWQoKSlsJiZzLmlzS2V5Ym9hcmRTZWxlY3RhYmxlKCk/KG49JG0oKSxuLmFkZChzLl9fa2V5KSxIcihuKSk6KGU9bj9zLmdldFByZXZpb3VzU2libGluZygpOnMuZ2V0TmV4dFNpYmxpbmcoKSxxKGUpPyhzPWUuX19rZXksbj1uP2UuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGg6MCxpLnNldChzLG4sInRleHQiKSxsJiZvLnNldChzLG4sInRleHQiKSk6KHI9cy5nZXRQYXJlbnRPclRocm93KCksVShlKT8ocj1lLl9fa2V5LHM9bj9lLmdldENoaWxkcmVuU2l6ZSgpOjApOihzPXMuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxyPXIuX19rZXksbnx8cysrKSxpLnNldChyLHMsImVsZW1lbnQiKSxsJiZvLnNldChyLHMsImVsZW1lbnQiKSkpO2Vsc2UgaWYobz1odCgpLGk9SnIoby5fd2luZG93KSl7dmFyIGE9by5fYmxvY2tDdXJzb3JFbGVtZW50LGM9by5fcm9vdEVsZW1lbnQ7aWYoYz09PW51bGx8fGE9PT1udWxsfHwhVShzKXx8cy5pc0lubGluZSgpfHxzLmNhbkJlRW1wdHkoKXx8cG0oYSxvLGMpLGkubW9kaWZ5KGUsbj8iYmFja3dhcmQiOiJmb3J3YXJkIixyKSwwPGkucmFuZ2VDb3VudCYmKHM9aS5nZXRSYW5nZUF0KDApLG89dGhpcy5hbmNob3IuZ2V0Tm9kZSgpLG89dm4obyk/bzpsRShvKSx0aGlzLmFwcGx5RE9NUmFuZ2UocyksdGhpcy5kaXJ0eT0hMCwhbCkpe2ZvcihsPXRoaXMuZ2V0Tm9kZXMoKSxlPVtdLHI9ITEsYT0wO2E8bC5sZW5ndGg7YSsrKWM9bFthXSxSZChjLG8pP2UucHVzaChjKTpyPSEwO3ImJjA8ZS5sZW5ndGgmJihuPyhuPWVbMF0sVShuKT9uLnNlbGVjdFN0YXJ0KCk6bi5nZXRQYXJlbnRPclRocm93KCkuc2VsZWN0U3RhcnQoKSk6KG49ZVtlLmxlbmd0aC0xXSxVKG4pP24uc2VsZWN0RW5kKCk6bi5nZXRQYXJlbnRPclRocm93KCkuc2VsZWN0RW5kKCkpKSwoaS5hbmNob3JOb2RlIT09cy5zdGFydENvbnRhaW5lcnx8aS5hbmNob3JPZmZzZXQhPT1zLnN0YXJ0T2Zmc2V0KSYmKG49dGhpcy5mb2N1cyxsPXRoaXMuYW5jaG9yLGk9bC5rZXkscz1sLm9mZnNldCxvPWwudHlwZSx6aShsLG4ua2V5LG4ub2Zmc2V0LG4udHlwZSksemkobixpLHMsbyksdGhpcy5fY2FjaGVkTm9kZXM9bnVsbCl9fX1kZWxldGVDaGFyYWN0ZXIoZSl7bGV0IG49dGhpcy5pc0NvbGxhcHNlZCgpO2lmKHRoaXMuaXNDb2xsYXBzZWQoKSl7dmFyIHI9dGhpcy5hbmNob3IsaT10aGlzLmZvY3VzLG89ci5nZXROb2RlKCk7aWYoIWUmJihyLnR5cGU9PT0iZWxlbWVudCImJlUobykmJnIub2Zmc2V0PT09by5nZXRDaGlsZHJlblNpemUoKXx8ci50eXBlPT09InRleHQiJiZyLm9mZnNldD09PW8uZ2V0VGV4dENvbnRlbnRTaXplKCkpKXt2YXIgbD1vLmdldFBhcmVudCgpO2lmKGw9by5nZXROZXh0U2libGluZygpfHwobD09PW51bGw/bnVsbDpsLmdldE5leHRTaWJsaW5nKCkpLFUobCkmJmwuaXNTaGFkb3dSb290KCkpcmV0dXJufWlmKGw9Zm0oaSxlKSx0dChsKSYmIWwuaXNJc29sYXRlZCgpKXtsLmlzS2V5Ym9hcmRTZWxlY3RhYmxlKCkmJlUobykmJm8uZ2V0Q2hpbGRyZW5TaXplKCk9PT0wPyhvLnJlbW92ZSgpLGU9JG0oKSxlLmFkZChsLl9fa2V5KSxIcihlKSk6KGwucmVtb3ZlKCksaHQoKS5kaXNwYXRjaENvbW1hbmQoTmYsdm9pZCAwKSk7cmV0dXJufWlmKCFlJiZVKGwpJiZVKG8pJiZvLmlzRW1wdHkoKSl7by5yZW1vdmUoKSxsLnNlbGVjdFN0YXJ0KCk7cmV0dXJufWlmKHRoaXMubW9kaWZ5KCJleHRlbmQiLGUsImNoYXJhY3RlciIpLHRoaXMuaXNDb2xsYXBzZWQoKSl7aWYoZSYmci5vZmZzZXQ9PT0wJiYoci50eXBlPT09ImVsZW1lbnQiP3IuZ2V0Tm9kZSgpOnIuZ2V0Tm9kZSgpLmdldFBhcmVudE9yVGhyb3coKSkuY29sbGFwc2VBdFN0YXJ0KHRoaXMpKXJldHVybn1lbHNle2lmKGw9aS50eXBlPT09InRleHQiP2kuZ2V0Tm9kZSgpOm51bGwsbz1yLnR5cGU9PT0idGV4dCI/ci5nZXROb2RlKCk6bnVsbCxsIT09bnVsbCYmbC5pc1NlZ21lbnRlZCgpKXtpZihyPWkub2Zmc2V0LGk9bC5nZXRUZXh0Q29udGVudFNpemUoKSxsLmlzKG8pfHxlJiZyIT09aXx8IWUmJnIhPT0wKXtueChsLGUscik7cmV0dXJufX1lbHNlIGlmKG8hPT1udWxsJiZvLmlzU2VnbWVudGVkKCkmJihyPXIub2Zmc2V0LGk9by5nZXRUZXh0Q29udGVudFNpemUoKSxvLmlzKGwpfHxlJiZyIT09MHx8IWUmJnIhPT1pKSl7bngobyxlLHIpO3JldHVybn1pZihvPXRoaXMuYW5jaG9yLGw9dGhpcy5mb2N1cyxyPW8uZ2V0Tm9kZSgpLGk9bC5nZXROb2RlKCkscj09PWkmJm8udHlwZT09PSJ0ZXh0IiYmbC50eXBlPT09InRleHQiKXt2YXIgcz1vLm9mZnNldCxhPWwub2Zmc2V0O2xldCBjPXM8YTtpPWM/czphLGE9Yz9hOnMscz1hLTEsaSE9PXMmJihyPXIuZ2V0VGV4dENvbnRlbnQoKS5zbGljZShpLGEpLHJFKHIpfHwoZT9sLm9mZnNldD1zOm8ub2Zmc2V0PXMpKX19fXRoaXMucmVtb3ZlVGV4dCgpLGUmJiFuJiZ0aGlzLmlzQ29sbGFwc2VkKCkmJnRoaXMuYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJnRoaXMuYW5jaG9yLm9mZnNldD09PTAmJihlPXRoaXMuYW5jaG9yLmdldE5vZGUoKSxlLmlzRW1wdHkoKSYmdm4oZS5nZXRQYXJlbnQoKSkmJmUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKT09PTAmJmUuY29sbGFwc2VBdFN0YXJ0KHRoaXMpKX1kZWxldGVMaW5lKGUpe3RoaXMuaXNDb2xsYXBzZWQoKSYmKHRoaXMuYW5jaG9yLnR5cGU9PT0idGV4dCImJnRoaXMubW9kaWZ5KCJleHRlbmQiLGUsImxpbmVib3VuZGFyeSIpLChlP3RoaXMuZm9jdXM6dGhpcy5hbmNob3IpLm9mZnNldD09PTAmJnRoaXMubW9kaWZ5KCJleHRlbmQiLGUsImNoYXJhY3RlciIpKSx0aGlzLnJlbW92ZVRleHQoKX1kZWxldGVXb3JkKGUpe3RoaXMuaXNDb2xsYXBzZWQoKSYmdGhpcy5tb2RpZnkoImV4dGVuZCIsZSwid29yZCIpLHRoaXMucmVtb3ZlVGV4dCgpfX1mdW5jdGlvbiBPcyh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIElmfWZ1bmN0aW9uIHR4KHQpe2xldCBlPXQub2Zmc2V0O3JldHVybiB0LnR5cGU9PT0idGV4dCI/ZToodD10LmdldE5vZGUoKSxlPT09dC5nZXRDaGlsZHJlblNpemUoKT90LmdldFRleHRDb250ZW50KCkubGVuZ3RoOjApfWZ1bmN0aW9uIEt1KHQpe2xldCBlPXQuYW5jaG9yO3JldHVybiB0PXQuZm9jdXMsZS50eXBlPT09ImVsZW1lbnQiJiZ0LnR5cGU9PT0iZWxlbWVudCImJmUua2V5PT09dC5rZXkmJmUub2Zmc2V0PT09dC5vZmZzZXQ/WzAsMF06W3R4KGUpLHR4KHQpXX1mdW5jdGlvbiBueCh0LGUsbil7bGV0IHI9dC5nZXRUZXh0Q29udGVudCgpLnNwbGl0KC8oPz1ccykvZyksaT1yLmxlbmd0aCxvPTAsbD0wO2ZvcihsZXQgcz0wO3M8aTtzKyspe2xldCBhPXJbc10sYz1zPT09aS0xO2lmKGw9byxvKz1hLmxlbmd0aCxlJiZvPT09bnx8bz5ufHxjKXtyLnNwbGljZShzLDEpLGMmJihsPXZvaWQgMCk7YnJlYWt9fWU9ci5qb2luKCIiKS50cmltKCksZT09PSIiP3QucmVtb3ZlKCk6KHQuc2V0VGV4dENvbnRlbnQoZSksdC5zZWxlY3QobCxsKSl9ZnVuY3Rpb24gcngodCxlLG4scil7dmFyIGk9ZTtpZih0Lm5vZGVUeXBlPT09MSl7bGV0IHM9ITE7dmFyIG89dC5jaGlsZE5vZGVzLGw9by5sZW5ndGg7aT09PWwmJihzPSEwLGk9bC0xKTtsZXQgYT1vW2ldO2lmKGw9ITEsYT09PXIuX2Jsb2NrQ3Vyc29yRWxlbWVudD8oYT1vW2krMV0sbD0hMCk6ci5fYmxvY2tDdXJzb3JFbGVtZW50IT09bnVsbCYmaS0tLHI9V2woYSkscShyKSlpPXM/ci5nZXRUZXh0Q29udGVudFNpemUoKTowO2Vsc2V7aWYobz1XbCh0KSxvPT09bnVsbClyZXR1cm4gbnVsbDtpZihVKG8pPyh0PW8uZ2V0Q2hpbGRBdEluZGV4KGkpLChlPVUodCkpJiYoZT10LmdldFBhcmVudCgpLGU9bj09PW51bGx8fGU9PT1udWxsfHwhZS5jYW5CZUVtcHR5KCl8fGUhPT1uLmdldE5vZGUoKSksZSYmKG49cz90LmdldExhc3REZXNjZW5kYW50KCk6dC5nZXRGaXJzdERlc2NlbmRhbnQoKSxuPT09bnVsbD8obz10LGk9MCk6KHQ9bixvPVUodCk/dDp0LmdldFBhcmVudE9yVGhyb3coKSkpLHEodCk/KHI9dCxvPW51bGwsaT1zP3QuZ2V0VGV4dENvbnRlbnRTaXplKCk6MCk6dCE9PW8mJnMmJiFsJiZpKyspOihpPW8uZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxpPWU9PT0wJiZ0dChvKSYmV2wodCk9PT1vP2k6aSsxLG89by5nZXRQYXJlbnRPclRocm93KCkpLFUobykpcmV0dXJuIG5ldyBWcihvLl9fa2V5LGksImVsZW1lbnQiKX19ZWxzZSByPVdsKHQpO3JldHVybiBxKHIpP25ldyBWcihyLl9fa2V5LGksInRleHQiKTpudWxsfWZ1bmN0aW9uIGl4KHQsZSxuKXt2YXIgcj10Lm9mZnNldCxpPXQuZ2V0Tm9kZSgpO3I9PT0wPyhyPWkuZ2V0UHJldmlvdXNTaWJsaW5nKCksaT1pLmdldFBhcmVudCgpLGU/KG58fCFlKSYmcj09PW51bGwmJlUoaSkmJmkuaXNJbmxpbmUoKSYmKGU9aS5nZXRQcmV2aW91c1NpYmxpbmcoKSxxKGUpJiYodC5rZXk9ZS5fX2tleSx0Lm9mZnNldD1lLmdldFRleHRDb250ZW50KCkubGVuZ3RoKSk6VShyKSYmIW4mJnIuaXNJbmxpbmUoKT8odC5rZXk9ci5fX2tleSx0Lm9mZnNldD1yLmdldENoaWxkcmVuU2l6ZSgpLHQudHlwZT0iZWxlbWVudCIpOnEocikmJih0LmtleT1yLl9fa2V5LHQub2Zmc2V0PXIuZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgpKTpyPT09aS5nZXRUZXh0Q29udGVudCgpLmxlbmd0aCYmKHI9aS5nZXROZXh0U2libGluZygpLGk9aS5nZXRQYXJlbnQoKSxlJiZVKHIpJiZyLmlzSW5saW5lKCk/KHQua2V5PXIuX19rZXksdC5vZmZzZXQ9MCx0LnR5cGU9ImVsZW1lbnQiKToobnx8ZSkmJnI9PT1udWxsJiZVKGkpJiZpLmlzSW5saW5lKCkmJiFpLmNhbkluc2VydFRleHRBZnRlcigpJiYoZT1pLmdldE5leHRTaWJsaW5nKCkscShlKSYmKHQua2V5PWUuX19rZXksdC5vZmZzZXQ9MCkpKX1mdW5jdGlvbiBFRSh0LGUsbil7aWYodC50eXBlPT09InRleHQiJiZlLnR5cGU9PT0idGV4dCIpe3ZhciByPXQuaXNCZWZvcmUoZSk7bGV0IGk9dC5pcyhlKTtpeCh0LHIsaSksaXgoZSwhcixpKSxpJiYoZS5rZXk9dC5rZXksZS5vZmZzZXQ9dC5vZmZzZXQsZS50eXBlPXQudHlwZSkscj1odCgpLHIuaXNDb21wb3NpbmcoKSYmci5fY29tcG9zaXRpb25LZXkhPT10LmtleSYmZ2UobikmJihyPW4uYW5jaG9yLG49bi5mb2N1cyx6aSh0LHIua2V5LHIub2Zmc2V0LHIudHlwZSksemkoZSxuLmtleSxuLm9mZnNldCxuLnR5cGUpKX19ZnVuY3Rpb24gQ0UodCxlLG4scixpLG8pe3JldHVybiB0PT09bnVsbHx8bj09PW51bGx8fCF6YyhpLHQsbil8fChlPXJ4KHQsZSxnZShvKT9vLmFuY2hvcjpudWxsLGkpLGU9PT1udWxsKXx8KHI9cngobixyLGdlKG8pP28uZm9jdXM6bnVsbCxpKSxyPT09bnVsbHx8ZS50eXBlPT09ImVsZW1lbnQiJiZyLnR5cGU9PT0iZWxlbWVudCImJih0PVdsKHQpLG49V2wobiksdHQodCkmJnR0KG4pKSk/bnVsbDooRUUoZSxyLG8pLFtlLHJdKX1mdW5jdGlvbiBrbSh0KXtyZXR1cm4gVSh0KSYmIXQuaXNJbmxpbmUoKX1mdW5jdGlvbiBiRSh0LGUsbixyLGksbyl7bGV0IGw9UXIoKTtyZXR1cm4gdD1uZXcgZGwobmV3IFZyKHQsZSxpKSxuZXcgVnIobixyLG8pLDAsIiIpLHQuZGlydHk9ITAsbC5fc2VsZWN0aW9uPXR9ZnVuY3Rpb24gJG0oKXtyZXR1cm4gbmV3IElmKG5ldyBTZXQpfWZ1bmN0aW9uIG5PKHQpe2xldCBlPXQuZ2V0RWRpdG9yU3RhdGUoKS5fc2VsZWN0aW9uLG49SnIodC5fd2luZG93KTtyZXR1cm4gT3MoZSl8fEN2KGUpP2UuY2xvbmUoKTpidihlLG4sdCl9ZnVuY3Rpb24gYnYodCxlLG4pe3ZhciByPW4uX3dpbmRvdztpZihyPT09bnVsbClyZXR1cm4gbnVsbDt2YXIgaT1yLmV2ZW50LG89aT9pLnR5cGU6dm9pZCAwO3I9bz09PSJzZWxlY3Rpb25jaGFuZ2UiLGk9IXVtJiYocnx8bz09PSJiZWZvcmVpbnB1dCJ8fG89PT0iY29tcG9zaXRpb25zdGFydCJ8fG89PT0iY29tcG9zaXRpb25lbmQifHxvPT09ImNsaWNrIiYmaSYmaS5kZXRhaWw9PT0zfHxvPT09ImRyb3AifHxvPT09dm9pZCAwKTtsZXQgbDtpZighZ2UodCl8fGkpe2lmKGU9PT1udWxsKXJldHVybiBudWxsO2lmKGk9ZS5hbmNob3JOb2RlLG89ZS5mb2N1c05vZGUsbD1lLmFuY2hvck9mZnNldCxlPWUuZm9jdXNPZmZzZXQsciYmZ2UodCkmJiF6YyhuLGksbykpcmV0dXJuIHQuY2xvbmUoKX1lbHNlIHJldHVybiB0LmNsb25lKCk7aWYobj1DRShpLGwsbyxlLG4sdCksbj09PW51bGwpcmV0dXJuIG51bGw7bGV0W3MsYV09bjtyZXR1cm4gbmV3IGRsKHMsYSxnZSh0KT90LmZvcm1hdDowLGdlKHQpP3Quc3R5bGU6IiIpfWZ1bmN0aW9uIHJ0KCl7cmV0dXJuIFFyKCkuX3NlbGVjdGlvbn1mdW5jdGlvbiBQcygpe3JldHVybiBodCgpLl9lZGl0b3JTdGF0ZS5fc2VsZWN0aW9ufWZ1bmN0aW9uIEFkKHQsZSxuLHI9MSl7dmFyIGk9dC5hbmNob3Isbz10LmZvY3VzLGw9aS5nZXROb2RlKCkscz1vLmdldE5vZGUoKTtpZihlLmlzKGwpfHxlLmlzKHMpKXtpZihsPWUuX19rZXksdC5pc0NvbGxhcHNlZCgpKWU9aS5vZmZzZXQsKG48PWUmJjA8cnx8bjxlJiYwPnIpJiYobj1NYXRoLm1heCgwLGUrciksaS5zZXQobCxuLCJlbGVtZW50Iiksby5zZXQobCxuLCJlbGVtZW50Iiksb3godCkpO2Vsc2V7bGV0IGM9dC5pc0JhY2t3YXJkKCk7cz1jP286aTt2YXIgYT1zLmdldE5vZGUoKTtpPWM/aTpvLG89aS5nZXROb2RlKCksZS5pcyhhKSYmKGE9cy5vZmZzZXQsKG48PWEmJjA8cnx8bjxhJiYwPnIpJiZzLnNldChsLE1hdGgubWF4KDAsYStyKSwiZWxlbWVudCIpKSxlLmlzKG8pJiYoZT1pLm9mZnNldCwobjw9ZSYmMDxyfHxuPGUmJjA+cikmJmkuc2V0KGwsTWF0aC5tYXgoMCxlK3IpLCJlbGVtZW50IikpfW94KHQpfX1mdW5jdGlvbiBveCh0KXt2YXIgZT10LmFuY2hvcixuPWUub2Zmc2V0O2xldCByPXQuZm9jdXM7dmFyIGk9ci5vZmZzZXQsbz1lLmdldE5vZGUoKSxsPXIuZ2V0Tm9kZSgpO2lmKHQuaXNDb2xsYXBzZWQoKSlVKG8pJiYobD1vLmdldENoaWxkcmVuU2l6ZSgpLGw9KGk9bj49bCk/by5nZXRDaGlsZEF0SW5kZXgobC0xKTpvLmdldENoaWxkQXRJbmRleChuKSxxKGwpJiYobj0wLGkmJihuPWwuZ2V0VGV4dENvbnRlbnRTaXplKCkpLGUuc2V0KGwuX19rZXksbiwidGV4dCIpLHIuc2V0KGwuX19rZXksbiwidGV4dCIpKSk7ZWxzZXtpZihVKG8pKXtsZXQgcz1vLmdldENoaWxkcmVuU2l6ZSgpO249KHQ9bj49cyk/by5nZXRDaGlsZEF0SW5kZXgocy0xKTpvLmdldENoaWxkQXRJbmRleChuKSxxKG4pJiYobz0wLHQmJihvPW4uZ2V0VGV4dENvbnRlbnRTaXplKCkpLGUuc2V0KG4uX19rZXksbywidGV4dCIpKX1VKGwpJiYobj1sLmdldENoaWxkcmVuU2l6ZSgpLGk9KGU9aT49bik/bC5nZXRDaGlsZEF0SW5kZXgobi0xKTpsLmdldENoaWxkQXRJbmRleChpKSxxKGkpJiYobD0wLGUmJihsPWkuZ2V0VGV4dENvbnRlbnRTaXplKCkpLHIuc2V0KGkuX19rZXksbCwidGV4dCIpKSl9fWZ1bmN0aW9uIHJPKHQsZSl7aWYoZT1lLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbix0PXQuX3NlbGVjdGlvbixnZSh0KSl7dmFyIG49dC5hbmNob3I7bGV0IHI9dC5mb2N1cyxpO24udHlwZT09PSJ0ZXh0IiYmKGk9bi5nZXROb2RlKCksaS5zZWxlY3Rpb25UcmFuc2Zvcm0oZSx0KSksci50eXBlPT09InRleHQiJiYobj1yLmdldE5vZGUoKSxpIT09biYmbi5zZWxlY3Rpb25UcmFuc2Zvcm0oZSx0KSl9fWZ1bmN0aW9uIE1kKHQsZSxuLHIsaSl7bGV0IG89bnVsbCxsPTAscz1udWxsO3IhPT1udWxsPyhvPXIuX19rZXkscShyKT8obD1yLmdldFRleHRDb250ZW50U2l6ZSgpLHM9InRleHQiKTpVKHIpJiYobD1yLmdldENoaWxkcmVuU2l6ZSgpLHM9ImVsZW1lbnQiKSk6aSE9PW51bGwmJihvPWkuX19rZXkscShpKT9zPSJ0ZXh0IjpVKGkpJiYocz0iZWxlbWVudCIpKSxvIT09bnVsbCYmcyE9PW51bGw/dC5zZXQobyxsLHMpOihsPWUuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxsPT09LTEmJihsPW4uZ2V0Q2hpbGRyZW5TaXplKCkpLHQuc2V0KG4uX19rZXksbCwiZWxlbWVudCIpKX1mdW5jdGlvbiBseCh0LGUsbixyLGkpe3QudHlwZT09PSJ0ZXh0Ij8odC5rZXk9bixlfHwodC5vZmZzZXQrPWkpKTp0Lm9mZnNldD5yLmdldEluZGV4V2l0aGluUGFyZW50KCkmJi0tdC5vZmZzZXR9ZnVuY3Rpb24ga0UodCxlLG4pe2xldCByPVtdLGk9bnVsbCxvPW51bGw7dD10LmdldENoaWxkcmVuKCk7Zm9yKGxldCB1PTA7dTx0Lmxlbmd0aDt1Kyspe3ZhciBsPXRbdV07ZmMobCl8fFYoMTA4KTt2YXIgcz1sLmdldENoaWxkcmVuKCk7bD0wO2ZvcihsZXQgZCBvZiBzKXtmb3IoZXIoZCl8fFYoMTA5KTtyW3VdIT09dm9pZCAwJiZyW3VdW2xdIT09dm9pZCAwOylsKys7cz11O3ZhciBhPWwsYz1kO2xldCBmPXtjZWxsOmMsc3RhcnRDb2x1bW46YSxzdGFydFJvdzpzfSxwPWMuX19yb3dTcGFuLGc9Yy5fX2NvbFNwYW47Zm9yKGxldCBtPTA7bTxwO20rKyl7cltzK21dPT09dm9pZCAwJiYocltzK21dPVtdKTtmb3IobGV0IHc9MDt3PGc7dysrKXJbcyttXVthK3ddPWZ9ZS5pcyhjKSYmKGk9Ziksbi5pcyhjKSYmKG89ZiksbCs9ZC5fX2NvbFNwYW59fXJldHVybiBpPT09bnVsbCYmVigxMTApLG89PT1udWxsJiZWKDExMSksW3IsaSxvXX1mdW5jdGlvbiAkRSh0KXt0IGluc3RhbmNlb2YgVHZ8fCh0IGluc3RhbmNlb2YgVWM/KHQ9T2QodCxlciksZXIodCl8fFYoMTE0KSk6KHQ9T2QodC5nZXROb2RlKCksZXIpLGVyKHQpfHxWKDExNCkpKTtsZXQgZT10LmdldFBhcmVudCgpO2ZjKGUpfHxWKDExNSk7bGV0IG49ZS5nZXRQYXJlbnQoKTtyZXR1cm4gTnYobil8fFYoMTE2KSxbdCxlLG5dfWxldCBqdD1udWxsLHp0PW51bGwsQW49ITEsS3A9ITEsZGM9MCxzeD17Y2hhcmFjdGVyRGF0YTohMCxjaGlsZExpc3Q6ITAsc3VidHJlZTohMH07ZnVuY3Rpb24gQXMoKXtyZXR1cm4gQW58fGp0IT09bnVsbCYmanQuX3JlYWRPbmx5fWZ1bmN0aW9uIG1uKCl7QW4mJlYoMTMpfWZ1bmN0aW9uIFFyKCl7cmV0dXJuIGp0PT09bnVsbCYmVigxNSksanR9ZnVuY3Rpb24gaHQoKXtyZXR1cm4genQ9PT1udWxsJiZWKDE2KSx6dH1mdW5jdGlvbiBheCh0LGUsbil7dmFyIHI9ZS5fX3R5cGU7bGV0IGk9dC5fbm9kZXMuZ2V0KHIpO2ZvcihpPT09dm9pZCAwJiZWKDMwLHIpLHQ9bi5nZXQociksdD09PXZvaWQgMCYmKHQ9QXJyYXkuZnJvbShpLnRyYW5zZm9ybXMpLG4uc2V0KHIsdCkpLG49dC5sZW5ndGgscj0wO3I8biYmKHRbcl0oZSksZS5pc0F0dGFjaGVkKCkpO3IrKyk7fWZ1bmN0aW9uIGlPKHQsZSl7ZT1lLl9kaXJ0eUxlYXZlcyx0PXQuX25vZGVNYXA7Zm9yKGxldCBuIG9mIGUpZT10LmdldChuKSxxKGUpJiZlLmlzQXR0YWNoZWQoKSYmZS5pc1NpbXBsZVRleHQoKSYmIWUuaXNVbm1lcmdlYWJsZSgpJiZKUyhlKX1mdW5jdGlvbiBvTyh0LGUpe2xldCBuPWUuX2RpcnR5TGVhdmVzLHI9ZS5fZGlydHlFbGVtZW50czt0PXQuX25vZGVNYXA7bGV0IGk9WmkoKSxvPW5ldyBNYXA7dmFyIGw9bjtsZXQgcz1sLnNpemU7Zm9yKHZhciBhPXIsYz1hLnNpemU7MDxzfHwwPGM7KXtpZigwPHMpe2UuX2RpcnR5TGVhdmVzPW5ldyBTZXQ7Zm9yKGxldCB1IG9mIGwpbD10LmdldCh1KSxxKGwpJiZsLmlzQXR0YWNoZWQoKSYmbC5pc1NpbXBsZVRleHQoKSYmIWwuaXNVbm1lcmdlYWJsZSgpJiZKUyhsKSxsIT09dm9pZCAwJiZsIT09dm9pZCAwJiZsLl9fa2V5IT09aSYmbC5pc0F0dGFjaGVkKCkmJmF4KGUsbCxvKSxuLmFkZCh1KTtpZihsPWUuX2RpcnR5TGVhdmVzLHM9bC5zaXplLDA8cyl7ZGMrKztjb250aW51ZX19ZS5fZGlydHlMZWF2ZXM9bmV3IFNldCxlLl9kaXJ0eUVsZW1lbnRzPW5ldyBNYXA7Zm9yKGxldCB1IG9mIGEpYT11WzBdLGM9dVsxXSwoYT09PSJyb290Inx8YykmJihsPXQuZ2V0KGEpLGwhPT12b2lkIDAmJmwhPT12b2lkIDAmJmwuX19rZXkhPT1pJiZsLmlzQXR0YWNoZWQoKSYmYXgoZSxsLG8pLHIuc2V0KGEsYykpO2w9ZS5fZGlydHlMZWF2ZXMscz1sLnNpemUsYT1lLl9kaXJ0eUVsZW1lbnRzLGM9YS5zaXplLGRjKyt9ZS5fZGlydHlMZWF2ZXM9bixlLl9kaXJ0eUVsZW1lbnRzPXJ9ZnVuY3Rpb24ga3YodCxlKXt2YXIgbj10LnR5cGUscj1lLmdldChuKTtpZihyPT09dm9pZCAwJiZWKDE3LG4pLG49ci5rbGFzcyx0LnR5cGUhPT1uLmdldFR5cGUoKSYmVigxOCxuLm5hbWUpLG49bi5pbXBvcnRKU09OKHQpLHQ9dC5jaGlsZHJlbixVKG4pJiZBcnJheS5pc0FycmF5KHQpKWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBpPWt2KHRbcl0sZSk7bi5hcHBlbmQoaSl9cmV0dXJuIG59ZnVuY3Rpb24gY3godCxlKXtsZXQgbj1qdCxyPUFuLGk9enQ7anQ9dCxBbj0hMCx6dD1udWxsO3RyeXtyZXR1cm4gZSgpfWZpbmFsbHl7anQ9bixBbj1yLHp0PWl9fWZ1bmN0aW9uIFdvKHQsZSl7bGV0IG49dC5fcGVuZGluZ0VkaXRvclN0YXRlLHI9dC5fcm9vdEVsZW1lbnQsaT10Ll9oZWFkbGVzc3x8cj09PW51bGw7aWYobiE9PW51bGwpe3ZhciBvPXQuX2VkaXRvclN0YXRlLGw9by5fc2VsZWN0aW9uLHM9bi5fc2VsZWN0aW9uLGE9dC5fZGlydHlUeXBlIT09MCxjPWp0LHU9QW4sZD16dCxmPXQuX3VwZGF0aW5nLHA9dC5fb2JzZXJ2ZXIsZz1udWxsO2lmKHQuX3BlbmRpbmdFZGl0b3JTdGF0ZT1udWxsLHQuX2VkaXRvclN0YXRlPW4sIWkmJmEmJnAhPT1udWxsKXt6dD10LGp0PW4sQW49ITEsdC5fdXBkYXRpbmc9ITA7dHJ5e2xldCBqZT10Ll9kaXJ0eVR5cGUsVHQ9dC5fZGlydHlFbGVtZW50cyxhdD10Ll9kaXJ0eUxlYXZlcztwLmRpc2Nvbm5lY3QoKTt2YXIgbT1qZSx3PVR0LHY9YXQ7aG49bGk9TnQ9IiIsdUU9bT09PTIsV3U9bnVsbCx0bj10LGFvPXQuX2NvbmZpZyxzYz10Ll9ub2RlcyxMZj10bi5fbGlzdGVuZXJzLm11dGF0aW9uLGhtPXcsbW09dixKbz1vLl9ub2RlTWFwLGNvPW4uX25vZGVNYXAsRXY9bi5fcmVhZE9ubHksZ209bmV3IE1hcCh0Ll9rZXlUb0RPTU1hcCk7bGV0IGFuPW5ldyBNYXA7YWM9YW4saGEoInJvb3QiLG51bGwpLGFjPWdtPWFvPWNvPUpvPW1tPWhtPXNjPXRuPXZvaWQgMCxnPWFufWNhdGNoKGplKXtpZihqZSBpbnN0YW5jZW9mIEVycm9yJiZ0Ll9vbkVycm9yKGplKSxLcCl0aHJvdyBqZTtPRSh0LG51bGwscixuKSxYUyh0KSx0Ll9kaXJ0eVR5cGU9MixLcD0hMCxXbyh0LG8pLEtwPSExO3JldHVybn1maW5hbGx5e3Aub2JzZXJ2ZShyLHN4KSx0Ll91cGRhdGluZz1mLGp0PWMsQW49dSx6dD1kfX1uLl9yZWFkT25seXx8KG4uX3JlYWRPbmx5PSEwKTt2YXIgeD10Ll9kaXJ0eUxlYXZlcyxfPXQuX2RpcnR5RWxlbWVudHMsUz10Ll9ub3JtYWxpemVkTm9kZXMsRT10Ll91cGRhdGVUYWdzLGs9dC5fZGVmZXJyZWQ7YSYmKHQuX2RpcnR5VHlwZT0wLHQuX2Nsb25lTm90TmVlZGVkLmNsZWFyKCksdC5fZGlydHlMZWF2ZXM9bmV3IFNldCx0Ll9kaXJ0eUVsZW1lbnRzPW5ldyBNYXAsdC5fbm9ybWFsaXplZE5vZGVzPW5ldyBTZXQsdC5fdXBkYXRlVGFncz1uZXcgU2V0KTt2YXIgQz10Ll9kZWNvcmF0b3JzLE49dC5fcGVuZGluZ0RlY29yYXRvcnN8fEMsQT1uLl9ub2RlTWFwLFQ7Zm9yKFQgaW4gTilBLmhhcyhUKXx8KE49PT1DJiYoTj1uRSh0KSksZGVsZXRlIE5bVF0pO3ZhciBEPWk/bnVsbDpKcih0Ll93aW5kb3cpO2lmKHQuX2VkaXRhYmxlJiZEIT09bnVsbCYmKGF8fHM9PT1udWxsfHxzLmRpcnR5KSl7enQ9dCxqdD1uO3RyeXtpZihwIT09bnVsbCYmcC5kaXNjb25uZWN0KCksYXx8cz09PW51bGx8fHMuZGlydHkpe2xldCBqZT10Ll9ibG9ja0N1cnNvckVsZW1lbnQ7amUhPT1udWxsJiZwbShqZSx0LHIpO2U6e2xldCBUdD1ELmFuY2hvck5vZGUsYXQ9RC5mb2N1c05vZGUsYW49RC5hbmNob3JPZmZzZXQsYm49RC5mb2N1c09mZnNldCxfdD1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCEoRS5oYXMoImNvbGxhYm9yYXRpb24iKSYmX3QhPT1yfHxfdCE9PW51bGwmJnZ2KF90KSkpaWYoZ2Uocykpe3ZhciBMPXMuYW5jaG9yLEs9cy5mb2N1cyxCPUwua2V5LFo9Sy5rZXksUj1OZCh0LEIpLFA9TmQodCxaKSxiPUwub2Zmc2V0LGo9Sy5vZmZzZXQsej1zLmZvcm1hdCxHPXMuc3R5bGUscmU9cy5pc0NvbGxhcHNlZCgpLGJlPVIseWU9UCxXZT0hMTtpZihMLnR5cGU9PT0idGV4dCIpe2JlPWtkKFIpO2xldCBBdD1MLmdldE5vZGUoKTtXZT1BdC5nZXRGb3JtYXQoKSE9PXp8fEF0LmdldFN0eWxlKCkhPT1HfWVsc2UgZ2UobCkmJmwuYW5jaG9yLnR5cGU9PT0idGV4dCImJihXZT0hMCk7aWYoSy50eXBlPT09InRleHQiJiYoeWU9a2QoUCkpLGJlIT09bnVsbCYmeWUhPT1udWxsKXtpZihyZSYmKGw9PT1udWxsfHxXZXx8Z2UobCkmJihsLmZvcm1hdCE9PXp8fGwuc3R5bGUhPT1HKSkpe3ZhciBGZT1wZXJmb3JtYW5jZS5ub3coKTt5RT1beixHLGIsQixGZV19aWYoYW49PT1iJiZibj09PWomJlR0PT09YmUmJmF0PT09eWUmJihELnR5cGUhPT0iUmFuZ2UifHwhcmUpJiYoX3QhPT1udWxsJiZyLmNvbnRhaW5zKF90KXx8ci5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLEwudHlwZSE9PSJlbGVtZW50IikpYnJlYWsgZTt0cnl7RC5zZXRCYXNlQW5kRXh0ZW50KGJlLGIseWUsail9Y2F0Y2h7fWlmKCFFLmhhcygic2tpcC1zY3JvbGwtaW50by12aWV3IikmJnMuaXNDb2xsYXBzZWQoKSYmciE9PW51bGwmJnI9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXtsZXQgQXQ9cyBpbnN0YW5jZW9mIGRsJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiP2JlLmNoaWxkTm9kZXNbYl18fG51bGw6MDxELnJhbmdlQ291bnQ/RC5nZXRSYW5nZUF0KDApOm51bGw7aWYoQXQhPT1udWxsKXtsZXQgY247aWYoQXQgaW5zdGFuY2VvZiBUZXh0KXtsZXQgZ3Q9ZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtndC5zZWxlY3ROb2RlKEF0KSxjbj1ndC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1lbHNlIGNuPUF0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBNbj1yLm93bmVyRG9jdW1lbnQsZWk9TW4uZGVmYXVsdFZpZXc7aWYoZWkhPT1udWxsKWZvcih2YXJ7dG9wOm5lLGJvdHRvbTpJZX09Y24sJGUsUmUsU2U9cjtTZSE9PW51bGw7KXtsZXQgZ3Q9U2U9PT1Nbi5ib2R5O2lmKGd0KSRlPTAsUmU9QWYodCkuaW5uZXJIZWlnaHQ7ZWxzZXtsZXQgYm89U2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JGU9Ym8udG9wLFJlPWJvLmJvdHRvbX1sZXQgUnI9MDtpZihuZTwkZT9Scj0tKCRlLW5lKTpJZT5SZSYmKFJyPUllLVJlKSxSciE9PTApaWYoZ3QpZWkuc2Nyb2xsQnkoMCxScik7ZWxzZXtsZXQgYm89U2Uuc2Nyb2xsVG9wO1NlLnNjcm9sbFRvcCs9UnI7bGV0IFdzPVNlLnNjcm9sbFRvcC1ibztuZS09V3MsSWUtPVdzfWlmKGd0KWJyZWFrO1NlPVBmKFNlKX19fXdtPSEwfX1lbHNlIGwhPT1udWxsJiZ6Yyh0LFR0LGF0KSYmRC5yZW1vdmVBbGxSYW5nZXMoKX19ZTp7bGV0IGplPXQuX2Jsb2NrQ3Vyc29yRWxlbWVudDtpZihnZShzKSYmcy5pc0NvbGxhcHNlZCgpJiZzLmFuY2hvci50eXBlPT09ImVsZW1lbnQiJiZyLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKXtsZXQgVHQ9cy5hbmNob3IsYXQ9VHQuZ2V0Tm9kZSgpLGFuPVR0Lm9mZnNldCxibj1hdC5nZXRDaGlsZHJlblNpemUoKSxfdD0hMSxBdD1udWxsO2lmKGFuPT09Ym4pe2xldCBjbj1hdC5nZXRDaGlsZEF0SW5kZXgoYW4tMSk7enAoY24pJiYoX3Q9ITApfWVsc2V7bGV0IGNuPWF0LmdldENoaWxkQXRJbmRleChhbik7aWYoenAoY24pKXtsZXQgTW49Y24uZ2V0UHJldmlvdXNTaWJsaW5nKCk7KE1uPT09bnVsbHx8enAoTW4pKSYmKF90PSEwLEF0PXQuZ2V0RWxlbWVudEJ5S2V5KGNuLl9fa2V5KSl9fWlmKF90KXtsZXQgY249dC5nZXRFbGVtZW50QnlLZXkoYXQuX19rZXkpO2lmKGplPT09bnVsbCl7bGV0IE1uPXQuX2NvbmZpZy50aGVtZSxlaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtlaS5jb250ZW50RWRpdGFibGU9ImZhbHNlIixlaS5zZXRBdHRyaWJ1dGUoImRhdGEtbGV4aWNhbC1jdXJzb3IiLCJ0cnVlIik7bGV0IGd0PU1uLmJsb2NrQ3Vyc29yO2lmKGd0IT09dm9pZCAwKXtpZih0eXBlb2YgZ3Q9PSJzdHJpbmciKXtsZXQgUnI9Z3Quc3BsaXQoIiAiKTtndD1Nbi5ibG9ja0N1cnNvcj1Scn1ndCE9PXZvaWQgMCYmZWkuY2xhc3NMaXN0LmFkZCguLi5ndCl9dC5fYmxvY2tDdXJzb3JFbGVtZW50PWplPWVpfXIuc3R5bGUuY2FyZXRDb2xvcj0idHJhbnNwYXJlbnQiLEF0PT09bnVsbD9jbi5hcHBlbmRDaGlsZChqZSk6Y24uaW5zZXJ0QmVmb3JlKGplLEF0KTticmVhayBlfX1qZSE9PW51bGwmJnBtKGplLHQscil9cCE9PW51bGwmJnAub2JzZXJ2ZShyLHN4KX1maW5hbGx5e3p0PWQsanQ9Y319aWYoZyE9PW51bGwpe3ZhciBMZT1nO2xldCBqZT1BcnJheS5mcm9tKHQuX2xpc3RlbmVycy5tdXRhdGlvbiksVHQ9amUubGVuZ3RoO2ZvcihsZXQgYXQ9MDthdDxUdDthdCsrKXtsZXRbYW4sYm5dPWplW2F0XSxfdD1MZS5nZXQoYm4pO190IT09dm9pZCAwJiZhbihfdCx7ZGlydHlMZWF2ZXM6eCxwcmV2RWRpdG9yU3RhdGU6byx1cGRhdGVUYWdzOkV9KX19Z2Uocyl8fHM9PT1udWxsfHxsIT09bnVsbCYmbC5pcyhzKXx8dC5kaXNwYXRjaENvbW1hbmQoTmYsdm9pZCAwKTt2YXIgSmU9dC5fcGVuZGluZ0RlY29yYXRvcnM7SmUhPT1udWxsJiYodC5fZGVjb3JhdG9ycz1KZSx0Ll9wZW5kaW5nRGVjb3JhdG9ycz1udWxsLEFhKCJkZWNvcmF0b3IiLHQsITAsSmUpKTt2YXIgV3Q9SzAoZXx8byksQ249SzAobik7aWYoV3QhPT1DbiYmQWEoInRleHRjb250ZW50Iix0LCEwLENuKSxBYSgidXBkYXRlIix0LCEwLHtkaXJ0eUVsZW1lbnRzOl8sZGlydHlMZWF2ZXM6eCxlZGl0b3JTdGF0ZTpuLG5vcm1hbGl6ZWROb2RlczpTLHByZXZFZGl0b3JTdGF0ZTplfHxvLHRhZ3M6RX0pLHQuX2RlZmVycmVkPVtdLGsubGVuZ3RoIT09MCl7bGV0IGplPXQuX3VwZGF0aW5nO3QuX3VwZGF0aW5nPSEwO3RyeXtmb3IobGV0IFR0PTA7VHQ8ay5sZW5ndGg7VHQrKylrW1R0XSgpfWZpbmFsbHl7dC5fdXBkYXRpbmc9amV9fXZhciB1cj10Ll91cGRhdGVzO2lmKHVyLmxlbmd0aCE9PTApe2xldCBqZT11ci5zaGlmdCgpO2lmKGplKXtsZXRbVHQsYXRdPWplO1RFKHQsVHQsYXQpfX19fWZ1bmN0aW9uIEFhKHQsZSxuLC4uLnIpe2xldCBpPWUuX3VwZGF0aW5nO2UuX3VwZGF0aW5nPW47dHJ5e2xldCBvPUFycmF5LmZyb20oZS5fbGlzdGVuZXJzW3RdKTtmb3IodD0wO3Q8by5sZW5ndGg7dCsrKW9bdF0uYXBwbHkobnVsbCxyKX1maW5hbGx5e2UuX3VwZGF0aW5nPWl9fWZ1bmN0aW9uIEoodCxlLG4pe2lmKHQuX3VwZGF0aW5nPT09ITF8fHp0IT09dCl7bGV0IG89ITE7cmV0dXJuIHQudXBkYXRlKCgpPT57bz1KKHQsZSxuKX0pLG99bGV0IHI9eHYodCk7Zm9yKGxldCBvPTQ7MDw9bztvLS0pZm9yKGxldCBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBpPXJbbF0uX2NvbW1hbmRzLmdldChlKTtpZihpIT09dm9pZCAwJiYoaT1pW29dLGkhPT12b2lkIDApKXtpPUFycmF5LmZyb20oaSk7bGV0IHM9aS5sZW5ndGg7Zm9yKGxldCBhPTA7YTxzO2ErKylpZihpW2FdKG4sdCk9PT0hMClyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gdXgodCxlKXtsZXQgbj10Ll91cGRhdGVzO2ZvcihlPWV8fCExO24ubGVuZ3RoIT09MDspe3ZhciByPW4uc2hpZnQoKTtpZihyKXtsZXRbaSxvXT1yLGw7byE9PXZvaWQgMCYmKHI9by5vblVwZGF0ZSxsPW8udGFnLG8uc2tpcFRyYW5zZm9ybXMmJihlPSEwKSxyJiZ0Ll9kZWZlcnJlZC5wdXNoKHIpLGwmJnQuX3VwZGF0ZVRhZ3MuYWRkKGwpKSxpKCl9fXJldHVybiBlfWZ1bmN0aW9uIFRFKHQsZSxuKXtsZXQgcj10Ll91cGRhdGVUYWdzO3ZhciBpLG89aT0hMTtpZihuIT09dm9pZCAwKXt2YXIgbD1uLm9uVXBkYXRlO2k9bi50YWcsaSE9bnVsbCYmci5hZGQoaSksaT1uLnNraXBUcmFuc2Zvcm1zfHwhMSxvPW4uZGlzY3JldGV8fCExfWwmJnQuX2RlZmVycmVkLnB1c2gobCksbj10Ll9lZGl0b3JTdGF0ZSxsPXQuX3BlbmRpbmdFZGl0b3JTdGF0ZTtsZXQgcz0hMTsobD09PW51bGx8fGwuX3JlYWRPbmx5KSYmKGw9dC5fcGVuZGluZ0VkaXRvclN0YXRlPW5ldyB6ZihuZXcgTWFwKChsfHxuKS5fbm9kZU1hcCkpLHM9ITApLGwuX2ZsdXNoU3luYz1vLG89anQ7bGV0IGE9QW4sYz16dCx1PXQuX3VwZGF0aW5nO2p0PWwsQW49ITEsdC5fdXBkYXRpbmc9ITAsenQ9dDt0cnl7cyYmKHQuX2hlYWRsZXNzP24uX3NlbGVjdGlvbiE9bnVsbCYmKGwuX3NlbGVjdGlvbj1uLl9zZWxlY3Rpb24uY2xvbmUoKSk6bC5fc2VsZWN0aW9uPW5PKHQpKTtsZXQgZD10Ll9jb21wb3NpdGlvbktleTtlKCksaT11eCh0LGkpLHJPKGwsdCksdC5fZGlydHlUeXBlIT09MCYmKGk/aU8obCx0KTpvTyhsLHQpLHV4KHQpLEZSKG4sbCx0Ll9kaXJ0eUxlYXZlcyx0Ll9kaXJ0eUVsZW1lbnRzKSksZCE9PXQuX2NvbXBvc2l0aW9uS2V5JiYobC5fZmx1c2hTeW5jPSEwKTtsZXQgZj1sLl9zZWxlY3Rpb247aWYoZ2UoZikpe2xldCBwPWwuX25vZGVNYXAsZz1mLmZvY3VzLmtleTtwLmdldChmLmFuY2hvci5rZXkpIT09dm9pZCAwJiZwLmdldChnKSE9PXZvaWQgMHx8VigxOSl9ZWxzZSBPcyhmKSYmZi5fbm9kZXMuc2l6ZT09PTAmJihsLl9zZWxlY3Rpb249bnVsbCl9Y2F0Y2goZCl7ZCBpbnN0YW5jZW9mIEVycm9yJiZ0Ll9vbkVycm9yKGQpLHQuX3BlbmRpbmdFZGl0b3JTdGF0ZT1uLHQuX2RpcnR5VHlwZT0yLHQuX2Nsb25lTm90TmVlZGVkLmNsZWFyKCksdC5fZGlydHlMZWF2ZXM9bmV3IFNldCx0Ll9kaXJ0eUVsZW1lbnRzLmNsZWFyKCksV28odCk7cmV0dXJufWZpbmFsbHl7anQ9byxBbj1hLHp0PWMsdC5fdXBkYXRpbmc9dSxkYz0wfXQuX2RpcnR5VHlwZSE9PTB8fGxPKGwsdCk/bC5fZmx1c2hTeW5jPyhsLl9mbHVzaFN5bmM9ITEsV28odCkpOnMmJkRSKCgpPT57V28odCl9KToobC5fZmx1c2hTeW5jPSExLHMmJihyLmNsZWFyKCksdC5fZGVmZXJyZWQ9W10sdC5fcGVuZGluZ0VkaXRvclN0YXRlPW51bGwpKX1mdW5jdGlvbiBWbih0LGUsbil7dC5fdXBkYXRpbmc/dC5fdXBkYXRlcy5wdXNoKFtlLG5dKTpURSh0LGUsbil9Y2xhc3MgTkUgZXh0ZW5kcyBVY3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1kZWNvcmF0ZSgpe1YoNDcpfWlzSXNvbGF0ZWQoKXtyZXR1cm4hMX1pc0lubGluZSgpe3JldHVybiEwfWlzS2V5Ym9hcmRTZWxlY3RhYmxlKCl7cmV0dXJuITB9fWZ1bmN0aW9uIHR0KHQpe3JldHVybiB0IGluc3RhbmNlb2YgTkV9Y2xhc3MgZmwgZXh0ZW5kcyBVY3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLl9fbGFzdD10aGlzLl9fZmlyc3Q9bnVsbCx0aGlzLl9faW5kZW50PXRoaXMuX19mb3JtYXQ9dGhpcy5fX3NpemU9MCx0aGlzLl9fZGlyPW51bGx9Z2V0Rm9ybWF0KCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19mb3JtYXR9Z2V0Rm9ybWF0VHlwZSgpe2xldCBlPXRoaXMuZ2V0Rm9ybWF0KCk7cmV0dXJuIFJSW2VdfHwiIn1nZXRJbmRlbnQoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX2luZGVudH1nZXRDaGlsZHJlbigpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4pLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldENoaWxkcmVuS2V5cygpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspZS5wdXNoKG4uX19rZXkpLG49bi5nZXROZXh0U2libGluZygpO3JldHVybiBlfWdldENoaWxkcmVuU2l6ZSgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fc2l6ZX1pc0VtcHR5KCl7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wfWlzRGlydHkoKXtsZXQgZT1odCgpLl9kaXJ0eUVsZW1lbnRzO3JldHVybiBlIT09bnVsbCYmZS5oYXModGhpcy5fX2tleSl9aXNMYXN0Q2hpbGQoKXtsZXQgZT10aGlzLmdldExhdGVzdCgpLG49dGhpcy5nZXRQYXJlbnRPclRocm93KCkuZ2V0TGFzdENoaWxkKCk7cmV0dXJuIG4hPT1udWxsJiZuLmlzKGUpfWdldEFsbFRleHROb2Rlcygpe2xldCBlPVtdLG49dGhpcy5nZXRGaXJzdENoaWxkKCk7Zm9yKDtuIT09bnVsbDspe2lmKHEobikmJmUucHVzaChuKSxVKG4pKXtsZXQgcj1uLmdldEFsbFRleHROb2RlcygpO2UucHVzaCguLi5yKX1uPW4uZ2V0TmV4dFNpYmxpbmcoKX1yZXR1cm4gZX1nZXRGaXJzdERlc2NlbmRhbnQoKXtsZXQgZT10aGlzLmdldEZpcnN0Q2hpbGQoKTtmb3IoO2UhPT1udWxsOyl7aWYoVShlKSl7bGV0IG49ZS5nZXRGaXJzdENoaWxkKCk7aWYobiE9PW51bGwpe2U9bjtjb250aW51ZX19YnJlYWt9cmV0dXJuIGV9Z2V0TGFzdERlc2NlbmRhbnQoKXtsZXQgZT10aGlzLmdldExhc3RDaGlsZCgpO2Zvcig7ZSE9PW51bGw7KXtpZihVKGUpKXtsZXQgbj1lLmdldExhc3RDaGlsZCgpO2lmKG4hPT1udWxsKXtlPW47Y29udGludWV9fWJyZWFrfXJldHVybiBlfWdldERlc2NlbmRhbnRCeUluZGV4KGUpe2xldCBuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO3JldHVybiBlPj1yPyhlPW5bci0xXSxVKGUpJiZlLmdldExhc3REZXNjZW5kYW50KCl8fGV8fG51bGwpOihlPW5bZV0sVShlKSYmZS5nZXRGaXJzdERlc2NlbmRhbnQoKXx8ZXx8bnVsbCl9Z2V0Rmlyc3RDaGlsZCgpe2xldCBlPXRoaXMuZ2V0TGF0ZXN0KCkuX19maXJzdDtyZXR1cm4gZT09PW51bGw/bnVsbDpJdChlKX1nZXRGaXJzdENoaWxkT3JUaHJvdygpe2xldCBlPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpO3JldHVybiBlPT09bnVsbCYmVig0NSx0aGlzLl9fa2V5KSxlfWdldExhc3RDaGlsZCgpe2xldCBlPXRoaXMuZ2V0TGF0ZXN0KCkuX19sYXN0O3JldHVybiBlPT09bnVsbD9udWxsOkl0KGUpfWdldExhc3RDaGlsZE9yVGhyb3coKXtsZXQgZT10aGlzLmdldExhc3RDaGlsZCgpO3JldHVybiBlPT09bnVsbCYmVig5Nix0aGlzLl9fa2V5KSxlfWdldENoaWxkQXRJbmRleChlKXt2YXIgbj10aGlzLmdldENoaWxkcmVuU2l6ZSgpO2xldCByO2lmKGU8bi8yKXtmb3Iocj10aGlzLmdldEZpcnN0Q2hpbGQoKSxuPTA7ciE9PW51bGwmJm48PWU7KXtpZihuPT09ZSlyZXR1cm4gcjtyPXIuZ2V0TmV4dFNpYmxpbmcoKSxuKyt9cmV0dXJuIG51bGx9Zm9yKHI9dGhpcy5nZXRMYXN0Q2hpbGQoKSwtLW47ciE9PW51bGwmJm4+PWU7KXtpZihuPT09ZSlyZXR1cm4gcjtyPXIuZ2V0UHJldmlvdXNTaWJsaW5nKCksbi0tfXJldHVybiBudWxsfWdldFRleHRDb250ZW50KCl7bGV0IGU9IiIsbj10aGlzLmdldENoaWxkcmVuKCkscj1uLmxlbmd0aDtmb3IobGV0IGk9MDtpPHI7aSsrKXtsZXQgbz1uW2ldO2UrPW8uZ2V0VGV4dENvbnRlbnQoKSxVKG8pJiZpIT09ci0xJiYhby5pc0lubGluZSgpJiYoZSs9YAoKYCl9cmV0dXJuIGV9Z2V0VGV4dENvbnRlbnRTaXplKCl7bGV0IGU9MCxuPXRoaXMuZ2V0Q2hpbGRyZW4oKSxyPW4ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8cjtpKyspe2xldCBvPW5baV07ZSs9by5nZXRUZXh0Q29udGVudFNpemUoKSxVKG8pJiZpIT09ci0xJiYhby5pc0lubGluZSgpJiYoZSs9Mil9cmV0dXJuIGV9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19kaXJ9aGFzRm9ybWF0KGUpe3JldHVybiBlIT09IiI/KGU9VTBbZV0sKHRoaXMuZ2V0Rm9ybWF0KCkmZSkhPT0wKTohMX1zZWxlY3QoZSxuKXttbigpO2xldCByPXJ0KCksaT1lLG89bjt2YXIgbD10aGlzLmdldENoaWxkcmVuU2l6ZSgpO2lmKCF0aGlzLmNhbkJlRW1wdHkoKSl7aWYoZT09PTAmJm49PT0wKXtpZihlPXRoaXMuZ2V0Rmlyc3RDaGlsZCgpLHEoZSl8fFUoZSkpcmV0dXJuIGUuc2VsZWN0KDAsMCl9ZWxzZSBpZighKGUhPT12b2lkIDAmJmUhPT1sfHxuIT09dm9pZCAwJiZuIT09bCkmJihlPXRoaXMuZ2V0TGFzdENoaWxkKCkscShlKXx8VShlKSkpcmV0dXJuIGUuc2VsZWN0KCl9aWYoaT09PXZvaWQgMCYmKGk9bCksbz09PXZvaWQgMCYmKG89bCksbD10aGlzLl9fa2V5LGdlKHIpKXIuYW5jaG9yLnNldChsLGksImVsZW1lbnQiKSxyLmZvY3VzLnNldChsLG8sImVsZW1lbnQiKSxyLmRpcnR5PSEwO2Vsc2UgcmV0dXJuIGJFKGwsaSxsLG8sImVsZW1lbnQiLCJlbGVtZW50Iik7cmV0dXJuIHJ9c2VsZWN0U3RhcnQoKXtsZXQgZT10aGlzLmdldEZpcnN0RGVzY2VuZGFudCgpO3JldHVybiBVKGUpfHxxKGUpP2Uuc2VsZWN0KDAsMCk6ZSE9PW51bGw/ZS5zZWxlY3RQcmV2aW91cygpOnRoaXMuc2VsZWN0KDAsMCl9c2VsZWN0RW5kKCl7bGV0IGU9dGhpcy5nZXRMYXN0RGVzY2VuZGFudCgpO3JldHVybiBVKGUpfHxxKGUpP2Uuc2VsZWN0KCk6ZSE9PW51bGw/ZS5zZWxlY3ROZXh0KCk6dGhpcy5zZWxlY3QoKX1jbGVhcigpe2xldCBlPXRoaXMuZ2V0V3JpdGFibGUoKTtyZXR1cm4gdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobj0+bi5yZW1vdmUoKSksZX1hcHBlbmQoLi4uZSl7cmV0dXJuIHRoaXMuc3BsaWNlKHRoaXMuZ2V0Q2hpbGRyZW5TaXplKCksMCxlKX1zZXREaXJlY3Rpb24oZSl7bGV0IG49dGhpcy5nZXRXcml0YWJsZSgpO3JldHVybiBuLl9fZGlyPWUsbn1zZXRGb3JtYXQoZSl7cmV0dXJuIHRoaXMuZ2V0V3JpdGFibGUoKS5fX2Zvcm1hdD1lIT09IiI/VTBbZV06MCx0aGlzfXNldEluZGVudChlKXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9faW5kZW50PWUsdGhpc31zcGxpY2UoZSxuLHIpe2xldCBpPXIubGVuZ3RoLG89dGhpcy5nZXRDaGlsZHJlblNpemUoKSxsPXRoaXMuZ2V0V3JpdGFibGUoKSxzPWwuX19rZXk7dmFyIGE9W10sYz1bXTtsZXQgdT10aGlzLmdldENoaWxkQXRJbmRleChlK24pLGQ9bnVsbCxmPW8tbitpO2lmKGUhPT0wKWlmKGU9PT1vKWQ9dGhpcy5nZXRMYXN0Q2hpbGQoKTtlbHNle3ZhciBwPXRoaXMuZ2V0Q2hpbGRBdEluZGV4KGUpO3AhPT1udWxsJiYoZD1wLmdldFByZXZpb3VzU2libGluZygpKX1pZigwPG4pe3ZhciBnPWQ9PT1udWxsP3RoaXMuZ2V0Rmlyc3RDaGlsZCgpOmQuZ2V0TmV4dFNpYmxpbmcoKTtmb3IocD0wO3A8bjtwKyspe2c9PT1udWxsJiZWKDEwMCk7dmFyIG09Zy5nZXROZXh0U2libGluZygpLHc9Zy5fX2tleTtnPWcuZ2V0V3JpdGFibGUoKSxVbyhnKSxjLnB1c2godyksZz1tfX1mb3IocD1kLG09MDttPGk7bSsrKXt3PXJbbV0scCE9PW51bGwmJncuaXMocCkmJihkPXA9cC5nZXRQcmV2aW91c1NpYmxpbmcoKSksZz13LmdldFdyaXRhYmxlKCksZy5fX3BhcmVudD09PXMmJmYtLSxVbyhnKTtsZXQgdj13Ll9fa2V5O3A9PT1udWxsPyhsLl9fZmlyc3Q9dixnLl9fcHJldj1udWxsKToocD1wLmdldFdyaXRhYmxlKCkscC5fX25leHQ9dixnLl9fcHJldj1wLl9fa2V5KSx3Ll9fa2V5PT09cyYmVig3NiksZy5fX3BhcmVudD1zLGEucHVzaCh2KSxwPXd9aWYoZStuPT09bz9wIT09bnVsbCYmKHAuZ2V0V3JpdGFibGUoKS5fX25leHQ9bnVsbCxsLl9fbGFzdD1wLl9fa2V5KTp1IT09bnVsbCYmKGU9dS5nZXRXcml0YWJsZSgpLHAhPT1udWxsPyhuPXAuZ2V0V3JpdGFibGUoKSxlLl9fcHJldj1wLl9fa2V5LG4uX19uZXh0PXUuX19rZXkpOmUuX19wcmV2PW51bGwpLGwuX19zaXplPWYsYy5sZW5ndGgmJihlPXJ0KCksZ2UoZSkpKXtjPW5ldyBTZXQoYyksYT1uZXcgU2V0KGEpO2xldHthbmNob3I6dixmb2N1czp4fT1lO2R4KHYsYyxhKSYmTWQodix2LmdldE5vZGUoKSx0aGlzLGQsdSksZHgoeCxjLGEpJiZNZCh4LHguZ2V0Tm9kZSgpLHRoaXMsZCx1KSxmIT09MHx8dGhpcy5jYW5CZUVtcHR5KCl8fF9yKHRoaXMpfHx0aGlzLnJlbW92ZSgpfXJldHVybiBsfWV4cG9ydEpTT04oKXtyZXR1cm57Y2hpbGRyZW46W10sZGlyZWN0aW9uOnRoaXMuZ2V0RGlyZWN0aW9uKCksZm9ybWF0OnRoaXMuZ2V0Rm9ybWF0VHlwZSgpLGluZGVudDp0aGlzLmdldEluZGVudCgpLHR5cGU6ImVsZW1lbnQiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIoKXtyZXR1cm4gbnVsbH1jYW5JbmRlbnQoKXtyZXR1cm4hMH1jb2xsYXBzZUF0U3RhcnQoKXtyZXR1cm4hMX1leGNsdWRlRnJvbUNvcHkoKXtyZXR1cm4hMX1jYW5FeHRyYWN0Q29udGVudHMoKXtyZXR1cm4hMH1jYW5SZXBsYWNlV2l0aCgpe3JldHVybiEwfWNhbkluc2VydEFmdGVyKCl7cmV0dXJuITB9Y2FuQmVFbXB0eSgpe3JldHVybiEwfWNhbkluc2VydFRleHRCZWZvcmUoKXtyZXR1cm4hMH1jYW5JbnNlcnRUZXh0QWZ0ZXIoKXtyZXR1cm4hMH1pc0lubGluZSgpe3JldHVybiExfWlzU2hhZG93Um9vdCgpe3JldHVybiExfWNhbk1lcmdlV2l0aCgpe3JldHVybiExfWV4dHJhY3RXaXRoQ2hpbGQoKXtyZXR1cm4hMX19ZnVuY3Rpb24gVSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGZsfWZ1bmN0aW9uIGR4KHQsZSxuKXtmb3IodD10LmdldE5vZGUoKTt0Oyl7bGV0IHI9dC5fX2tleTtpZihlLmhhcyhyKSYmIW4uaGFzKHIpKXJldHVybiEwO3Q9dC5nZXRQYXJlbnQoKX1yZXR1cm4hMX1jbGFzcyBNcyBleHRlbmRzIGZse3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInJvb3QifXN0YXRpYyBjbG9uZSgpe3JldHVybiBuZXcgTXN9Y29uc3RydWN0b3IoKXtzdXBlcigicm9vdCIpLHRoaXMuX19jYWNoZWRUZXh0PW51bGx9Z2V0VG9wTGV2ZWxFbGVtZW50T3JUaHJvdygpe1YoNTEpfWdldFRleHRDb250ZW50KCl7bGV0IGU9dGhpcy5fX2NhY2hlZFRleHQ7cmV0dXJuIUFzKCkmJmh0KCkuX2RpcnR5VHlwZSE9PTB8fGU9PT1udWxsP3N1cGVyLmdldFRleHRDb250ZW50KCk6ZX1yZW1vdmUoKXtWKDUyKX1yZXBsYWNlKCl7Vig1Myl9aW5zZXJ0QmVmb3JlKCl7Vig1NCl9aW5zZXJ0QWZ0ZXIoKXtWKDU1KX11cGRhdGVET00oKXtyZXR1cm4hMX1hcHBlbmQoLi4uZSl7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2xldCByPWVbbl07VShyKXx8dHQocil8fFYoNTYpfXJldHVybiBzdXBlci5hcHBlbmQoLi4uZSl9c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49WHIoKTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1leHBvcnRKU09OKCl7cmV0dXJue2NoaWxkcmVuOltdLGRpcmVjdGlvbjp0aGlzLmdldERpcmVjdGlvbigpLGZvcm1hdDp0aGlzLmdldEZvcm1hdFR5cGUoKSxpbmRlbnQ6dGhpcy5nZXRJbmRlbnQoKSx0eXBlOiJyb290Iix2ZXJzaW9uOjF9fWNvbGxhcHNlQXRTdGFydCgpe3JldHVybiEwfX1mdW5jdGlvbiB2bih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE1zfWZ1bmN0aW9uIGxPKHQsZSl7aWYoZT1lLmdldEVkaXRvclN0YXRlKCkuX3NlbGVjdGlvbix0PXQuX3NlbGVjdGlvbix0IT09bnVsbCl7aWYodC5kaXJ0eXx8IXQuaXMoZSkpcmV0dXJuITB9ZWxzZSBpZihlIT09bnVsbClyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiAkdigpe3JldHVybiBuZXcgemYobmV3IE1hcChbWyJyb290IixuZXcgTXNdXSkpfWZ1bmN0aW9uIFJFKHQpe2xldCBlPXQuZXhwb3J0SlNPTigpO3ZhciBuPXQuY29uc3RydWN0b3I7ZS50eXBlIT09bi5nZXRUeXBlKCkmJlYoMTMwLG4ubmFtZSk7bGV0IHI9ZS5jaGlsZHJlbjtpZihVKHQpKWZvcihBcnJheS5pc0FycmF5KHIpfHxWKDU5LG4ubmFtZSksdD10LmdldENoaWxkcmVuKCksbj0wO248dC5sZW5ndGg7bisrKXtsZXQgaT1SRSh0W25dKTtyLnB1c2goaSl9cmV0dXJuIGV9Y2xhc3MgemZ7Y29uc3RydWN0b3IoZSxuKXt0aGlzLl9ub2RlTWFwPWUsdGhpcy5fc2VsZWN0aW9uPW58fG51bGwsdGhpcy5fcmVhZE9ubHk9dGhpcy5fZmx1c2hTeW5jPSExfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fbm9kZU1hcC5zaXplPT09MSYmdGhpcy5fc2VsZWN0aW9uPT09bnVsbH1yZWFkKGUpe3JldHVybiBjeCh0aGlzLGUpfWNsb25lKGUpe3JldHVybiBlPW5ldyB6Zih0aGlzLl9ub2RlTWFwLGU9PT12b2lkIDA/dGhpcy5fc2VsZWN0aW9uOmUpLGUuX3JlYWRPbmx5PSEwLGV9dG9KU09OKCl7cmV0dXJuIGN4KHRoaXMsKCk9Pih7cm9vdDpSRShYcigpKX0pKX19Y2xhc3MgTHMgZXh0ZW5kcyBmbHtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJwYXJhZ3JhcGgifXN0YXRpYyBjbG9uZShlKXtyZXR1cm4gbmV3IExzKGUuX19rZXkpfWNyZWF0ZURPTShlKXtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7cmV0dXJuIGU9UmEoZS50aGVtZSwicGFyYWdyYXBoIiksZSE9PXZvaWQgMCYmbi5jbGFzc0xpc3QuYWRkKC4uLmUpLG59dXBkYXRlRE9NKCl7cmV0dXJuITF9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntwOigpPT4oe2NvbnZlcnNpb246c08scHJpb3JpdHk6MH0pfX1leHBvcnRET00oZSl7aWYoe2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUmJk1mKGUpKXt0aGlzLmlzRW1wdHkoKSYmZS5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7dmFyIG49dGhpcy5nZXRGb3JtYXRUeXBlKCk7ZS5zdHlsZS50ZXh0QWxpZ249biwobj10aGlzLmdldERpcmVjdGlvbigpKSYmKGUuZGlyPW4pLG49dGhpcy5nZXRJbmRlbnQoKSwwPG4mJihlLnN0eWxlLnRleHRJbmRlbnQ9YCR7MjAqbn1weGApfXJldHVybntlbGVtZW50OmV9fXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPVFvKCk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldEluZGVudChlLmluZGVudCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToicGFyYWdyYXBoIix2ZXJzaW9uOjF9fWluc2VydE5ld0FmdGVyKGUsbil7ZT1RbygpO2xldCByPXRoaXMuZ2V0RGlyZWN0aW9uKCk7cmV0dXJuIGUuc2V0RGlyZWN0aW9uKHIpLHRoaXMuaW5zZXJ0QWZ0ZXIoZSxuKSxlfWNvbGxhcHNlQXRTdGFydCgpe2xldCBlPXRoaXMuZ2V0Q2hpbGRyZW4oKTtpZihlLmxlbmd0aD09PTB8fHEoZVswXSkmJmVbMF0uZ2V0VGV4dENvbnRlbnQoKS50cmltKCk9PT0iIil7aWYodGhpcy5nZXROZXh0U2libGluZygpIT09bnVsbClyZXR1cm4gdGhpcy5zZWxlY3ROZXh0KCksdGhpcy5yZW1vdmUoKSwhMDtpZih0aGlzLmdldFByZXZpb3VzU2libGluZygpIT09bnVsbClyZXR1cm4gdGhpcy5zZWxlY3RQcmV2aW91cygpLHRoaXMucmVtb3ZlKCksITB9cmV0dXJuITF9fWZ1bmN0aW9uIHNPKHQpe2xldCBlPVFvKCk7cmV0dXJuIHQuc3R5bGUmJihlLnNldEZvcm1hdCh0LnN0eWxlLnRleHRBbGlnbiksdD1wYXJzZUludCh0LnN0eWxlLnRleHRJbmRlbnQsMTApLzIwLDA8dCYmZS5zZXRJbmRlbnQodCkpLHtub2RlOmV9fWZ1bmN0aW9uIFFvKCl7cmV0dXJuIEJjKG5ldyBMcyl9ZnVuY3Rpb24gT0UodCxlLG4scil7bGV0IGk9dC5fa2V5VG9ET01NYXA7aS5jbGVhcigpLHQuX2VkaXRvclN0YXRlPSR2KCksdC5fcGVuZGluZ0VkaXRvclN0YXRlPXIsdC5fY29tcG9zaXRpb25LZXk9bnVsbCx0Ll9kaXJ0eVR5cGU9MCx0Ll9jbG9uZU5vdE5lZWRlZC5jbGVhcigpLHQuX2RpcnR5TGVhdmVzPW5ldyBTZXQsdC5fZGlydHlFbGVtZW50cy5jbGVhcigpLHQuX25vcm1hbGl6ZWROb2Rlcz1uZXcgU2V0LHQuX3VwZGF0ZVRhZ3M9bmV3IFNldCx0Ll91cGRhdGVzPVtdLHQuX2Jsb2NrQ3Vyc29yRWxlbWVudD1udWxsLHI9dC5fb2JzZXJ2ZXIsciE9PW51bGwmJihyLmRpc2Nvbm5lY3QoKSx0Ll9vYnNlcnZlcj1udWxsKSxlIT09bnVsbCYmKGUudGV4dENvbnRlbnQ9IiIpLG4hPT1udWxsJiYobi50ZXh0Q29udGVudD0iIixpLnNldCgicm9vdCIsbikpfWZ1bmN0aW9uIGFPKHQpe2xldCBlPW5ldyBNYXAsbj1uZXcgU2V0O3JldHVybiB0LmZvckVhY2gocj0+e2lmKHI9ci5rbGFzcy5pbXBvcnRET00hPW51bGw/ci5rbGFzcy5pbXBvcnRET00uYmluZChyLmtsYXNzKTpudWxsLHIhPW51bGwmJiFuLmhhcyhyKSl7bi5hZGQocik7dmFyIGk9cigpO2khPT1udWxsJiZPYmplY3Qua2V5cyhpKS5mb3JFYWNoKG89PntsZXQgbD1lLmdldChvKTtsPT09dm9pZCAwJiYobD1bXSxlLnNldChvLGwpKSxsLnB1c2goaVtvXSl9KX19KSxlfWNsYXNzIGNPe2NvbnN0cnVjdG9yKGUsbixyLGksbyxsLHMpe3RoaXMuX3BhcmVudEVkaXRvcj1uLHRoaXMuX3Jvb3RFbGVtZW50PW51bGwsdGhpcy5fZWRpdG9yU3RhdGU9ZSx0aGlzLl9jb21wb3NpdGlvbktleT10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCx0aGlzLl9kZWZlcnJlZD1bXSx0aGlzLl9rZXlUb0RPTU1hcD1uZXcgTWFwLHRoaXMuX3VwZGF0ZXM9W10sdGhpcy5fdXBkYXRpbmc9ITEsdGhpcy5fbGlzdGVuZXJzPXtkZWNvcmF0b3I6bmV3IFNldCxlZGl0YWJsZTpuZXcgU2V0LG11dGF0aW9uOm5ldyBNYXAscm9vdDpuZXcgU2V0LHRleHRjb250ZW50Om5ldyBTZXQsdXBkYXRlOm5ldyBTZXR9LHRoaXMuX2NvbW1hbmRzPW5ldyBNYXAsdGhpcy5fY29uZmlnPWksdGhpcy5fbm9kZXM9cix0aGlzLl9kZWNvcmF0b3JzPXt9LHRoaXMuX3BlbmRpbmdEZWNvcmF0b3JzPW51bGwsdGhpcy5fZGlydHlUeXBlPTAsdGhpcy5fY2xvbmVOb3ROZWVkZWQ9bmV3IFNldCx0aGlzLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LHRoaXMuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCx0aGlzLl9ub3JtYWxpemVkTm9kZXM9bmV3IFNldCx0aGlzLl91cGRhdGVUYWdzPW5ldyBTZXQsdGhpcy5fb2JzZXJ2ZXI9bnVsbCx0aGlzLl9rZXk9aUUoKSx0aGlzLl9vbkVycm9yPW8sdGhpcy5faHRtbENvbnZlcnNpb25zPWwsdGhpcy5fZWRpdGFibGU9cyx0aGlzLl9oZWFkbGVzcz1uIT09bnVsbCYmbi5faGVhZGxlc3MsdGhpcy5fYmxvY2tDdXJzb3JFbGVtZW50PXRoaXMuX3dpbmRvdz1udWxsfWlzQ29tcG9zaW5nKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2l0aW9uS2V5IT1udWxsfXJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoZSl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLnVwZGF0ZTtyZXR1cm4gbi5hZGQoZSksKCk9PntuLmRlbGV0ZShlKX19cmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKGUpe2xldCBuPXRoaXMuX2xpc3RlbmVycy5lZGl0YWJsZTtyZXR1cm4gbi5hZGQoZSksKCk9PntuLmRlbGV0ZShlKX19cmVnaXN0ZXJEZWNvcmF0b3JMaXN0ZW5lcihlKXtsZXQgbj10aGlzLl9saXN0ZW5lcnMuZGVjb3JhdG9yO3JldHVybiBuLmFkZChlKSwoKT0+e24uZGVsZXRlKGUpfX1yZWdpc3RlclRleHRDb250ZW50TGlzdGVuZXIoZSl7bGV0IG49dGhpcy5fbGlzdGVuZXJzLnRleHRjb250ZW50O3JldHVybiBuLmFkZChlKSwoKT0+e24uZGVsZXRlKGUpfX1yZWdpc3RlclJvb3RMaXN0ZW5lcihlKXtsZXQgbj10aGlzLl9saXN0ZW5lcnMucm9vdDtyZXR1cm4gZSh0aGlzLl9yb290RWxlbWVudCxudWxsKSxuLmFkZChlKSwoKT0+e2UobnVsbCx0aGlzLl9yb290RWxlbWVudCksbi5kZWxldGUoZSl9fXJlZ2lzdGVyQ29tbWFuZChlLG4scil7cj09PXZvaWQgMCYmVigzNSk7bGV0IGk9dGhpcy5fY29tbWFuZHM7aS5oYXMoZSl8fGkuc2V0KGUsW25ldyBTZXQsbmV3IFNldCxuZXcgU2V0LG5ldyBTZXQsbmV3IFNldF0pO2xldCBvPWkuZ2V0KGUpO289PT12b2lkIDAmJlYoMzYsU3RyaW5nKGUpKTtsZXQgbD1vW3JdO3JldHVybiBsLmFkZChuKSwoKT0+e2wuZGVsZXRlKG4pLG8uZXZlcnkocz0+cy5zaXplPT09MCkmJmkuZGVsZXRlKGUpfX1yZWdpc3Rlck11dGF0aW9uTGlzdGVuZXIoZSxuKXt0aGlzLl9ub2Rlcy5nZXQoZS5nZXRUeXBlKCkpPT09dm9pZCAwJiZWKDM3LGUubmFtZSk7bGV0IHI9dGhpcy5fbGlzdGVuZXJzLm11dGF0aW9uO3JldHVybiByLnNldChuLGUpLCgpPT57ci5kZWxldGUobil9fXJlZ2lzdGVyTm9kZVRyYW5zZm9ybVRvS2xhc3MoZSxuKXt2YXIgcj1lLmdldFR5cGUoKTtyZXR1cm4gcj10aGlzLl9ub2Rlcy5nZXQocikscj09PXZvaWQgMCYmVigzNyxlLm5hbWUpLHIudHJhbnNmb3Jtcy5hZGQobikscn1yZWdpc3Rlck5vZGVUcmFuc2Zvcm0oZSxuKXt2YXIgcj10aGlzLnJlZ2lzdGVyTm9kZVRyYW5zZm9ybVRvS2xhc3MoZSxuKTtsZXQgaT1bcl07cmV0dXJuIHI9ci5yZXBsYWNlV2l0aEtsYXNzLHIhPW51bGwmJihyPXRoaXMucmVnaXN0ZXJOb2RlVHJhbnNmb3JtVG9LbGFzcyhyLG4pLGkucHVzaChyKSksSVIodGhpcyxlLmdldFR5cGUoKSksKCk9PntpLmZvckVhY2gobz0+by50cmFuc2Zvcm1zLmRlbGV0ZShuKSl9fWhhc05vZGUoZSl7cmV0dXJuIHRoaXMuX25vZGVzLmhhcyhlLmdldFR5cGUoKSl9aGFzTm9kZXMoZSl7cmV0dXJuIGUuZXZlcnkodGhpcy5oYXNOb2RlLmJpbmQodGhpcykpfWRpc3BhdGNoQ29tbWFuZChlLG4pe3JldHVybiBKKHRoaXMsZSxuKX1nZXREZWNvcmF0b3JzKCl7cmV0dXJuIHRoaXMuX2RlY29yYXRvcnN9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnR9Z2V0S2V5KCl7cmV0dXJuIHRoaXMuX2tleX1zZXRSb290RWxlbWVudChlKXtsZXQgbj10aGlzLl9yb290RWxlbWVudDtpZihlIT09bil7bGV0IGw9UmEodGhpcy5fY29uZmlnLnRoZW1lLCJyb290Iik7dmFyIHI9dGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlfHx0aGlzLl9lZGl0b3JTdGF0ZTtpZih0aGlzLl9yb290RWxlbWVudD1lLE9FKHRoaXMsbixlLHIpLG4hPT1udWxsKXtpZighdGhpcy5fY29uZmlnLmRpc2FibGVFdmVudHMpe09hIT09MCYmKE9hLS0sT2E9PT0wJiZuLm93bmVyRG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIixTRSkpO3ZhciBpPW4uX19sZXhpY2FsRWRpdG9yO2lmKGkhPW51bGwpe2lmKGkuX3BhcmVudEVkaXRvciE9PW51bGwpe3ZhciBvPXh2KGkpO289b1tvLmxlbmd0aC0xXS5fa2V5LHRzLmdldChvKT09PWkmJnRzLmRlbGV0ZShvKX1lbHNlIHRzLmRlbGV0ZShpLl9rZXkpO24uX19sZXhpY2FsRWRpdG9yPW51bGx9Zm9yKGk9d0Uobiksbz0wO288aS5sZW5ndGg7bysrKWlbb10oKTtuLl9fbGV4aWNhbEV2ZW50SGFuZGxlcz1bXX1sIT1udWxsJiZuLmNsYXNzTGlzdC5yZW1vdmUoLi4ubCl9ZSE9PW51bGw/KHI9KHI9ZS5vd25lckRvY3VtZW50KSYmci5kZWZhdWx0Vmlld3x8bnVsbCxpPWUuc3R5bGUsaS51c2VyU2VsZWN0PSJ0ZXh0IixpLndoaXRlU3BhY2U9InByZS13cmFwIixpLndvcmRCcmVhaz0iYnJlYWstd29yZCIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtbGV4aWNhbC1lZGl0b3IiLCJ0cnVlIiksdGhpcy5fd2luZG93PXIsdGhpcy5fZGlydHlUeXBlPTIsWFModGhpcyksdGhpcy5fdXBkYXRlVGFncy5hZGQoImhpc3RvcnktbWVyZ2UiKSxXbyh0aGlzKSx0aGlzLl9jb25maWcuZGlzYWJsZUV2ZW50c3x8WVIoZSx0aGlzKSxsIT1udWxsJiZlLmNsYXNzTGlzdC5hZGQoLi4ubCkpOih0aGlzLl9lZGl0b3JTdGF0ZT1yLHRoaXMuX3dpbmRvdz10aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9bnVsbCksQWEoInJvb3QiLHRoaXMsITEsZSxuKX19Z2V0RWxlbWVudEJ5S2V5KGUpe3JldHVybiB0aGlzLl9rZXlUb0RPTU1hcC5nZXQoZSl8fG51bGx9Z2V0RWRpdG9yU3RhdGUoKXtyZXR1cm4gdGhpcy5fZWRpdG9yU3RhdGV9c2V0RWRpdG9yU3RhdGUoZSxuKXtlLmlzRW1wdHkoKSYmVigzOCksWVModGhpcyk7bGV0IHI9dGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlLGk9dGhpcy5fdXBkYXRlVGFncztuPW4hPT12b2lkIDA/bi50YWc6bnVsbCxyPT09bnVsbHx8ci5pc0VtcHR5KCl8fChuIT1udWxsJiZpLmFkZChuKSxXbyh0aGlzKSksdGhpcy5fcGVuZGluZ0VkaXRvclN0YXRlPWUsdGhpcy5fZGlydHlUeXBlPTIsdGhpcy5fZGlydHlFbGVtZW50cy5zZXQoInJvb3QiLCExKSx0aGlzLl9jb21wb3NpdGlvbktleT1udWxsLG4hPW51bGwmJmkuYWRkKG4pLFdvKHRoaXMpfXBhcnNlRWRpdG9yU3RhdGUoZSxuKXtlPXR5cGVvZiBlPT0ic3RyaW5nIj9KU09OLnBhcnNlKGUpOmU7bGV0IHI9JHYoKSxpPWp0LG89QW4sbD16dCxzPXRoaXMuX2RpcnR5RWxlbWVudHMsYT10aGlzLl9kaXJ0eUxlYXZlcyxjPXRoaXMuX2Nsb25lTm90TmVlZGVkLHU9dGhpcy5fZGlydHlUeXBlO3RoaXMuX2RpcnR5RWxlbWVudHM9bmV3IE1hcCx0aGlzLl9kaXJ0eUxlYXZlcz1uZXcgU2V0LHRoaXMuX2Nsb25lTm90TmVlZGVkPW5ldyBTZXQsdGhpcy5fZGlydHlUeXBlPTAsanQ9cixBbj0hMSx6dD10aGlzO3RyeXtrdihlLnJvb3QsdGhpcy5fbm9kZXMpLG4mJm4oKSxyLl9yZWFkT25seT0hMH1jYXRjaChkKXtkIGluc3RhbmNlb2YgRXJyb3ImJnRoaXMuX29uRXJyb3IoZCl9ZmluYWxseXt0aGlzLl9kaXJ0eUVsZW1lbnRzPXMsdGhpcy5fZGlydHlMZWF2ZXM9YSx0aGlzLl9jbG9uZU5vdE5lZWRlZD1jLHRoaXMuX2RpcnR5VHlwZT11LGp0PWksQW49byx6dD1sfXJldHVybiByfXVwZGF0ZShlLG4pe1ZuKHRoaXMsZSxuKX1mb2N1cyhlLG49e30pe2xldCByPXRoaXMuX3Jvb3RFbGVtZW50O3IhPT1udWxsJiYoci5zZXRBdHRyaWJ1dGUoImF1dG9jYXBpdGFsaXplIiwib2ZmIiksVm4odGhpcywoKT0+e2xldCBpPXJ0KCksbz1YcigpO2khPT1udWxsP2kuZGlydHk9ITA6by5nZXRDaGlsZHJlblNpemUoKSE9PTAmJihuLmRlZmF1bHRTZWxlY3Rpb249PT0icm9vdFN0YXJ0Ij9vLnNlbGVjdFN0YXJ0KCk6by5zZWxlY3RFbmQoKSl9LHtvblVwZGF0ZTooKT0+e3IucmVtb3ZlQXR0cmlidXRlKCJhdXRvY2FwaXRhbGl6ZSIpLGUmJmUoKX0sdGFnOiJmb2N1cyJ9KSx0aGlzLl9wZW5kaW5nRWRpdG9yU3RhdGU9PT1udWxsJiZyLnJlbW92ZUF0dHJpYnV0ZSgiYXV0b2NhcGl0YWxpemUiKSl9Ymx1cigpe3ZhciBlPXRoaXMuX3Jvb3RFbGVtZW50O2UhPT1udWxsJiZlLmJsdXIoKSxlPUpyKHRoaXMuX3dpbmRvdyksZSE9PW51bGwmJmUucmVtb3ZlQWxsUmFuZ2VzKCl9aXNFZGl0YWJsZSgpe3JldHVybiB0aGlzLl9lZGl0YWJsZX1zZXRFZGl0YWJsZShlKXt0aGlzLl9lZGl0YWJsZSE9PWUmJih0aGlzLl9lZGl0YWJsZT1lLEFhKCJlZGl0YWJsZSIsdGhpcywhMCxlKSl9dG9KU09OKCl7cmV0dXJue2VkaXRvclN0YXRlOnRoaXMuX2VkaXRvclN0YXRlLnRvSlNPTigpfX19Y2xhc3MgVHYgZXh0ZW5kcyBmbHtjb25zdHJ1Y3RvcihlLG4pe3N1cGVyKG4pLHRoaXMuX19jb2xTcGFuPWUsdGhpcy5fX3Jvd1NwYW49MX1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSxjb2xTcGFuOnRoaXMuX19jb2xTcGFuLHJvd1NwYW46dGhpcy5fX3Jvd1NwYW59fWdldENvbFNwYW4oKXtyZXR1cm4gdGhpcy5fX2NvbFNwYW59c2V0Q29sU3BhbihlKXtyZXR1cm4gdGhpcy5nZXRXcml0YWJsZSgpLl9fY29sU3Bhbj1lLHRoaXN9Z2V0Um93U3Bhbigpe3JldHVybiB0aGlzLl9fcm93U3Bhbn1zZXRSb3dTcGFuKGUpe3JldHVybiB0aGlzLmdldFdyaXRhYmxlKCkuX19yb3dTcGFuPWUsdGhpc319ZnVuY3Rpb24gZXIodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBUdn1jbGFzcyBQRSBleHRlbmRzIGZse31mdW5jdGlvbiBOdih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFBFfWNsYXNzIEFFIGV4dGVuZHMgZmx7fWZ1bmN0aW9uIGZjKHQpe3JldHVybiB0IGluc3RhbmNlb2YgQUV9SS4kYWRkVXBkYXRlVGFnPWZ1bmN0aW9uKHQpe21uKCksaHQoKS5fdXBkYXRlVGFncy5hZGQodCl9O0kuJGFwcGx5Tm9kZVJlcGxhY2VtZW50PUJjO0kuJGNvcHlOb2RlPXNFO0kuJGNyZWF0ZUxpbmVCcmVha05vZGU9Z3M7SS4kY3JlYXRlTm9kZVNlbGVjdGlvbj0kbTtJLiRjcmVhdGVQYXJhZ3JhcGhOb2RlPVFvO0kuJGNyZWF0ZVJhbmdlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7bGV0IHQ9bmV3IFZyKCJyb290IiwwLCJlbGVtZW50IiksZT1uZXcgVnIoInJvb3QiLDAsImVsZW1lbnQiKTtyZXR1cm4gbmV3IGRsKHQsZSwwLCIiKX07SS4kY3JlYXRlVGFiTm9kZT1EZjtJLiRjcmVhdGVUZXh0Tm9kZT1MdDtJLiRnZXRBZGphY2VudE5vZGU9Zm07SS4kZ2V0TmVhcmVzdE5vZGVGcm9tRE9NTm9kZT1GYztJLiRnZXROZWFyZXN0Um9vdE9yU2hhZG93Um9vdD1sRTtJLiRnZXROb2RlQnlLZXk9SXQ7SS4kZ2V0UHJldmlvdXNTZWxlY3Rpb249UHM7SS4kZ2V0Um9vdD1YcjtJLiRnZXRTZWxlY3Rpb249cnQ7SS4kZ2V0VGV4dENvbnRlbnQ9ZnVuY3Rpb24oKXtsZXQgdD1ydCgpO3JldHVybiB0PT09bnVsbD8iIjp0LmdldFRleHRDb250ZW50KCl9O0kuJGhhc0FuY2VzdG9yPVJkO0kuJGhhc1VwZGF0ZVRhZz1mdW5jdGlvbih0KXtyZXR1cm4gaHQoKS5fdXBkYXRlVGFncy5oYXModCl9O0kuJGluc2VydE5vZGVzPWZ1bmN0aW9uKHQsZSl7bGV0IG49cnQoKXx8UHMoKTtyZXR1cm4gbj09PW51bGwmJihuPVhyKCkuc2VsZWN0RW5kKCkpLG4uaW5zZXJ0Tm9kZXModCxlKX07SS4kaXNCbG9ja0VsZW1lbnROb2RlPWttO0kuJGlzRGVjb3JhdG9yTm9kZT10dDtJLiRpc0VsZW1lbnROb2RlPVU7SS4kaXNJbmxpbmVFbGVtZW50T3JEZWNvcmF0b3JOb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBVKHQpJiZ0LmlzSW5saW5lKCl8fHR0KHQpJiZ0LmlzSW5saW5lKCl9O0kuJGlzTGVhZk5vZGU9cVM7SS4kaXNMaW5lQnJlYWtOb2RlPXVjO0kuJGlzTm9kZVNlbGVjdGlvbj1PcztJLiRpc1BhcmFncmFwaE5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBMc307SS4kaXNSYW5nZVNlbGVjdGlvbj1nZTtJLiRpc1Jvb3ROb2RlPXZuO0kuJGlzUm9vdE9yU2hhZG93Um9vdD1fcjtJLiRpc1RhYk5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBSc307SS4kaXNUZXh0Tm9kZT1xO0kuJG5vZGVzT2ZUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlPVFyKCk7bGV0IG49ZS5fcmVhZE9ubHkscj10LmdldFR5cGUoKTtlPWUuX25vZGVNYXA7bGV0IGk9W107Zm9yKGxldFssb11vZiBlKW8gaW5zdGFuY2VvZiB0JiZvLl9fdHlwZT09PXImJihufHxvLmlzQXR0YWNoZWQoKSkmJmkucHVzaChvKTtyZXR1cm4gaX07SS4kbm9ybWFsaXplU2VsZWN0aW9uX19FWFBFUklNRU5UQUw9Z3Y7SS4kcGFyc2VTZXJpYWxpemVkTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4ga3YodCxodCgpLl9ub2Rlcyl9O0kuJHNlbGVjdEFsbD1mdW5jdGlvbigpe3ZhciB0PVhyKCk7dD10LnNlbGVjdCgwLHQuZ2V0Q2hpbGRyZW5TaXplKCkpLEhyKGd2KHQpKX07SS4kc2V0Q29tcG9zaXRpb25LZXk9S3Q7SS4kc2V0U2VsZWN0aW9uPUhyO0kuJHNwbGl0Tm9kZT1hRTtJLkJMVVJfQ09NTUFORD1LUztJLkNBTl9SRURPX0NPTU1BTkQ9e307SS5DQU5fVU5ET19DT01NQU5EPXt9O0kuQ0xFQVJfRURJVE9SX0NPTU1BTkQ9e307SS5DTEVBUl9ISVNUT1JZX0NPTU1BTkQ9e307SS5DTElDS19DT01NQU5EPVRTO0kuQ09NTUFORF9QUklPUklUWV9DUklUSUNBTD00O0kuQ09NTUFORF9QUklPUklUWV9FRElUT1I9MDtJLkNPTU1BTkRfUFJJT1JJVFlfSElHSD0zO0kuQ09NTUFORF9QUklPUklUWV9MT1c9MTtJLkNPTU1BTkRfUFJJT1JJVFlfTk9STUFMPTI7SS5DT05UUk9MTEVEX1RFWFRfSU5TRVJUSU9OX0NPTU1BTkQ9ZXM7SS5DT1BZX0NPTU1BTkQ9ZHY7SS5DVVRfQ09NTUFORD1mdjtJLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORD1pYztJLkRFTEVURV9MSU5FX0NPTU1BTkQ9bGM7SS5ERUxFVEVfV09SRF9DT01NQU5EPW9jO0kuREVQUkVDQVRFRF8kY29tcHV0ZUdyaWRNYXA9a0U7SS5ERVBSRUNBVEVEXyRjcmVhdGVHcmlkU2VsZWN0aW9uPWZ1bmN0aW9uKCl7bGV0IHQ9bmV3IFZyKCJyb290IiwwLCJlbGVtZW50IiksZT1uZXcgVnIoInJvb3QiLDAsImVsZW1lbnQiKTtyZXR1cm4gbmV3IGpmKCJyb290Iix0LGUpfTtJLkRFUFJFQ0FURURfJGdldEdyaWRDZWxsTm9kZVJlY3Q9Ym07SS5ERVBSRUNBVEVEXyRnZXROb2RlVHJpcGxldD0kRTtJLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlPWVyO0kuREVQUkVDQVRFRF8kaXNHcmlkTm9kZT1OdjtJLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGU9ZmM7SS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb249Q3Y7SS5ERVBSRUNBVEVEX0dyaWRDZWxsTm9kZT1UdjtJLkRFUFJFQ0FURURfR3JpZE5vZGU9UEU7SS5ERVBSRUNBVEVEX0dyaWRSb3dOb2RlPUFFO0kuRFJBR0VORF9DT01NQU5EPUhTO0kuRFJBR09WRVJfQ09NTUFORD1XUztJLkRSQUdTVEFSVF9DT01NQU5EPVVTO0kuRFJPUF9DT01NQU5EPUJTO0kuRGVjb3JhdG9yTm9kZT1ORTtJLkVsZW1lbnROb2RlPWZsO0kuRk9DVVNfQ09NTUFORD1WUztJLkZPUk1BVF9FTEVNRU5UX0NPTU1BTkQ9e307SS5GT1JNQVRfVEVYVF9DT01NQU5EPUtpO0kuSU5ERU5UX0NPTlRFTlRfQ09NTUFORD17fTtJLklOU0VSVF9MSU5FX0JSRUFLX0NPTU1BTkQ9TmE7SS5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQ9c207SS5JTlNFUlRfVEFCX0NPTU1BTkQ9e307SS5LRVlfQVJST1dfRE9XTl9DT01NQU5EPUxTO0kuS0VZX0FSUk9XX0xFRlRfQ09NTUFORD1QUztJLktFWV9BUlJPV19SSUdIVF9DT01NQU5EPVJTO0kuS0VZX0FSUk9XX1VQX0NPTU1BTkQ9TVM7SS5LRVlfQkFDS1NQQUNFX0NPTU1BTkQ9SVM7SS5LRVlfREVMRVRFX0NPTU1BTkQ9elM7SS5LRVlfRE9XTl9DT01NQU5EPU5TO0kuS0VZX0VOVEVSX0NPTU1BTkQ9Q2Q7SS5LRVlfRVNDQVBFX0NPTU1BTkQ9alM7SS5LRVlfTU9ESUZJRVJfQ09NTUFORD1aUztJLktFWV9TUEFDRV9DT01NQU5EPURTO0kuS0VZX1RBQl9DT01NQU5EPUZTO0kuTGluZUJyZWFrTm9kZT1OcztJLk1PVkVfVE9fRU5EPU9TO0kuTU9WRV9UT19TVEFSVD1BUztJLk9VVERFTlRfQ09OVEVOVF9DT01NQU5EPXt9O0kuUEFTVEVfQ09NTUFORD1hdjtJLlBhcmFncmFwaE5vZGU9THM7SS5SRURPX0NPTU1BTkQ9dXY7SS5SRU1PVkVfVEVYVF9DT01NQU5EPWFtO0kuUm9vdE5vZGU9TXM7SS5TRUxFQ1RJT05fQ0hBTkdFX0NPTU1BTkQ9TmY7SS5TRUxFQ1RfQUxMX0NPTU1BTkQ9Y207SS5UYWJOb2RlPVJzO0kuVGV4dE5vZGU9dWw7SS5VTkRPX0NPTU1BTkQ9Y3Y7SS5jcmVhdGVDb21tYW5kPWZ1bmN0aW9uKCl7cmV0dXJue319O0kuY3JlYXRlRWRpdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR8fHt9LG49enQscj1lLnRoZW1lfHx7fTtsZXQgaT10PT09dm9pZCAwP246ZS5wYXJlbnRFZGl0b3J8fG51bGwsbz1lLmRpc2FibGVFdmVudHN8fCExLGw9JHYoKSxzPWUubmFtZXNwYWNlfHwoaSE9PW51bGw/aS5fY29uZmlnLm5hbWVzcGFjZTppRSgpKSxhPWUuZWRpdG9yU3RhdGUsYz1bTXMsdWwsTnMsUnMsTHMsLi4uZS5ub2Rlc3x8W11dLHU9ZS5vbkVycm9yO2lmKGU9ZS5lZGl0YWJsZSE9PXZvaWQgMD9lLmVkaXRhYmxlOiEwLHQ9PT12b2lkIDAmJm4hPT1udWxsKXQ9bi5fbm9kZXM7ZWxzZSBmb3IodD1uZXcgTWFwLG49MDtuPGMubGVuZ3RoO24rKyl7bGV0IGY9Y1tuXSxwPW51bGw7dmFyIGQ9bnVsbDt0eXBlb2YgZiE9ImZ1bmN0aW9uIiYmKGQ9ZixmPWQucmVwbGFjZSxwPWQud2l0aCxkPWQud2l0aEtsYXNzP2Qud2l0aEtsYXNzOm51bGwpO2xldCBnPWYuZ2V0VHlwZSgpLG09Zi50cmFuc2Zvcm0oKSx3PW5ldyBTZXQ7bSE9PW51bGwmJncuYWRkKG0pLHQuc2V0KGcse2tsYXNzOmYscmVwbGFjZTpwLHJlcGxhY2VXaXRoS2xhc3M6ZCx0cmFuc2Zvcm1zOnd9KX1yZXR1cm4gcj1uZXcgY08obCxpLHQse2Rpc2FibGVFdmVudHM6byxuYW1lc3BhY2U6cyx0aGVtZTpyfSx1fHxjb25zb2xlLmVycm9yLGFPKHQpLGUpLGEhPT12b2lkIDAmJihyLl9wZW5kaW5nRWRpdG9yU3RhdGU9YSxyLl9kaXJ0eVR5cGU9Mikscn07SS5nZXROZWFyZXN0RWRpdG9yRnJvbURPTU5vZGU9eXY7SS5pc0hUTUxBbmNob3JFbGVtZW50PWZ1bmN0aW9uKHQpe3JldHVybiBNZih0KSYmdC50YWdOYW1lPT09IkEifTtJLmlzSFRNTEVsZW1lbnQ9TWY7SS5pc1NlbGVjdGlvbkNhcHR1cmVkSW5EZWNvcmF0b3JJbnB1dD12djtJLmlzU2VsZWN0aW9uV2l0aGluRWRpdG9yPXpjO2NvbnN0IHVPPUk7dmFyIF9lPXVPO2Z1bmN0aW9uIFJ2KCl7cmV0dXJue2FzeW5jOiExLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhvb2tzOm51bGwscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzaWxlbnQ6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsfX1sZXQgcGw9UnYoKTtmdW5jdGlvbiBNRSh0KXtwbD10fWNvbnN0IExFPS9bJjw+IiddLyxkTz1uZXcgUmVnRXhwKExFLnNvdXJjZSwiZyIpLERFPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxmTz1uZXcgUmVnRXhwKERFLnNvdXJjZSwiZyIpLHBPPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVvdDsiLCInIjoiJiMzOTsifSxmeD10PT5wT1t0XTtmdW5jdGlvbiBEbih0LGUpe2lmKGUpe2lmKExFLnRlc3QodCkpcmV0dXJuIHQucmVwbGFjZShkTyxmeCl9ZWxzZSBpZihERS50ZXN0KHQpKXJldHVybiB0LnJlcGxhY2UoZk8sZngpO3JldHVybiB0fWNvbnN0IGhPPS8mKCMoPzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2lnO2Z1bmN0aW9uIG1PKHQpe3JldHVybiB0LnJlcGxhY2UoaE8sKGUsbik9PihuPW4udG9Mb3dlckNhc2UoKSxuPT09ImNvbG9uIj8iOiI6bi5jaGFyQXQoMCk9PT0iIyI/bi5jaGFyQXQoMSk9PT0ieCI/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK24uc3Vic3RyaW5nKDEpKToiIikpfWNvbnN0IGdPPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIEJlKHQsZSl7dD10eXBlb2YgdD09InN0cmluZyI/dDp0LnNvdXJjZSxlPWV8fCIiO2NvbnN0IG49e3JlcGxhY2U6KHIsaSk9PihpPXR5cGVvZiBpPT0ib2JqZWN0IiYmInNvdXJjZSJpbiBpP2kuc291cmNlOmksaT1pLnJlcGxhY2UoZ08sIiQxIiksdD10LnJlcGxhY2UocixpKSxuKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cCh0LGUpfTtyZXR1cm4gbn1mdW5jdGlvbiBweCh0KXt0cnl7dD1lbmNvZGVVUkkodCkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gdH1jb25zdCBMZD17ZXhlYzooKT0+bnVsbH07ZnVuY3Rpb24gaHgodCxlKXtjb25zdCBuPXQucmVwbGFjZSgvXHwvZywobyxsLHMpPT57bGV0IGE9ITEsYz1sO2Zvcig7LS1jPj0wJiZzW2NdPT09IlxcIjspYT0hYTtyZXR1cm4gYT8ifCI6IiB8In0pLHI9bi5zcGxpdCgvIFx8Lyk7bGV0IGk9MDtpZihyWzBdLnRyaW0oKXx8ci5zaGlmdCgpLHIubGVuZ3RoPjAmJiFyW3IubGVuZ3RoLTFdLnRyaW0oKSYmci5wb3AoKSxlKWlmKHIubGVuZ3RoPmUpci5zcGxpY2UoZSk7ZWxzZSBmb3IoO3IubGVuZ3RoPGU7KXIucHVzaCgiIik7Zm9yKDtpPHIubGVuZ3RoO2krKylyW2ldPXJbaV0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiByfWZ1bmN0aW9uIHl1KHQsZSxuKXtjb25zdCByPXQubGVuZ3RoO2lmKHI9PT0wKXJldHVybiIiO2xldCBpPTA7Zm9yKDtpPHI7KXtjb25zdCBvPXQuY2hhckF0KHItaS0xKTtpZihvPT09ZSYmIW4paSsrO2Vsc2UgaWYobyE9PWUmJm4paSsrO2Vsc2UgYnJlYWt9cmV0dXJuIHQuc2xpY2UoMCxyLWkpfWZ1bmN0aW9uIHZPKHQsZSl7aWYodC5pbmRleE9mKGVbMV0pPT09LTEpcmV0dXJuLTE7bGV0IG49MDtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdPT09IlxcIilyKys7ZWxzZSBpZih0W3JdPT09ZVswXSluKys7ZWxzZSBpZih0W3JdPT09ZVsxXSYmKG4tLSxuPDApKXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIG14KHQsZSxuLHIpe2NvbnN0IGk9ZS5ocmVmLG89ZS50aXRsZT9EbihlLnRpdGxlKTpudWxsLGw9dFsxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYodFswXS5jaGFyQXQoMCkhPT0iISIpe3Iuc3RhdGUuaW5MaW5rPSEwO2NvbnN0IHM9e3R5cGU6ImxpbmsiLHJhdzpuLGhyZWY6aSx0aXRsZTpvLHRleHQ6bCx0b2tlbnM6ci5pbmxpbmVUb2tlbnMobCl9O3JldHVybiByLnN0YXRlLmluTGluaz0hMSxzfXJldHVybnt0eXBlOiJpbWFnZSIscmF3Om4saHJlZjppLHRpdGxlOm8sdGV4dDpEbihsKX19ZnVuY3Rpb24geU8odCxlKXtjb25zdCBuPXQubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihuPT09bnVsbClyZXR1cm4gZTtjb25zdCByPW5bMV07cmV0dXJuIGUuc3BsaXQoYApgKS5tYXAoaT0+e2NvbnN0IG89aS5tYXRjaCgvXlxzKy8pO2lmKG89PT1udWxsKXJldHVybiBpO2NvbnN0W2xdPW87cmV0dXJuIGwubGVuZ3RoPj1yLmxlbmd0aD9pLnNsaWNlKHIubGVuZ3RoKTppfSkuam9pbihgCmApfWNsYXNzIERke2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsIm9wdGlvbnMiKTtRZSh0aGlzLCJydWxlcyIpO1FlKHRoaXMsImxleGVyIik7dGhpcy5vcHRpb25zPWV8fHBsfXNwYWNlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMoZSk7aWYobiYmblswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzpuWzBdfX1jb2RlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMoZSk7aWYobil7Y29uc3Qgcj1uWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6blswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP3I6eXUocixgCmApfX19ZmVuY2VzKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMF0saT15TyhyLG5bM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OnIsbGFuZzpuWzJdP25bMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6blsyXSx0ZXh0Oml9fX1oZWFkaW5nKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMoZSk7aWYobil7bGV0IHI9blsyXS50cmltKCk7aWYoLyMkLy50ZXN0KHIpKXtjb25zdCBpPXl1KHIsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaXx8LyAkLy50ZXN0KGkpKSYmKHI9aS50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6blswXSxkZXB0aDpuWzFdLmxlbmd0aCx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19aHIoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMoZSk7aWYobilyZXR1cm57dHlwZToiaHIiLHJhdzpuWzBdfX1ibG9ja3F1b3RlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoZSk7aWYobil7Y29uc3Qgcj15dShuWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGAKYCksaT10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBvPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMocik7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWkse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzpuWzBdLHRva2VuczpvLHRleHQ6cn19fWxpc3QoZSl7bGV0IG49dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMoZSk7aWYobil7bGV0IHI9blsxXS50cmltKCk7Y29uc3QgaT1yLmxlbmd0aD4xLG89e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOmksc3RhcnQ6aT8rci5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07cj1pP2BcXGR7MSw5fVxcJHtyLnNsaWNlKC0xKX1gOmBcXCR7cn1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKHI9aT9yOiJbKistXSIpO2NvbnN0IGw9bmV3IFJlZ0V4cChgXiggezAsM30ke3J9KSgoPzpbCSBdW15cXG5dKik/KD86XFxufCQpKWApO2xldCBzPSIiLGE9IiIsYz0hMTtmb3IoO2U7KXtsZXQgdT0hMTtpZighKG49bC5leGVjKGUpKXx8dGhpcy5ydWxlcy5ibG9jay5oci50ZXN0KGUpKWJyZWFrO3M9blswXSxlPWUuc3Vic3RyaW5nKHMubGVuZ3RoKTtsZXQgZD1uWzJdLnNwbGl0KGAKYCwxKVswXS5yZXBsYWNlKC9eXHQrLyx2PT4iICIucmVwZWF0KDMqdi5sZW5ndGgpKSxmPWUuc3BsaXQoYApgLDEpWzBdLHA9MDt0aGlzLm9wdGlvbnMucGVkYW50aWM/KHA9MixhPWQudHJpbVN0YXJ0KCkpOihwPW5bMl0uc2VhcmNoKC9bXiBdLykscD1wPjQ/MTpwLGE9ZC5zbGljZShwKSxwKz1uWzFdLmxlbmd0aCk7bGV0IGc9ITE7aWYoIWQmJi9eICokLy50ZXN0KGYpJiYocys9ZitgCmAsZT1lLnN1YnN0cmluZyhmLmxlbmd0aCsxKSx1PSEwKSwhdSl7Y29uc3Qgdj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxwLTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgCV1bXlxcbl0qKT8oPzpcXG58JCkpYCkseD1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxwLTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksXz1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyxwLTEpfX0oPzpcYFxgXGB8fn5+KWApLFM9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMscC0xKX19I2ApO2Zvcig7ZTspe2NvbnN0IEU9ZS5zcGxpdChgCmAsMSlbMF07aWYoZj1FLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGY9Zi5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLF8udGVzdChmKXx8Uy50ZXN0KGYpfHx2LnRlc3QoZil8fHgudGVzdChlKSlicmVhaztpZihmLnNlYXJjaCgvW14gXS8pPj1wfHwhZi50cmltKCkpYSs9YApgK2Yuc2xpY2UocCk7ZWxzZXtpZihnfHxkLnNlYXJjaCgvW14gXS8pPj00fHxfLnRlc3QoZCl8fFMudGVzdChkKXx8eC50ZXN0KGQpKWJyZWFrO2ErPWAKYCtmfSFnJiYhZi50cmltKCkmJihnPSEwKSxzKz1FK2AKYCxlPWUuc3Vic3RyaW5nKEUubGVuZ3RoKzEpLGQ9Zi5zbGljZShwKX19by5sb29zZXx8KGM/by5sb29zZT0hMDovXG4gKlxuICokLy50ZXN0KHMpJiYoYz0hMCkpO2xldCBtPW51bGwsdzt0aGlzLm9wdGlvbnMuZ2ZtJiYobT0vXlxbWyB4WF1cXSAvLmV4ZWMoYSksbSYmKHc9bVswXSE9PSJbIF0gIixhPWEucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxvLml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OnMsdGFzazohIW0sY2hlY2tlZDp3LGxvb3NlOiExLHRleHQ6YSx0b2tlbnM6W119KSxvLnJhdys9c31vLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnJhdz1zLnRyaW1FbmQoKSxvLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnRleHQ9YS50cmltRW5kKCksby5yYXc9by5yYXcudHJpbUVuZCgpO2ZvcihsZXQgdT0wO3U8by5pdGVtcy5sZW5ndGg7dSsrKWlmKHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLG8uaXRlbXNbdV0udG9rZW5zPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoby5pdGVtc1t1XS50ZXh0LFtdKSwhby5sb29zZSl7Y29uc3QgZD1vLml0ZW1zW3VdLnRva2Vucy5maWx0ZXIocD0+cC50eXBlPT09InNwYWNlIiksZj1kLmxlbmd0aD4wJiZkLnNvbWUocD0+L1xuLipcbi8udGVzdChwLnJhdykpO28ubG9vc2U9Zn1pZihvLmxvb3NlKWZvcihsZXQgdT0wO3U8by5pdGVtcy5sZW5ndGg7dSsrKW8uaXRlbXNbdV0ubG9vc2U9ITA7cmV0dXJuIG99fWh0bWwoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhlKTtpZihuKXJldHVybnt0eXBlOiJodG1sIixibG9jazohMCxyYXc6blswXSxwcmU6blsxXT09PSJwcmUifHxuWzFdPT09InNjcmlwdCJ8fG5bMV09PT0ic3R5bGUiLHRleHQ6blswXX19ZGVmKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGk9blsyXT9uWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLG89blszXT9uWzNdLnN1YnN0cmluZygxLG5bM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6blszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6cixyYXc6blswXSxocmVmOmksdGl0bGU6b319fXRhYmxlKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGUpO2lmKG4pe2lmKCEvWzp8XS8udGVzdChuWzJdKSlyZXR1cm47Y29uc3Qgcj17dHlwZToidGFibGUiLHJhdzpuWzBdLGhlYWRlcjpoeChuWzFdKS5tYXAoaT0+KHt0ZXh0OmksdG9rZW5zOltdfSkpLGFsaWduOm5bMl0ucmVwbGFjZSgvXlx8fFx8ICokL2csIiIpLnNwbGl0KCJ8Iikscm93czpuWzNdJiZuWzNdLnRyaW0oKT9uWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KGAKYCk6W119O2lmKHIuaGVhZGVyLmxlbmd0aD09PXIuYWxpZ24ubGVuZ3RoKXtsZXQgaT1yLmFsaWduLmxlbmd0aCxvLGwscyxhO2ZvcihvPTA7bzxpO28rKyl7Y29uc3QgYz1yLmFsaWduW29dO2MmJigvXiAqLSs6ICokLy50ZXN0KGMpP3IuYWxpZ25bb109InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChjKT9yLmFsaWduW29dPSJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoYyk/ci5hbGlnbltvXT0ibGVmdCI6ci5hbGlnbltvXT1udWxsKX1mb3IoaT1yLnJvd3MubGVuZ3RoLG89MDtvPGk7bysrKXIucm93c1tvXT1oeChyLnJvd3Nbb10sci5oZWFkZXIubGVuZ3RoKS5tYXAoYz0+KHt0ZXh0OmMsdG9rZW5zOltdfSkpO2ZvcihpPXIuaGVhZGVyLmxlbmd0aCxsPTA7bDxpO2wrKylyLmhlYWRlcltsXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoci5oZWFkZXJbbF0udGV4dCk7Zm9yKGk9ci5yb3dzLmxlbmd0aCxsPTA7bDxpO2wrKylmb3IoYT1yLnJvd3NbbF0scz0wO3M8YS5sZW5ndGg7cysrKWFbc10udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGFbc10udGV4dCk7cmV0dXJuIHJ9fX1saGVhZGluZyhlKXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2subGhlYWRpbmcuZXhlYyhlKTtpZihuKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6blswXSxkZXB0aDpuWzJdLmNoYXJBdCgwKT09PSI9Ij8xOjIsdGV4dDpuWzFdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShuWzFdKX19cGFyYWdyYXBoKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhlKTtpZihuKXtjb25zdCByPW5bMV0uY2hhckF0KG5bMV0ubGVuZ3RoLTEpPT09YApgP25bMV0uc2xpY2UoMCwtMSk6blsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6blswXSx0ZXh0OnIsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKHIpfX19dGV4dChlKXtjb25zdCBuPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6InRleHQiLHJhdzpuWzBdLHRleHQ6blswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoblswXSl9fWVzY2FwZShlKXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3Om5bMF0sdGV4dDpEbihuWzFdKX19dGFnKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMoZSk7aWYobilyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChuWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoblswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChuWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoblswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOiJodG1sIixyYXc6blswXSxpbkxpbms6dGhpcy5sZXhlci5zdGF0ZS5pbkxpbmssaW5SYXdCbG9jazp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2ssYmxvY2s6ITEsdGV4dDpuWzBdfX1saW5rKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGUpO2lmKG4pe2NvbnN0IHI9blsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KHIpKXtpZighLz4kLy50ZXN0KHIpKXJldHVybjtjb25zdCBsPXl1KHIuc2xpY2UoMCwtMSksIlxcIik7aWYoKHIubGVuZ3RoLWwubGVuZ3RoKSUyPT09MClyZXR1cm59ZWxzZXtjb25zdCBsPXZPKG5bMl0sIigpIik7aWYobD4tMSl7Y29uc3QgYT0oblswXS5pbmRleE9mKCIhIik9PT0wPzU6NCkrblsxXS5sZW5ndGgrbDtuWzJdPW5bMl0uc3Vic3RyaW5nKDAsbCksblswXT1uWzBdLnN1YnN0cmluZygwLGEpLnRyaW0oKSxuWzNdPSIifX1sZXQgaT1uWzJdLG89IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCBsPS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhpKTtsJiYoaT1sWzFdLG89bFszXSl9ZWxzZSBvPW5bM10/blszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaT1pLnRyaW0oKSwvXjwvLnRlc3QoaSkmJih0aGlzLm9wdGlvbnMucGVkYW50aWMmJiEvPiQvLnRlc3Qocik/aT1pLnNsaWNlKDEpOmk9aS5zbGljZSgxLC0xKSksbXgobix7aHJlZjppJiZpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIiksdGl0bGU6byYmby5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpfSxuWzBdLHRoaXMubGV4ZXIpfX1yZWZsaW5rKGUsbil7bGV0IHI7aWYoKHI9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKGUpKXx8KHI9dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWMoZSkpKXtsZXQgaT0oclsyXXx8clsxXSkucmVwbGFjZSgvXHMrL2csIiAiKTtpZihpPW5baS50b0xvd2VyQ2FzZSgpXSwhaSl7Y29uc3Qgbz1yWzBdLmNoYXJBdCgwKTtyZXR1cm57dHlwZToidGV4dCIscmF3Om8sdGV4dDpvfX1yZXR1cm4gbXgocixpLHJbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGUsbixyPSIiKXtsZXQgaT10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhlKTtpZighaXx8aVszXSYmci5tYXRjaCgvW1xwe0x9XHB7Tn1dL3UpKXJldHVybjtpZighKGlbMV18fGlbMl18fCIiKXx8IXJ8fHRoaXMucnVsZXMuaW5saW5lLnB1bmN0dWF0aW9uLmV4ZWMocikpe2NvbnN0IGw9Wy4uLmlbMF1dLmxlbmd0aC0xO2xldCBzLGEsYz1sLHU9MDtjb25zdCBkPWlbMF1bMF09PT0iKiI/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3IoZC5sYXN0SW5kZXg9MCxuPW4uc2xpY2UoLTEqZS5sZW5ndGgrbCk7KGk9ZC5leGVjKG4pKSE9bnVsbDspe2lmKHM9aVsxXXx8aVsyXXx8aVszXXx8aVs0XXx8aVs1XXx8aVs2XSwhcyljb250aW51ZTtpZihhPVsuLi5zXS5sZW5ndGgsaVszXXx8aVs0XSl7Yys9YTtjb250aW51ZX1lbHNlIGlmKChpWzVdfHxpWzZdKSYmbCUzJiYhKChsK2EpJTMpKXt1Kz1hO2NvbnRpbnVlfWlmKGMtPWEsYz4wKWNvbnRpbnVlO2E9TWF0aC5taW4oYSxhK2MrdSk7Y29uc3QgZj1bLi4uaVswXV1bMF0ubGVuZ3RoLHA9ZS5zbGljZSgwLGwraS5pbmRleCtmK2EpO2lmKE1hdGgubWluKGwsYSklMil7Y29uc3QgbT1wLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OnAsdGV4dDptLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhtKX19Y29uc3QgZz1wLnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJzdHJvbmciLHJhdzpwLHRleHQ6Zyx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoZyl9fX19Y29kZXNwYW4oZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMoZSk7aWYobil7bGV0IHI9blsyXS5yZXBsYWNlKC9cbi9nLCIgIik7Y29uc3QgaT0vW14gXS8udGVzdChyKSxvPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpO3JldHVybiBpJiZvJiYocj1yLnN1YnN0cmluZygxLHIubGVuZ3RoLTEpKSxyPURuKHIsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3Om5bMF0sdGV4dDpyfX19YnIoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGUpO2lmKG4pcmV0dXJue3R5cGU6ImJyIixyYXc6blswXX19ZGVsKGUpe2NvbnN0IG49dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMoZSk7aWYobilyZXR1cm57dHlwZToiZGVsIixyYXc6blswXSx0ZXh0Om5bMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG5bMl0pfX1hdXRvbGluayhlKXtjb25zdCBuPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMoZSk7aWYobil7bGV0IHIsaTtyZXR1cm4gblsyXT09PSJAIj8ocj1EbihuWzFdKSxpPSJtYWlsdG86IityKToocj1EbihuWzFdKSxpPXIpLHt0eXBlOiJsaW5rIixyYXc6blswXSx0ZXh0OnIsaHJlZjppLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpyLHRleHQ6cn1dfX19dXJsKGUpe2xldCBuO2lmKG49dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMoZSkpe2xldCByLGk7aWYoblsyXT09PSJAIilyPURuKG5bMF0pLGk9Im1haWx0bzoiK3I7ZWxzZXtsZXQgbztkbyBvPW5bMF0sblswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoblswXSlbMF07d2hpbGUobyE9PW5bMF0pO3I9RG4oblswXSksblsxXT09PSJ3d3cuIj9pPSJodHRwOi8vIituWzBdOmk9blswXX1yZXR1cm57dHlwZToibGluayIscmF3Om5bMF0sdGV4dDpyLGhyZWY6aSx0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6cix0ZXh0OnJ9XX19fWlubGluZVRleHQoZSl7Y29uc3Qgbj10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMoZSk7aWYobil7bGV0IHI7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz9yPW5bMF06cj1EbihuWzBdKSx7dHlwZToidGV4dCIscmF3Om5bMF0sdGV4dDpyfX19fWNvbnN0IGNlPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpcXG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQpLyx0YWJsZTpMZCxsaGVhZGluZzovXig/IWJ1bGwgKSgoPzoufFxuKD8hXHMqP1xufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rL307Y2UuX2xhYmVsPS8oPyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvO2NlLl90aXRsZT0vKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpLztjZS5kZWY9QmUoY2UuZGVmKS5yZXBsYWNlKCJsYWJlbCIsY2UuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsY2UuX3RpdGxlKS5nZXRSZWdleCgpO2NlLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLztjZS5saXN0SXRlbVN0YXJ0PUJlKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsY2UuYnVsbGV0KS5nZXRSZWdleCgpO2NlLmxpc3Q9QmUoY2UubGlzdCkucmVwbGFjZSgvYnVsbC9nLGNlLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IitjZS5kZWYuc291cmNlKyIpIikuZ2V0UmVnZXgoKTtjZS5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIjtjZS5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS87Y2UuaHRtbD1CZShjZS5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsY2UuX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsY2UuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKTtjZS5saGVhZGluZz1CZShjZS5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLGNlLmJ1bGxldCkuZ2V0UmVnZXgoKTtjZS5wYXJhZ3JhcGg9QmUoY2UuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGNlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGNlLl90YWcpLmdldFJlZ2V4KCk7Y2UuYmxvY2txdW90ZT1CZShjZS5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLGNlLnBhcmFncmFwaCkuZ2V0UmVnZXgoKTtjZS5ub3JtYWw9ey4uLmNlfTtjZS5nZm09ey4uLmNlLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKilcXG4gezAsM30oKD86XFx8ICopPzo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKD86XFx8ICopPykoPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/OlxcbnwkKSkqKVxcbip8JCkifTtjZS5nZm0udGFibGU9QmUoY2UuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsY2UuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0oPzpcXHN8JCkiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixjZS5fdGFnKS5nZXRSZWdleCgpO2NlLmdmbS5wYXJhZ3JhcGg9QmUoY2UuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGNlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9KD86XFxzfCQpIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLGNlLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGNlLl90YWcpLmdldFJlZ2V4KCk7Y2UucGVkYW50aWM9ey4uLmNlLm5vcm1hbCxodG1sOkJlKGBeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xcMT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzoiW14iXSoifCdbXiddKid8XFxzW14nIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKWApLnJlcGxhY2UoImNvbW1lbnQiLGNlLl9jb21tZW50KS5yZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpMZCxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpCZShjZS5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLGNlLmhyKS5yZXBsYWNlKCJoZWFkaW5nIixgICojezEsNn0gKlteCl1gKS5yZXBsYWNlKCJsaGVhZGluZyIsY2UubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCBYPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOkxkLHRhZzoiXmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xbKGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14oPzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwqKykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9eW15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5jdF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDpMZCx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O1guX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iO1gucHVuY3R1YXRpb249QmUoWC5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2c7WC5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2c7WC5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZztYLl9jb21tZW50PUJlKGNlLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLT58JCkiLCItLT4iKS5nZXRSZWdleCgpO1guZW1TdHJvbmcubERlbGltPUJlKFguZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxYLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKTtYLmVtU3Ryb25nLnJEZWxpbUFzdD1CZShYLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLFguX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpO1guZW1TdHJvbmcuckRlbGltVW5kPUJlKFguZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5hbnlQdW5jdHVhdGlvbj1CZShYLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5fZXNjYXBlcz1CZShYLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWC5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCk7WC5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9LztYLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvO1guYXV0b2xpbms9QmUoWC5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixYLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixYLl9lbWFpbCkuZ2V0UmVnZXgoKTtYLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy87WC50YWc9QmUoWC50YWcpLnJlcGxhY2UoImNvbW1lbnQiLFguX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsWC5fYXR0cmlidXRlKS5nZXRSZWdleCgpO1guX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vO1guX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi87WC5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLztYLmxpbms9QmUoWC5saW5rKS5yZXBsYWNlKCJsYWJlbCIsWC5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLFguX2hyZWYpLnJlcGxhY2UoInRpdGxlIixYLl90aXRsZSkuZ2V0UmVnZXgoKTtYLnJlZmxpbms9QmUoWC5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsWC5fbGFiZWwpLnJlcGxhY2UoInJlZiIsY2UuX2xhYmVsKS5nZXRSZWdleCgpO1gubm9saW5rPUJlKFgubm9saW5rKS5yZXBsYWNlKCJyZWYiLGNlLl9sYWJlbCkuZ2V0UmVnZXgoKTtYLnJlZmxpbmtTZWFyY2g9QmUoWC5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsWC5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLFgubm9saW5rKS5nZXRSZWdleCgpO1gubm9ybWFsPXsuLi5YfTtYLnBlZGFudGljPXsuLi5YLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6QmUoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLFguX2xhYmVsKS5nZXRSZWdleCgpLHJlZmxpbms6QmUoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLFguX2xhYmVsKS5nZXRSZWdleCgpfTtYLmdmbT17Li4uWC5ub3JtYWwsZXNjYXBlOkJlKFguZXNjYXBlKS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2EtekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfTtYLmdmbS51cmw9QmUoWC5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLFguZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKTtYLmJyZWFrcz17Li4uWC5nZm0sYnI6QmUoWC5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6QmUoWC5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9O2NsYXNzIElye2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsInRva2VucyIpO1FlKHRoaXMsIm9wdGlvbnMiKTtRZSh0aGlzLCJzdGF0ZSIpO1FlKHRoaXMsInRva2VuaXplciIpO1FlKHRoaXMsImlubGluZVF1ZXVlIik7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnM9ZXx8cGwsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgRGQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2VuaXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBuPXtibG9jazpjZS5ub3JtYWwsaW5saW5lOlgubm9ybWFsfTt0aGlzLm9wdGlvbnMucGVkYW50aWM/KG4uYmxvY2s9Y2UucGVkYW50aWMsbi5pbmxpbmU9WC5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKG4uYmxvY2s9Y2UuZ2ZtLHRoaXMub3B0aW9ucy5icmVha3M/bi5pbmxpbmU9WC5icmVha3M6bi5pbmxpbmU9WC5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPW59c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazpjZSxpbmxpbmU6WH19c3RhdGljIGxleChlLG4pe3JldHVybiBuZXcgSXIobikubGV4KGUpfXN0YXRpYyBsZXhJbmxpbmUoZSxuKXtyZXR1cm4gbmV3IElyKG4pLmlubGluZVRva2VucyhlKX1sZXgoZSl7ZT1lLnJlcGxhY2UoL1xyXG58XHIvZyxgCmApLHRoaXMuYmxvY2tUb2tlbnMoZSx0aGlzLnRva2Vucyk7bGV0IG47Zm9yKDtuPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMobi5zcmMsbi50b2tlbnMpO3JldHVybiB0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhlLG49W10pe3RoaXMub3B0aW9ucy5wZWRhbnRpYz9lPWUucmVwbGFjZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmU9ZS5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChzLGEsYyk9PmErIiAgICAiLnJlcGVhdChjLmxlbmd0aCkpO2xldCByLGksbyxsO2Zvcig7ZTspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUocz0+KHI9cy5jYWxsKHtsZXhlcjp0aGlzfSxlLG4pKT8oZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKSwhMCk6ITEpKSl7aWYocj10aGlzLnRva2VuaXplci5zcGFjZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHIucmF3Lmxlbmd0aD09PTEmJm4ubGVuZ3RoPjA/bltuLmxlbmd0aC0xXS5yYXcrPWAKYDpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5jb2RlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJihpLnR5cGU9PT0icGFyYWdyYXBoInx8aS50eXBlPT09InRleHQiKT8oaS5yYXcrPWAKYCtyLnJhdyxpLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5mZW5jZXMoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5oZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuaHIoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIubGlzdChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmh0bWwoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWYoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxpPW5bbi5sZW5ndGgtMV0saSYmKGkudHlwZT09PSJwYXJhZ3JhcGgifHxpLnR5cGU9PT0idGV4dCIpPyhpLnJhdys9YApgK3IucmF3LGkudGV4dCs9YApgK3IucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWkudGV4dCk6dGhpcy50b2tlbnMubGlua3Nbci50YWddfHwodGhpcy50b2tlbnMubGlua3Nbci50YWddPXtocmVmOnIuaHJlZix0aXRsZTpyLnRpdGxlfSk7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci50YWJsZShlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKG89ZSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IHM9MS8wO2NvbnN0IGE9ZS5zbGljZSgxKTtsZXQgYzt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2godT0+e2M9dS5jYWxsKHtsZXhlcjp0aGlzfSxhKSx0eXBlb2YgYz09Im51bWJlciImJmM+PTAmJihzPU1hdGgubWluKHMsYykpfSksczwxLzAmJnM+PTAmJihvPWUuc3Vic3RyaW5nKDAscysxKSl9aWYodGhpcy5zdGF0ZS50b3AmJihyPXRoaXMudG9rZW5pemVyLnBhcmFncmFwaChvKSkpe2k9bltuLmxlbmd0aC0xXSxsJiZpLnR5cGU9PT0icGFyYWdyYXBoIj8oaS5yYXcrPWAKYCtyLnJhdyxpLnRleHQrPWAKYCtyLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1pLnRleHQpOm4ucHVzaChyKSxsPW8ubGVuZ3RoIT09ZS5sZW5ndGgsZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGV4dChlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLGk9bltuLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1gCmArci5yYXcsaS50ZXh0Kz1gCmArci50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aS50ZXh0KTpuLnB1c2gocik7Y29udGludWV9aWYoZSl7Y29uc3Qgcz0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2UuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKHMpO2JyZWFrfWVsc2UgdGhyb3cgbmV3IEVycm9yKHMpfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsbn1pbmxpbmUoZSxuPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6ZSx0b2tlbnM6bn0pLG59aW5saW5lVG9rZW5zKGUsbj1bXSl7bGV0IHIsaSxvLGw9ZSxzLGEsYztpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgdT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYodS5sZW5ndGg+MClmb3IoOyhzPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMobCkpIT1udWxsOyl1LmluY2x1ZGVzKHNbMF0uc2xpY2Uoc1swXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKGw9bC5zbGljZSgwLHMuaW5kZXgpKyJbIisiYSIucmVwZWF0KHNbMF0ubGVuZ3RoLTIpKyJdIitsLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkpfWZvcig7KHM9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKGwpKSE9bnVsbDspbD1sLnNsaWNlKDAscy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoc1swXS5sZW5ndGgtMikrIl0iK2wuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5sYXN0SW5kZXgpO2Zvcig7KHM9dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWMobCkpIT1udWxsOylsPWwuc2xpY2UoMCxzLmluZGV4KSsiKysiK2wuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7Zm9yKDtlOylpZihhfHwoYz0iIiksYT0hMSwhKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKHU9PihyPXUuY2FsbCh7bGV4ZXI6dGhpc30sZSxuKSk/KGU9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gociksITApOiExKSkpe2lmKHI9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIudGFnKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJnIudHlwZT09PSJ0ZXh0IiYmaS50eXBlPT09InRleHQiPyhpLnJhdys9ci5yYXcsaS50ZXh0Kz1yLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmxpbmsoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5yZWZsaW5rKGUsdGhpcy50b2tlbnMubGlua3MpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksaT1uW24ubGVuZ3RoLTFdLGkmJnIudHlwZT09PSJ0ZXh0IiYmaS50eXBlPT09InRleHQiPyhpLnJhdys9ci5yYXcsaS50ZXh0Kz1yLnRleHQpOm4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGUsbCxjKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZihyPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGUpKXtlPWUuc3Vic3RyaW5nKHIucmF3Lmxlbmd0aCksbi5wdXNoKHIpO2NvbnRpbnVlfWlmKHI9dGhpcy50b2tlbml6ZXIuYnIoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5kZWwoZSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYocj10aGlzLnRva2VuaXplci5hdXRvbGluayhlKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLG4ucHVzaChyKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihyPXRoaXMudG9rZW5pemVyLnVybChlKSkpe2U9ZS5zdWJzdHJpbmcoci5yYXcubGVuZ3RoKSxuLnB1c2gocik7Y29udGludWV9aWYobz1lLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSl7bGV0IHU9MS8wO2NvbnN0IGQ9ZS5zbGljZSgxKTtsZXQgZjt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZS5mb3JFYWNoKHA9PntmPXAuY2FsbCh7bGV4ZXI6dGhpc30sZCksdHlwZW9mIGY9PSJudW1iZXIiJiZmPj0wJiYodT1NYXRoLm1pbih1LGYpKX0pLHU8MS8wJiZ1Pj0wJiYobz1lLnN1YnN0cmluZygwLHUrMSkpfWlmKHI9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChvKSl7ZT1lLnN1YnN0cmluZyhyLnJhdy5sZW5ndGgpLHIucmF3LnNsaWNlKC0xKSE9PSJfIiYmKGM9ci5yYXcuc2xpY2UoLTEpKSxhPSEwLGk9bltuLmxlbmd0aC0xXSxpJiZpLnR5cGU9PT0idGV4dCI/KGkucmF3Kz1yLnJhdyxpLnRleHQrPXIudGV4dCk6bi5wdXNoKHIpO2NvbnRpbnVlfWlmKGUpe2NvbnN0IHU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitlLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcih1KTticmVha31lbHNlIHRocm93IG5ldyBFcnJvcih1KX19cmV0dXJuIG59fWNsYXNzIElke2NvbnN0cnVjdG9yKGUpe1FlKHRoaXMsIm9wdGlvbnMiKTt0aGlzLm9wdGlvbnM9ZXx8cGx9Y29kZShlLG4scil7dmFyIG87Y29uc3QgaT0obz0obnx8IiIpLm1hdGNoKC9eXFMqLykpPT1udWxsP3ZvaWQgMDpvWzBdO3JldHVybiBlPWUucmVwbGFjZSgvXG4kLywiIikrYApgLGk/JzxwcmU+PGNvZGUgY2xhc3M9Imxhbmd1YWdlLScrRG4oaSkrJyI+Jysocj9lOkRuKGUsITApKStgPC9jb2RlPjwvcHJlPgpgOiI8cHJlPjxjb2RlPiIrKHI/ZTpEbihlLCEwKSkrYDwvY29kZT48L3ByZT4KYH1ibG9ja3F1b3RlKGUpe3JldHVybmA8YmxvY2txdW90ZT4KJHtlfTwvYmxvY2txdW90ZT4KYH1odG1sKGUsbil7cmV0dXJuIGV9aGVhZGluZyhlLG4scil7cmV0dXJuYDxoJHtufT4ke2V9PC9oJHtufT4KYH1ocigpe3JldHVybmA8aHI+CmB9bGlzdChlLG4scil7Y29uc3QgaT1uPyJvbCI6InVsIixvPW4mJnIhPT0xPycgc3RhcnQ9IicrcisnIic6IiI7cmV0dXJuIjwiK2krbytgPgpgK2UrIjwvIitpK2A+CmB9bGlzdGl0ZW0oZSxuLHIpe3JldHVybmA8bGk+JHtlfTwvbGk+CmB9Y2hlY2tib3goZSl7cmV0dXJuIjxpbnB1dCAiKyhlPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCI+J31wYXJhZ3JhcGgoZSl7cmV0dXJuYDxwPiR7ZX08L3A+CmB9dGFibGUoZSxuKXtyZXR1cm4gbiYmKG49YDx0Ym9keT4ke259PC90Ym9keT5gKSxgPHRhYmxlPgo8dGhlYWQ+CmArZStgPC90aGVhZD4KYCtuK2A8L3RhYmxlPgpgfXRhYmxlcm93KGUpe3JldHVybmA8dHI+CiR7ZX08L3RyPgpgfXRhYmxlY2VsbChlLG4pe2NvbnN0IHI9bi5oZWFkZXI/InRoIjoidGQiO3JldHVybihuLmFsaWduP2A8JHtyfSBhbGlnbj0iJHtuLmFsaWdufSI+YDpgPCR7cn0+YCkrZStgPC8ke3J9PgpgfXN0cm9uZyhlKXtyZXR1cm5gPHN0cm9uZz4ke2V9PC9zdHJvbmc+YH1lbShlKXtyZXR1cm5gPGVtPiR7ZX08L2VtPmB9Y29kZXNwYW4oZSl7cmV0dXJuYDxjb2RlPiR7ZX08L2NvZGU+YH1icigpe3JldHVybiI8YnI+In1kZWwoZSl7cmV0dXJuYDxkZWw+JHtlfTwvZGVsPmB9bGluayhlLG4scil7Y29uc3QgaT1weChlKTtpZihpPT09bnVsbClyZXR1cm4gcjtlPWk7bGV0IG89JzxhIGhyZWY9IicrZSsnIic7cmV0dXJuIG4mJihvKz0nIHRpdGxlPSInK24rJyInKSxvKz0iPiIrcisiPC9hPiIsb31pbWFnZShlLG4scil7Y29uc3QgaT1weChlKTtpZihpPT09bnVsbClyZXR1cm4gcjtlPWk7bGV0IG89YDxpbWcgc3JjPSIke2V9IiBhbHQ9IiR7cn0iYDtyZXR1cm4gbiYmKG8rPWAgdGl0bGU9IiR7bn0iYCksbys9Ij4iLG99dGV4dChlKXtyZXR1cm4gZX19Y2xhc3MgT3Z7c3Ryb25nKGUpe3JldHVybiBlfWVtKGUpe3JldHVybiBlfWNvZGVzcGFuKGUpe3JldHVybiBlfWRlbChlKXtyZXR1cm4gZX1odG1sKGUpe3JldHVybiBlfXRleHQoZSl7cmV0dXJuIGV9bGluayhlLG4scil7cmV0dXJuIiIrcn1pbWFnZShlLG4scil7cmV0dXJuIiIrcn1icigpe3JldHVybiIifX1jbGFzcyBqcntjb25zdHJ1Y3RvcihlKXtRZSh0aGlzLCJvcHRpb25zIik7UWUodGhpcywicmVuZGVyZXIiKTtRZSh0aGlzLCJ0ZXh0UmVuZGVyZXIiKTt0aGlzLm9wdGlvbnM9ZXx8cGwsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IElkLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IE92fXN0YXRpYyBwYXJzZShlLG4pe3JldHVybiBuZXcganIobikucGFyc2UoZSl9c3RhdGljIHBhcnNlSW5saW5lKGUsbil7cmV0dXJuIG5ldyBqcihuKS5wYXJzZUlubGluZShlKX1wYXJzZShlLG49ITApe2xldCByPSIiO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWVbaV07aWYodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW28udHlwZV0pe2NvbnN0IGw9byxzPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tsLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxsKTtpZihzIT09ITF8fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKGwudHlwZSkpe3IrPXN8fCIiO2NvbnRpbnVlfX1zd2l0Y2goby50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjp7cis9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlfWNhc2UiaGVhZGluZyI6e2NvbnN0IGw9bztyKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShsLnRva2VucyksbC5kZXB0aCxtTyh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSkpO2NvbnRpbnVlfWNhc2UiY29kZSI6e2NvbnN0IGw9bztyKz10aGlzLnJlbmRlcmVyLmNvZGUobC50ZXh0LGwubGFuZywhIWwuZXNjYXBlZCk7Y29udGludWV9Y2FzZSJ0YWJsZSI6e2NvbnN0IGw9bztsZXQgcz0iIixhPSIiO2ZvcihsZXQgdT0wO3U8bC5oZWFkZXIubGVuZ3RoO3UrKylhKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGwuaGVhZGVyW3VdLnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpsLmFsaWduW3VdfSk7cys9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhhKTtsZXQgYz0iIjtmb3IobGV0IHU9MDt1PGwucm93cy5sZW5ndGg7dSsrKXtjb25zdCBkPWwucm93c1t1XTthPSIiO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWErPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoZFtmXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246bC5hbGlnbltmXX0pO2MrPXRoaXMucmVuZGVyZXIudGFibGVyb3coYSl9cis9dGhpcy5yZW5kZXJlci50YWJsZShzLGMpO2NvbnRpbnVlfWNhc2UiYmxvY2txdW90ZSI6e2NvbnN0IGw9byxzPXRoaXMucGFyc2UobC50b2tlbnMpO3IrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShzKTtjb250aW51ZX1jYXNlImxpc3QiOntjb25zdCBsPW8scz1sLm9yZGVyZWQsYT1sLnN0YXJ0LGM9bC5sb29zZTtsZXQgdT0iIjtmb3IobGV0IGQ9MDtkPGwuaXRlbXMubGVuZ3RoO2QrKyl7Y29uc3QgZj1sLml0ZW1zW2RdLHA9Zi5jaGVja2VkLGc9Zi50YXNrO2xldCBtPSIiO2lmKGYudGFzayl7Y29uc3Qgdz10aGlzLnJlbmRlcmVyLmNoZWNrYm94KCEhcCk7Yz9mLnRva2Vucy5sZW5ndGg+MCYmZi50b2tlbnNbMF0udHlwZT09PSJwYXJhZ3JhcGgiPyhmLnRva2Vuc1swXS50ZXh0PXcrIiAiK2YudG9rZW5zWzBdLnRleHQsZi50b2tlbnNbMF0udG9rZW5zJiZmLnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJmYudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlPT09InRleHQiJiYoZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9dysiICIrZi50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpmLnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OncrIiAifSk6bSs9dysiICJ9bSs9dGhpcy5wYXJzZShmLnRva2VucyxjKSx1Kz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKG0sZywhIXApfXIrPXRoaXMucmVuZGVyZXIubGlzdCh1LHMsYSk7Y29udGludWV9Y2FzZSJodG1sIjp7Y29uc3QgbD1vO3IrPXRoaXMucmVuZGVyZXIuaHRtbChsLnRleHQsbC5ibG9jayk7Y29udGludWV9Y2FzZSJwYXJhZ3JhcGgiOntjb25zdCBsPW87cis9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShsLnRva2VucykpO2NvbnRpbnVlfWNhc2UidGV4dCI6e2xldCBsPW8scz1sLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zKTpsLnRleHQ7Zm9yKDtpKzE8ZS5sZW5ndGgmJmVbaSsxXS50eXBlPT09InRleHQiOylsPWVbKytpXSxzKz1gCmArKGwudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUobC50b2tlbnMpOmwudGV4dCk7cis9bj90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChzKTpzO2NvbnRpbnVlfWRlZmF1bHQ6e2NvbnN0IGw9J1Rva2VuIHdpdGggIicrby50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIGNvbnNvbGUuZXJyb3IobCksIiI7dGhyb3cgbmV3IEVycm9yKGwpfX19cmV0dXJuIHJ9cGFyc2VJbmxpbmUoZSxuKXtuPW58fHRoaXMucmVuZGVyZXI7bGV0IHI9IiI7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IG89ZVtpXTtpZih0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXSl7Y29uc3QgbD10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbby50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sbyk7aWYobCE9PSExfHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKG8udHlwZSkpe3IrPWx8fCIiO2NvbnRpbnVlfX1zd2l0Y2goby50eXBlKXtjYXNlImVzY2FwZSI6e2NvbnN0IGw9bztyKz1uLnRleHQobC50ZXh0KTticmVha31jYXNlImh0bWwiOntjb25zdCBsPW87cis9bi5odG1sKGwudGV4dCk7YnJlYWt9Y2FzZSJsaW5rIjp7Y29uc3QgbD1vO3IrPW4ubGluayhsLmhyZWYsbC50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlImltYWdlIjp7Y29uc3QgbD1vO3IrPW4uaW1hZ2UobC5ocmVmLGwudGl0bGUsbC50ZXh0KTticmVha31jYXNlInN0cm9uZyI6e2NvbnN0IGw9bztyKz1uLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlImVtIjp7Y29uc3QgbD1vO3IrPW4uZW0odGhpcy5wYXJzZUlubGluZShsLnRva2VucyxuKSk7YnJlYWt9Y2FzZSJjb2Rlc3BhbiI6e2NvbnN0IGw9bztyKz1uLmNvZGVzcGFuKGwudGV4dCk7YnJlYWt9Y2FzZSJiciI6e3IrPW4uYnIoKTticmVha31jYXNlImRlbCI6e2NvbnN0IGw9bztyKz1uLmRlbCh0aGlzLnBhcnNlSW5saW5lKGwudG9rZW5zLG4pKTticmVha31jYXNlInRleHQiOntjb25zdCBsPW87cis9bi50ZXh0KGwudGV4dCk7YnJlYWt9ZGVmYXVsdDp7Y29uc3QgbD0nVG9rZW4gd2l0aCAiJytvLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihsKSwiIjt0aHJvdyBuZXcgRXJyb3IobCl9fX1yZXR1cm4gcn19Y2xhc3MgTWF7Y29uc3RydWN0b3IoZSl7UWUodGhpcywib3B0aW9ucyIpO3RoaXMub3B0aW9ucz1lfHxwbH1wcmVwcm9jZXNzKGUpe3JldHVybiBlfXBvc3Rwcm9jZXNzKGUpe3JldHVybiBlfX1RZShNYSwicGFzc1Rocm91Z2hIb29rcyIsbmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSk7dmFyIFJjLFRtLGNmLElFO2NsYXNzIHhPe2NvbnN0cnVjdG9yKC4uLmUpe3VwKHRoaXMsUmMpO3VwKHRoaXMsY2YpO1FlKHRoaXMsImRlZmF1bHRzIixSdigpKTtRZSh0aGlzLCJvcHRpb25zIix0aGlzLnNldE9wdGlvbnMpO1FlKHRoaXMsInBhcnNlIixYYyh0aGlzLFJjLFRtKS5jYWxsKHRoaXMsSXIubGV4LGpyLnBhcnNlKSk7UWUodGhpcywicGFyc2VJbmxpbmUiLFhjKHRoaXMsUmMsVG0pLmNhbGwodGhpcyxJci5sZXhJbmxpbmUsanIucGFyc2VJbmxpbmUpKTtRZSh0aGlzLCJQYXJzZXIiLGpyKTtRZSh0aGlzLCJSZW5kZXJlciIsSWQpO1FlKHRoaXMsIlRleHRSZW5kZXJlciIsT3YpO1FlKHRoaXMsIkxleGVyIixJcik7UWUodGhpcywiVG9rZW5pemVyIixEZCk7UWUodGhpcywiSG9va3MiLE1hKTt0aGlzLnVzZSguLi5lKX13YWxrVG9rZW5zKGUsbil7dmFyIGksbztsZXQgcj1bXTtmb3IoY29uc3QgbCBvZiBlKXN3aXRjaChyPXIuY29uY2F0KG4uY2FsbCh0aGlzLGwpKSxsLnR5cGUpe2Nhc2UidGFibGUiOntjb25zdCBzPWw7Zm9yKGNvbnN0IGEgb2Ygcy5oZWFkZXIpcj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoYS50b2tlbnMsbikpO2Zvcihjb25zdCBhIG9mIHMucm93cylmb3IoY29uc3QgYyBvZiBhKXI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKGMudG9rZW5zLG4pKTticmVha31jYXNlImxpc3QiOntjb25zdCBzPWw7cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMocy5pdGVtcyxuKSk7YnJlYWt9ZGVmYXVsdDp7Y29uc3Qgcz1sOyhvPShpPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyk9PW51bGw/dm9pZCAwOmkuY2hpbGRUb2tlbnMpIT1udWxsJiZvW3MudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW3MudHlwZV0uZm9yRWFjaChhPT57cj1yLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoc1thXSxuKSl9KTpzLnRva2VucyYmKHI9ci5jb25jYXQodGhpcy53YWxrVG9rZW5zKHMudG9rZW5zLG4pKSl9fXJldHVybiByfXVzZSguLi5lKXtjb25zdCBuPXRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9uc3x8e3JlbmRlcmVyczp7fSxjaGlsZFRva2Vuczp7fX07cmV0dXJuIGUuZm9yRWFjaChyPT57Y29uc3QgaT17Li4ucn07aWYoaS5hc3luYz10aGlzLmRlZmF1bHRzLmFzeW5jfHxpLmFzeW5jfHwhMSxyLmV4dGVuc2lvbnMmJihyLmV4dGVuc2lvbnMuZm9yRWFjaChvPT57aWYoIW8ubmFtZSl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBuYW1lIHJlcXVpcmVkIik7aWYoInJlbmRlcmVyImluIG8pe2NvbnN0IGw9bi5yZW5kZXJlcnNbby5uYW1lXTtsP24ucmVuZGVyZXJzW28ubmFtZV09ZnVuY3Rpb24oLi4ucyl7bGV0IGE9by5yZW5kZXJlci5hcHBseSh0aGlzLHMpO3JldHVybiBhPT09ITEmJihhPWwuYXBwbHkodGhpcyxzKSksYX06bi5yZW5kZXJlcnNbby5uYW1lXT1vLnJlbmRlcmVyfWlmKCJ0b2tlbml6ZXIiaW4gbyl7aWYoIW8ubGV2ZWx8fG8ubGV2ZWwhPT0iYmxvY2siJiZvLmxldmVsIT09ImlubGluZSIpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7Y29uc3QgbD1uW28ubGV2ZWxdO2w/bC51bnNoaWZ0KG8udG9rZW5pemVyKTpuW28ubGV2ZWxdPVtvLnRva2VuaXplcl0sby5zdGFydCYmKG8ubGV2ZWw9PT0iYmxvY2siP24uc3RhcnRCbG9jaz9uLnN0YXJ0QmxvY2sucHVzaChvLnN0YXJ0KTpuLnN0YXJ0QmxvY2s9W28uc3RhcnRdOm8ubGV2ZWw9PT0iaW5saW5lIiYmKG4uc3RhcnRJbmxpbmU/bi5zdGFydElubGluZS5wdXNoKG8uc3RhcnQpOm4uc3RhcnRJbmxpbmU9W28uc3RhcnRdKSl9ImNoaWxkVG9rZW5zImluIG8mJm8uY2hpbGRUb2tlbnMmJihuLmNoaWxkVG9rZW5zW28ubmFtZV09by5jaGlsZFRva2Vucyl9KSxpLmV4dGVuc2lvbnM9biksci5yZW5kZXJlcil7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgSWQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IGwgaW4gci5yZW5kZXJlcil7Y29uc3Qgcz1yLnJlbmRlcmVyW2xdLGE9bCxjPW9bYV07b1thXT0oLi4udSk9PntsZXQgZD1zLmFwcGx5KG8sdSk7cmV0dXJuIGQ9PT0hMSYmKGQ9Yy5hcHBseShvLHUpKSxkfHwiIn19aS5yZW5kZXJlcj1vfWlmKHIudG9rZW5pemVyKXtjb25zdCBvPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgRGQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IGwgaW4gci50b2tlbml6ZXIpe2NvbnN0IHM9ci50b2tlbml6ZXJbbF0sYT1sLGM9b1thXTtvW2FdPSguLi51KT0+e2xldCBkPXMuYXBwbHkobyx1KTtyZXR1cm4gZD09PSExJiYoZD1jLmFwcGx5KG8sdSkpLGR9fWkudG9rZW5pemVyPW99aWYoci5ob29rcyl7Y29uc3Qgbz10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgTWE7Zm9yKGNvbnN0IGwgaW4gci5ob29rcyl7Y29uc3Qgcz1yLmhvb2tzW2xdLGE9bCxjPW9bYV07TWEucGFzc1Rocm91Z2hIb29rcy5oYXMobCk/b1thXT11PT57aWYodGhpcy5kZWZhdWx0cy5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMuY2FsbChvLHUpKS50aGVuKGY9PmMuY2FsbChvLGYpKTtjb25zdCBkPXMuY2FsbChvLHUpO3JldHVybiBjLmNhbGwobyxkKX06b1thXT0oLi4udSk9PntsZXQgZD1zLmFwcGx5KG8sdSk7cmV0dXJuIGQ9PT0hMSYmKGQ9Yy5hcHBseShvLHUpKSxkfX1pLmhvb2tzPW99aWYoci53YWxrVG9rZW5zKXtjb25zdCBvPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucyxsPXIud2Fsa1Rva2VucztpLndhbGtUb2tlbnM9ZnVuY3Rpb24ocyl7bGV0IGE9W107cmV0dXJuIGEucHVzaChsLmNhbGwodGhpcyxzKSksbyYmKGE9YS5jb25jYXQoby5jYWxsKHRoaXMscykpKSxhfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLml9fSksdGhpc31zZXRPcHRpb25zKGUpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmV9LHRoaXN9bGV4ZXIoZSxuKXtyZXR1cm4gSXIubGV4KGUsbj8/dGhpcy5kZWZhdWx0cyl9cGFyc2VyKGUsbil7cmV0dXJuIGpyLnBhcnNlKGUsbj8/dGhpcy5kZWZhdWx0cyl9fVJjPW5ldyBXZWFrU2V0LFRtPWZ1bmN0aW9uKGUsbil7cmV0dXJuKHIsaSk9Pntjb25zdCBvPXsuLi5pfSxsPXsuLi50aGlzLmRlZmF1bHRzLC4uLm99O3RoaXMuZGVmYXVsdHMuYXN5bmM9PT0hMCYmby5hc3luYz09PSExJiYobC5zaWxlbnR8fGNvbnNvbGUud2FybigibWFya2VkKCk6IFRoZSBhc3luYyBvcHRpb24gd2FzIHNldCB0byB0cnVlIGJ5IGFuIGV4dGVuc2lvbi4gVGhlIGFzeW5jOiBmYWxzZSBvcHRpb24gc2VudCB0byBwYXJzZSB3aWxsIGJlIGlnbm9yZWQuIiksbC5hc3luYz0hMCk7Y29uc3Qgcz1YYyh0aGlzLGNmLElFKS5jYWxsKHRoaXMsISFsLnNpbGVudCwhIWwuYXN5bmMpO2lmKHR5cGVvZiByPiJ1Inx8cj09PW51bGwpcmV0dXJuIHMobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKHR5cGVvZiByIT0ic3RyaW5nIilyZXR1cm4gcyhuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSsiLCBzdHJpbmcgZXhwZWN0ZWQiKSk7aWYobC5ob29rcyYmKGwuaG9va3Mub3B0aW9ucz1sKSxsLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUobC5ob29rcz9sLmhvb2tzLnByZXByb2Nlc3Mocik6cikudGhlbihhPT5lKGEsbCkpLnRoZW4oYT0+bC53YWxrVG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhhLGwud2Fsa1Rva2VucykpLnRoZW4oKCk9PmEpOmEpLnRoZW4oYT0+bihhLGwpKS50aGVuKGE9PmwuaG9va3M/bC5ob29rcy5wb3N0cHJvY2VzcyhhKTphKS5jYXRjaChzKTt0cnl7bC5ob29rcyYmKHI9bC5ob29rcy5wcmVwcm9jZXNzKHIpKTtjb25zdCBhPWUocixsKTtsLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhhLGwud2Fsa1Rva2Vucyk7bGV0IGM9bihhLGwpO3JldHVybiBsLmhvb2tzJiYoYz1sLmhvb2tzLnBvc3Rwcm9jZXNzKGMpKSxjfWNhdGNoKGEpe3JldHVybiBzKGEpfX19LGNmPW5ldyBXZWFrU2V0LElFPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHI9PntpZihyLm1lc3NhZ2UrPWAKUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuYCxlKXtjb25zdCBpPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK0RuKHIubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7cmV0dXJuIG4/UHJvbWlzZS5yZXNvbHZlKGkpOml9aWYobilyZXR1cm4gUHJvbWlzZS5yZWplY3Qocik7dGhyb3cgcn19O2NvbnN0IHFvPW5ldyB4TztmdW5jdGlvbiBWZSh0LGUpe3JldHVybiBxby5wYXJzZSh0LGUpfVZlLm9wdGlvbnM9VmUuc2V0T3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gcW8uc2V0T3B0aW9ucyh0KSxWZS5kZWZhdWx0cz1xby5kZWZhdWx0cyxNRShWZS5kZWZhdWx0cyksVmV9O1ZlLmdldERlZmF1bHRzPVJ2O1ZlLmRlZmF1bHRzPXBsO1ZlLnVzZT1mdW5jdGlvbiguLi50KXtyZXR1cm4gcW8udXNlKC4uLnQpLFZlLmRlZmF1bHRzPXFvLmRlZmF1bHRzLE1FKFZlLmRlZmF1bHRzKSxWZX07VmUud2Fsa1Rva2Vucz1mdW5jdGlvbih0LGUpe3JldHVybiBxby53YWxrVG9rZW5zKHQsZSl9O1ZlLnBhcnNlSW5saW5lPXFvLnBhcnNlSW5saW5lO1ZlLlBhcnNlcj1qcjtWZS5wYXJzZXI9anIucGFyc2U7VmUuUmVuZGVyZXI9SWQ7VmUuVGV4dFJlbmRlcmVyPU92O1ZlLkxleGVyPUlyO1ZlLmxleGVyPUlyLmxleDtWZS5Ub2tlbml6ZXI9RGQ7VmUuSG9va3M9TWE7VmUucGFyc2U9VmU7VmUub3B0aW9ucztWZS5zZXRPcHRpb25zO1ZlLnVzZTtWZS53YWxrVG9rZW5zO1ZlLnBhcnNlSW5saW5lO2pyLnBhcnNlO2NvbnN0IF9PPUlyLmxleDtmdW5jdGlvbiB3Tyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0fWZ1bmN0aW9uIFNPKHQsZSl7dmFyIG49dD09bnVsbD9udWxsOnR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZihuIT1udWxsKXt2YXIgcixpLG8sbCxzPVtdLGE9ITAsYz0hMTt0cnl7aWYobz0obj1uLmNhbGwodCkpLm5leHQsZT09PTApe2lmKE9iamVjdChuKSE9PW4pcmV0dXJuO2E9ITF9ZWxzZSBmb3IoOyEoYT0ocj1vLmNhbGwobikpLmRvbmUpJiYocy5wdXNoKHIudmFsdWUpLHMubGVuZ3RoIT09ZSk7YT0hMCk7fWNhdGNoKHUpe2M9ITAsaT11fWZpbmFsbHl7dHJ5e2lmKCFhJiZuLnJldHVybiE9bnVsbCYmKGw9bi5yZXR1cm4oKSxPYmplY3QobCkhPT1sKSlyZXR1cm59ZmluYWxseXtpZihjKXRocm93IGl9fXJldHVybiBzfX1mdW5jdGlvbiBObSh0LGUpeyhlPT1udWxsfHxlPnQubGVuZ3RoKSYmKGU9dC5sZW5ndGgpO2Zvcih2YXIgbj0wLHI9bmV3IEFycmF5KGUpO248ZTtuKyspcltuXT10W25dO3JldHVybiByfWZ1bmN0aW9uIFB2KHQsZSl7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiBObSh0LGUpO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtpZihuPT09Ik9iamVjdCImJnQuY29uc3RydWN0b3ImJihuPXQuY29uc3RydWN0b3IubmFtZSksbj09PSJNYXAifHxuPT09IlNldCIpcmV0dXJuIEFycmF5LmZyb20odCk7aWYobj09PSJBcmd1bWVudHMifHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSlyZXR1cm4gTm0odCxlKX19ZnVuY3Rpb24gRU8oKXt0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gakUodCxlKXtyZXR1cm4gd08odCl8fFNPKHQsZSl8fFB2KHQsZSl8fEVPKCl9ZnVuY3Rpb24gQ08odCxlKXtpZih0eXBlb2YgdCE9Im9iamVjdCJ8fHQ9PT1udWxsKXJldHVybiB0O3ZhciBuPXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZihuIT09dm9pZCAwKXt2YXIgcj1uLmNhbGwodCxlfHwiZGVmYXVsdCIpO2lmKHR5cGVvZiByIT0ib2JqZWN0IilyZXR1cm4gcjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybihlPT09InN0cmluZyI/U3RyaW5nOk51bWJlcikodCl9ZnVuY3Rpb24gYk8odCl7dmFyIGU9Q08odCwic3RyaW5nIik7cmV0dXJuIHR5cGVvZiBlPT0ic3ltYm9sIj9lOlN0cmluZyhlKX1mdW5jdGlvbiBxdCh0LGUsbil7cmV0dXJuIGU9Yk8oZSksZSBpbiB0P09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1mdW5jdGlvbiBrTyh0LGUpe3ZhciBuPXR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl18fHRbIkBAaXRlcmF0b3IiXTtpZighbil7aWYoQXJyYXkuaXNBcnJheSh0KXx8KG49UHYodCkpfHxlJiZ0JiZ0eXBlb2YgdC5sZW5ndGg9PSJudW1iZXIiKXtuJiYodD1uKTt2YXIgcj0wLGk9ZnVuY3Rpb24oKXt9O3JldHVybntzOmksbjpmdW5jdGlvbigpe3JldHVybiByPj10Lmxlbmd0aD97ZG9uZTohMH06e2RvbmU6ITEsdmFsdWU6dFtyKytdfX0sZTpmdW5jdGlvbihhKXt0aHJvdyBhfSxmOml9fXRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS4KSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLmApfXZhciBvPSEwLGw9ITEscztyZXR1cm57czpmdW5jdGlvbigpe249bi5jYWxsKHQpfSxuOmZ1bmN0aW9uKCl7dmFyIGE9bi5uZXh0KCk7cmV0dXJuIG89YS5kb25lLGF9LGU6ZnVuY3Rpb24oYSl7bD0hMCxzPWF9LGY6ZnVuY3Rpb24oKXt0cnl7IW8mJm4ucmV0dXJuIT1udWxsJiZuLnJldHVybigpfWZpbmFsbHl7aWYobCl0aHJvdyBzfX19fWZ1bmN0aW9uICRPKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIE5tKHQpfWZ1bmN0aW9uIFRPKHQpe2lmKHR5cGVvZiBTeW1ib2w8InUiJiZ0W1N5bWJvbC5pdGVyYXRvcl0hPW51bGx8fHRbIkBAaXRlcmF0b3IiXSE9bnVsbClyZXR1cm4gQXJyYXkuZnJvbSh0KX1mdW5jdGlvbiBOTygpe3Rocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLgpJbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuYCl9ZnVuY3Rpb24gUm0odCl7cmV0dXJuICRPKHQpfHxUTyh0KXx8UHYodCl8fE5PKCl9dmFyIFJPPXt4M2Q6ImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkIiwiM2dwIjoidmlkZW8vM2dwcCIsIjNnMiI6InZpZGVvLzNncHAyIixtc2VxOiJhcHBsaWNhdGlvbi92bmQubXNlcSIscHduOiJhcHBsaWNhdGlvbi92bmQuM20ucG9zdC1pdC1ub3RlcyIscGxiOiJhcHBsaWNhdGlvbi92bmQuM2dwcC5waWMtYnctbGFyZ2UiLHBzYjoiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsIixwdmI6ImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBpYy1idy12YXIiLHRjYXA6ImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi50Y2FwIiwiN3oiOiJhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQiLGFidzoiYXBwbGljYXRpb24veC1hYml3b3JkIixhY2U6ImFwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWQiLGFjYzoiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjIixhY3U6ImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbCIsYXRjOiJhcHBsaWNhdGlvbi92bmQuYWN1Y29ycCIsYWRwOiJhdWRpby9hZHBjbSIsYWFiOiJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluIixhYW06ImFwcGxpY2F0aW9uL3gtYXV0aG9yd2FyZS1tYXAiLGFhczoiYXBwbGljYXRpb24veC1hdXRob3J3YXJlLXNlZyIsYWlyOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUuYWlyLWFwcGxpY2F0aW9uLWluc3RhbGxlci1wYWNrYWdlK3ppcCIsc3dmOiJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsZnhwOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZnhwIixwZGY6ImFwcGxpY2F0aW9uL3BkZiIscHBkOiJhcHBsaWNhdGlvbi92bmQuY3Vwcy1wcGQiLGRpcjoiYXBwbGljYXRpb24veC1kaXJlY3RvciIseGRwOiJhcHBsaWNhdGlvbi92bmQuYWRvYmUueGRwK3htbCIseGZkZjoiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhmZGYiLGFhYzoiYXVkaW8veC1hYWMiLGFoZWFkOiJhcHBsaWNhdGlvbi92bmQuYWhlYWQuc3BhY2UiLGF6ZjoiYXBwbGljYXRpb24vdm5kLmFpcnppcC5maWxlc2VjdXJlLmF6ZiIsYXpzOiJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzIixhenc6ImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2siLGFtaToiYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaSIsIk4vQSI6ImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldCIsYXBrOiJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmUiLGNpaToiYXBwbGljYXRpb24vdm5kLmFuc2VyLXdlYi1jZXJ0aWZpY2F0ZS1pc3N1ZS1pbml0aWF0aW9uIixmdGk6ImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItZnVuZHMtdHJhbnNmZXItaW5pdGlhdGlvbiIsYXR4OiJhcHBsaWNhdGlvbi92bmQuYW50aXguZ2FtZS1jb21wb25lbnQiLGRtZzoiYXBwbGljYXRpb24veC1hcHBsZS1kaXNraW1hZ2UiLG1wa2c6ImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5pbnN0YWxsZXIreG1sIixhdzoiYXBwbGljYXRpb24vYXBwbGl4d2FyZSIsbXAzOiJhdWRpby9tcGVnIixsZXM6ImFwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllciIsc3dpOiJhcHBsaWNhdGlvbi92bmQuYXJpc3RhbmV0d29ya3Muc3dpIixzOiJ0ZXh0L3gtYXNtIixhdG9tY2F0OiJhcHBsaWNhdGlvbi9hdG9tY2F0K3htbCIsYXRvbXN2YzoiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWwiLGF0b206ImFwcGxpY2F0aW9uL2F0b20reG1sIixhYzoiYXBwbGljYXRpb24vcGtpeC1hdHRyLWNlcnQiLGFpZjoiYXVkaW8veC1haWZmIixhdmk6InZpZGVvL3gtbXN2aWRlbyIsYWVwOiJhcHBsaWNhdGlvbi92bmQuYXVkaW9ncmFwaCIsZHhmOiJpbWFnZS92bmQuZHhmIixkd2Y6Im1vZGVsL3ZuZC5kd2YiLHBhcjoidGV4dC9wbGFpbi1iYXMiLGJjcGlvOiJhcHBsaWNhdGlvbi94LWJjcGlvIixiaW46ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsYm1wOiJpbWFnZS9ibXAiLHRvcnJlbnQ6ImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsY29kOiJhcHBsaWNhdGlvbi92bmQucmltLmNvZCIsbXBtOiJhcHBsaWNhdGlvbi92bmQuYmx1ZWljZS5tdWx0aXBhc3MiLGJtaToiYXBwbGljYXRpb24vdm5kLmJtaSIsc2g6ImFwcGxpY2F0aW9uL3gtc2giLGJ0aWY6ImltYWdlL3Bycy5idGlmIixyZXA6ImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHMiLGJ6OiJhcHBsaWNhdGlvbi94LWJ6aXAiLGJ6MjoiYXBwbGljYXRpb24veC1iemlwMiIsY3NoOiJhcHBsaWNhdGlvbi94LWNzaCIsYzoidGV4dC94LWMiLGNkeG1sOiJhcHBsaWNhdGlvbi92bmQuY2hlbWRyYXcreG1sIixjc3M6InRleHQvY3NzIixjZHg6ImNoZW1pY2FsL3gtY2R4IixjbWw6ImNoZW1pY2FsL3gtY21sIixjc21sOiJjaGVtaWNhbC94LWNzbWwiLGNkYmNtc2c6ImFwcGxpY2F0aW9uL3ZuZC5jb250YWN0LmNtc2ciLGNsYToiYXBwbGljYXRpb24vdm5kLmNsYXltb3JlIixjNGc6ImFwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwIixzdWI6ImltYWdlL3ZuZC5kdmIuc3VidGl0bGUiLGNkbWlhOiJhcHBsaWNhdGlvbi9jZG1pLWNhcGFiaWxpdHkiLGNkbWljOiJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lciIsY2RtaWQ6ImFwcGxpY2F0aW9uL2NkbWktZG9tYWluIixjZG1pbzoiYXBwbGljYXRpb24vY2RtaS1vYmplY3QiLGNkbWlxOiJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlIixjMTFhbWM6ImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnIixjMTFhbXo6ImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnLXBrZyIscmFzOiJpbWFnZS94LWNtdS1yYXN0ZXIiLGRhZToibW9kZWwvdm5kLmNvbGxhZGEreG1sIixjc3Y6InRleHQvY3N2IixjcHQ6ImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvIix3bWxjOiJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiLGNnbToiaW1hZ2UvY2dtIixpY2U6IngtY29uZmVyZW5jZS94LWNvb2x0YWxrIixjbXg6ImltYWdlL3gtY214Iix4YXI6ImFwcGxpY2F0aW9uL3ZuZC54YXJhIixjbWM6ImFwcGxpY2F0aW9uL3ZuZC5jb3Ntb2NhbGxlciIsY3BpbzoiYXBwbGljYXRpb24veC1jcGlvIixjbGt4OiJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlciIsY2xrazoiYXBwbGljYXRpb24vdm5kLmNyaWNrLmNsaWNrZXIua2V5Ym9hcmQiLGNsa3A6ImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnBhbGV0dGUiLGNsa3Q6ImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlIixjbGt3OiJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci53b3JkYmFuayIsd2JzOiJhcHBsaWNhdGlvbi92bmQuY3JpdGljYWx0b29scy53YnMreG1sIixjcnlwdG9ub3RlOiJhcHBsaWNhdGlvbi92bmQucmlnLmNyeXB0b25vdGUiLGNpZjoiY2hlbWljYWwveC1jaWYiLGNtZGY6ImNoZW1pY2FsL3gtY21kZiIsY3U6ImFwcGxpY2F0aW9uL2N1LXNlZW1lIixjd3c6ImFwcGxpY2F0aW9uL3Bycy5jd3ciLGN1cmw6InRleHQvdm5kLmN1cmwiLGRjdXJsOiJ0ZXh0L3ZuZC5jdXJsLmRjdXJsIixtY3VybDoidGV4dC92bmQuY3VybC5tY3VybCIsc2N1cmw6InRleHQvdm5kLmN1cmwuc2N1cmwiLGNhcjoiYXBwbGljYXRpb24vdm5kLmN1cmwuY2FyIixwY3VybDoiYXBwbGljYXRpb24vdm5kLmN1cmwucGN1cmwiLGNtcDoiYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51Iixkc3NjOiJhcHBsaWNhdGlvbi9kc3NjK2RlciIseGRzc2M6ImFwcGxpY2F0aW9uL2Rzc2MreG1sIixkZWI6ImFwcGxpY2F0aW9uL3gtZGViaWFuLXBhY2thZ2UiLHV2YToiYXVkaW8vdm5kLmRlY2UuYXVkaW8iLHV2aToiaW1hZ2Uvdm5kLmRlY2UuZ3JhcGhpYyIsdXZoOiJ2aWRlby92bmQuZGVjZS5oZCIsdXZtOiJ2aWRlby92bmQuZGVjZS5tb2JpbGUiLHV2dToidmlkZW8vdm5kLnV2dnUubXA0Iix1dnA6InZpZGVvL3ZuZC5kZWNlLnBkIix1dnM6InZpZGVvL3ZuZC5kZWNlLnNkIix1dnY6InZpZGVvL3ZuZC5kZWNlLnZpZGVvIixkdmk6ImFwcGxpY2F0aW9uL3gtZHZpIixzZWVkOiJhcHBsaWNhdGlvbi92bmQuZmRzbi5zZWVkIixkdGI6ImFwcGxpY2F0aW9uL3gtZHRib29rK3htbCIscmVzOiJhcHBsaWNhdGlvbi94LWR0YnJlc291cmNlK3htbCIsYWl0OiJhcHBsaWNhdGlvbi92bmQuZHZiLmFpdCIsc3ZjOiJhcHBsaWNhdGlvbi92bmQuZHZiLnNlcnZpY2UiLGVvbDoiYXVkaW8vdm5kLmRpZ2l0YWwtd2luZHMiLGRqdnU6ImltYWdlL3ZuZC5kanZ1IixkdGQ6ImFwcGxpY2F0aW9uL3htbC1kdGQiLG1scDoiYXBwbGljYXRpb24vdm5kLmRvbGJ5Lm1scCIsd2FkOiJhcHBsaWNhdGlvbi94LWRvb20iLGRwZzoiYXBwbGljYXRpb24vdm5kLmRwZ3JhcGgiLGRyYToiYXVkaW8vdm5kLmRyYSIsZGZhYzoiYXBwbGljYXRpb24vdm5kLmRyZWFtZmFjdG9yeSIsZHRzOiJhdWRpby92bmQuZHRzIixkdHNoZDoiYXVkaW8vdm5kLmR0cy5oZCIsZHdnOiJpbWFnZS92bmQuZHdnIixnZW86ImFwcGxpY2F0aW9uL3ZuZC5keW5hZ2VvIixlczoiYXBwbGljYXRpb24vZWNtYXNjcmlwdCIsbWFnOiJhcHBsaWNhdGlvbi92bmQuZWNvd2luLmNoYXJ0IixtbXI6ImltYWdlL3ZuZC5mdWppeGVyb3guZWRtaWNzLW1tciIscmxjOiJpbWFnZS92bmQuZnVqaXhlcm94LmVkbWljcy1ybGMiLGV4aToiYXBwbGljYXRpb24vZXhpIixtZ3o6ImFwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lIixlcHViOiJhcHBsaWNhdGlvbi9lcHViK3ppcCIsZW1sOiJtZXNzYWdlL3JmYzgyMiIsbm1sOiJhcHBsaWNhdGlvbi92bmQuZW5saXZlbiIseHByOiJhcHBsaWNhdGlvbi92bmQuaXMteHByIix4aWY6ImltYWdlL3ZuZC54aWZmIix4ZmRsOiJhcHBsaWNhdGlvbi92bmQueGZkbCIsZW1tYToiYXBwbGljYXRpb24vZW1tYSt4bWwiLGV6MjoiYXBwbGljYXRpb24vdm5kLmV6cGl4LWFsYnVtIixlejM6ImFwcGxpY2F0aW9uL3ZuZC5lenBpeC1wYWNrYWdlIixmc3Q6ImltYWdlL3ZuZC5mc3QiLGZ2dDoidmlkZW8vdm5kLmZ2dCIsZmJzOiJpbWFnZS92bmQuZmFzdGJpZHNoZWV0IixmZV9sYXVuY2g6ImFwcGxpY2F0aW9uL3ZuZC5kZW5vdm8uZmNzZWxheW91dC1saW5rIixmNHY6InZpZGVvL3gtZjR2IixmbHY6InZpZGVvL3gtZmx2IixmcHg6ImltYWdlL3ZuZC5mcHgiLG5weDoiaW1hZ2Uvdm5kLm5ldC1mcHgiLGZseDoidGV4dC92bmQuZm1pLmZsZXhzdG9yIixmbGk6InZpZGVvL3gtZmxpIixmdGM6ImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwIixmZGY6ImFwcGxpY2F0aW9uL3ZuZC5mZGYiLGY6InRleHQveC1mb3J0cmFuIixtaWY6ImFwcGxpY2F0aW9uL3ZuZC5taWYiLGZtOiJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlciIsZmg6ImltYWdlL3gtZnJlZWhhbmQiLGZzYzoiYXBwbGljYXRpb24vdm5kLmZzYy53ZWJsYXVuY2giLGZuYzoiYXBwbGljYXRpb24vdm5kLmZyb2dhbnMuZm5jIixsdGY6ImFwcGxpY2F0aW9uL3ZuZC5mcm9nYW5zLmx0ZiIsZGRkOiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRkZCIseGR3OiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3JrcyIseGJkOiJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRvY3V3b3Jrcy5iaW5kZXIiLG9hczoiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMiLG9hMjoiYXBwbGljYXRpb24vdm5kLmZ1aml0c3Uub2FzeXMyIixvYTM6ImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzMyIsZmc1OiJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c2dwIixiaDI6ImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzcHJzIixzcGw6ImFwcGxpY2F0aW9uL3gtZnV0dXJlc3BsYXNoIixmenM6ImFwcGxpY2F0aW9uL3ZuZC5mdXp6eXNoZWV0IixnMzoiaW1hZ2UvZzNmYXgiLGdteDoiYXBwbGljYXRpb24vdm5kLmdteCIsZ3R3OiJtb2RlbC92bmQuZ3R3Iix0eGQ6ImFwcGxpY2F0aW9uL3ZuZC5nZW5vbWF0aXgudHV4ZWRvIixnZ2I6ImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS5maWxlIixnZ3Q6ImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sIixnZGw6Im1vZGVsL3ZuZC5nZGwiLGdleDoiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyIixneHQ6ImFwcGxpY2F0aW9uL3ZuZC5nZW9uZXh0IixnMnc6ImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuIixnM3c6ImFwcGxpY2F0aW9uL3ZuZC5nZW9zcGFjZSIsZ3NmOiJhcHBsaWNhdGlvbi94LWZvbnQtZ2hvc3RzY3JpcHQiLGJkZjoiYXBwbGljYXRpb24veC1mb250LWJkZiIsZ3RhcjoiYXBwbGljYXRpb24veC1ndGFyIix0ZXhpbmZvOiJhcHBsaWNhdGlvbi94LXRleGluZm8iLGdudW1lcmljOiJhcHBsaWNhdGlvbi94LWdudW1lcmljIixrbWw6ImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtZWFydGgua21sK3htbCIsa216OiJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmtteiIsZ3FmOiJhcHBsaWNhdGlvbi92bmQuZ3JhZmVxIixnaWY6ImltYWdlL2dpZiIsZ3Y6InRleHQvdm5kLmdyYXBodml6IixnYWM6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtYWNjb3VudCIsZ2hmOiJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWhlbHAiLGdpbToiYXBwbGljYXRpb24vdm5kLmdyb292ZS1pZGVudGl0eS1tZXNzYWdlIixncnY6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtaW5qZWN0b3IiLGd0bToiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2UiLHRwbDoiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLXRlbXBsYXRlIix2Y2c6ImFwcGxpY2F0aW9uL3ZuZC5ncm9vdmUtdmNhcmQiLGgyNjE6InZpZGVvL2gyNjEiLGgyNjM6InZpZGVvL2gyNjMiLGgyNjQ6InZpZGVvL2gyNjQiLGhwaWQ6ImFwcGxpY2F0aW9uL3ZuZC5ocC1ocGlkIixocHM6ImFwcGxpY2F0aW9uL3ZuZC5ocC1ocHMiLGhkZjoiYXBwbGljYXRpb24veC1oZGYiLHJpcDoiYXVkaW8vdm5kLnJpcCIsaGJjaToiYXBwbGljYXRpb24vdm5kLmhiY2kiLGpsdDoiYXBwbGljYXRpb24vdm5kLmhwLWpseXQiLHBjbDoiYXBwbGljYXRpb24vdm5kLmhwLXBjbCIsaHBnbDoiYXBwbGljYXRpb24vdm5kLmhwLWhwZ2wiLGh2czoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1zY3JpcHQiLGh2ZDoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi1kaWMiLGh2cDoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZSIsInNmZC1oZHN0eCI6ImFwcGxpY2F0aW9uL3ZuZC5oeWRyb3N0YXRpeC5zb2YtZGF0YSIsc3RrOiJhcHBsaWNhdGlvbi9oeXBlcnN0dWRpbyIsaGFsOiJhcHBsaWNhdGlvbi92bmQuaGFsK3htbCIsaHRtbDoidGV4dC9odG1sIixpcm06ImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnQiLHNjOiJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXIiLGljczoidGV4dC9jYWxlbmRhciIsaWNjOiJhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZSIsaWNvOiJpbWFnZS94LWljb24iLGlnbDoiYXBwbGljYXRpb24vdm5kLmlnbG9hZGVyIixpZWY6ImltYWdlL2llZiIsaXZwOiJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZwIixpdnU6ImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnUiLHJpZjoiYXBwbGljYXRpb24vcmVnaW5mbyt4bWwiLCIzZG1sIjoidGV4dC92bmQuaW4zZC4zZG1sIixzcG90OiJ0ZXh0L3ZuZC5pbjNkLnNwb3QiLGlnczoibW9kZWwvaWdlcyIsaTJnOiJhcHBsaWNhdGlvbi92bmQuaW50ZXJnZW8iLGNkeToiYXBwbGljYXRpb24vdm5kLmNpbmRlcmVsbGEiLHhwdzoiYXBwbGljYXRpb24vdm5kLmludGVyY29uLmZvcm1uZXQiLGZjczoiYXBwbGljYXRpb24vdm5kLmlzYWMuZmNzIixpcGZpeDoiYXBwbGljYXRpb24vaXBmaXgiLGNlcjoiYXBwbGljYXRpb24vcGtpeC1jZXJ0Iixwa2k6ImFwcGxpY2F0aW9uL3BraXhjbXAiLGNybDoiYXBwbGljYXRpb24vcGtpeC1jcmwiLHBraXBhdGg6ImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aCIsaWdtOiJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbSIscmNwcm9maWxlOiJhcHBsaWNhdGlvbi92bmQuaXB1bnBsdWdnZWQucmNwcm9maWxlIixpcnA6ImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbCIsamFkOiJ0ZXh0L3ZuZC5zdW4uajJtZS5hcHAtZGVzY3JpcHRvciIsamFyOiJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUiLGNsYXNzOiJhcHBsaWNhdGlvbi9qYXZhLXZtIixqbmxwOiJhcHBsaWNhdGlvbi94LWphdmEtam5scC1maWxlIixzZXI6ImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3QiLGphdmE6InRleHQveC1qYXZhLXNvdXJjZSxqYXZhIixqczoiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsanNvbjoiYXBwbGljYXRpb24vanNvbiIsam9kYToiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZSIsanBtOiJ2aWRlby9qcG0iLGpwZWc6ImltYWdlL2pwZWciLGpwZzoiaW1hZ2UvanBlZyIscGpwZWc6ImltYWdlL3BqcGVnIixqcGd2OiJ2aWRlby9qcGVnIixrdHo6ImFwcGxpY2F0aW9uL3ZuZC5rYWhvb3R6IixtbWQ6ImFwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZCIsa2FyYm9uOiJhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvbiIsY2hydDoiYXBwbGljYXRpb24vdm5kLmtkZS5rY2hhcnQiLGtmbzoiYXBwbGljYXRpb24vdm5kLmtkZS5rZm9ybXVsYSIsZmx3OiJhcHBsaWNhdGlvbi92bmQua2RlLmtpdmlvIixrb246ImFwcGxpY2F0aW9uL3ZuZC5rZGUua29udG91ciIsa3ByOiJhcHBsaWNhdGlvbi92bmQua2RlLmtwcmVzZW50ZXIiLGtzcDoiYXBwbGljYXRpb24vdm5kLmtkZS5rc3ByZWFkIixrd2Q6ImFwcGxpY2F0aW9uL3ZuZC5rZGUua3dvcmQiLGh0a2U6ImFwcGxpY2F0aW9uL3ZuZC5rZW5hbWVhYXBwIixraWE6ImFwcGxpY2F0aW9uL3ZuZC5raWRzcGlyYXRpb24iLGtuZToiYXBwbGljYXRpb24vdm5kLmtpbmFyIixzc2U6ImFwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yIixsYXN4bWw6ImFwcGxpY2F0aW9uL3ZuZC5sYXMubGFzK3htbCIsbGF0ZXg6ImFwcGxpY2F0aW9uL3gtbGF0ZXgiLGxiZDoiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmRlc2t0b3AiLGxiZToiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbCIsamFtOiJhcHBsaWNhdGlvbi92bmQuamFtIiwxMjM6ImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItMyIsYXByOiJhcHBsaWNhdGlvbi92bmQubG90dXMtYXBwcm9hY2giLHByZToiYXBwbGljYXRpb24vdm5kLmxvdHVzLWZyZWVsYW5jZSIsbnNmOiJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXMiLG9yZzoiYXBwbGljYXRpb24vdm5kLmxvdHVzLW9yZ2FuaXplciIsc2NtOiJhcHBsaWNhdGlvbi92bmQubG90dXMtc2NyZWVuY2FtIixsd3A6ImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvIixsdnA6ImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2UiLG0zdToiYXVkaW8veC1tcGVndXJsIixtNHY6InZpZGVvL3gtbTR2IixocXg6ImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MCIscG9ydHBrZzoiYXBwbGljYXRpb24vdm5kLm1hY3BvcnRzLnBvcnRwa2ciLG1ncDoiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2UiLG1yYzoiYXBwbGljYXRpb24vbWFyYyIsbXJjeDoiYXBwbGljYXRpb24vbWFyY3htbCt4bWwiLG14ZjoiYXBwbGljYXRpb24vbXhmIixuYnA6ImFwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllciIsbWE6ImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhIixtYXRobWw6ImFwcGxpY2F0aW9uL21hdGhtbCt4bWwiLG1ib3g6ImFwcGxpY2F0aW9uL21ib3giLG1jMToiYXBwbGljYXRpb24vdm5kLm1lZGNhbGNkYXRhIixtc2NtbDoiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbCIsY2RrZXk6ImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXkiLG13ZjoiYXBwbGljYXRpb24vdm5kLm1mZXIiLG1mbToiYXBwbGljYXRpb24vdm5kLm1mbXAiLG1zaDoibW9kZWwvbWVzaCIsbWFkczoiYXBwbGljYXRpb24vbWFkcyt4bWwiLG1ldHM6ImFwcGxpY2F0aW9uL21ldHMreG1sIixtb2RzOiJhcHBsaWNhdGlvbi9tb2RzK3htbCIsbWV0YTQ6ImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWwiLG1jZDoiYXBwbGljYXRpb24vdm5kLm1jZCIsZmxvOiJhcHBsaWNhdGlvbi92bmQubWljcm9ncmFmeC5mbG8iLGlneDoiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4IixlczM6ImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWwiLG1kYjoiYXBwbGljYXRpb24veC1tc2FjY2VzcyIsYXNmOiJ2aWRlby94LW1zLWFzZiIsZXhlOiJhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQiLGNpbDoiYXBwbGljYXRpb24vdm5kLm1zLWFydGdhbHJ5IixjYWI6ImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCIsaW1zOiJhcHBsaWNhdGlvbi92bmQubXMtaW1zIixhcHBsaWNhdGlvbjoiYXBwbGljYXRpb24veC1tcy1hcHBsaWNhdGlvbiIsY2xwOiJhcHBsaWNhdGlvbi94LW1zY2xpcCIsbWRpOiJpbWFnZS92bmQubXMtbW9kaSIsZW90OiJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCIseGxzOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwiLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTIiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9lbmFibGVkLjEyIix4bHRtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyIix4bHNtOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQubWFjcm9lbmFibGVkLjEyIixjaG06ImFwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCIsY3JkOiJhcHBsaWNhdGlvbi94LW1zY2FyZGZpbGUiLGxybToiYXBwbGljYXRpb24vdm5kLm1zLWxybSIsbXZiOiJhcHBsaWNhdGlvbi94LW1zbWVkaWF2aWV3Iixtbnk6ImFwcGxpY2F0aW9uL3gtbXNtb25leSIscHB0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbiIsc2xkeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlIixwcHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Iixwb3R4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGVtcGxhdGUiLHhsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Iix4bHR4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50ZW1wbGF0ZSIsZG9jeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQiLGRvdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLnRlbXBsYXRlIixvYmQ6ImFwcGxpY2F0aW9uL3gtbXNiaW5kZXIiLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsb25ldG9jOiJhcHBsaWNhdGlvbi9vbmVub3RlIixweWE6ImF1ZGlvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHlhIixweXY6InZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2IixwcHQ6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50IixwcGFtOiJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5hZGRpbi5tYWNyb2VuYWJsZWQuMTIiLHNsZG06ImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlLm1hY3JvZW5hYmxlZC4xMiIscHB0bToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQucHJlc2VudGF0aW9uLm1hY3JvZW5hYmxlZC4xMiIscHBzbToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQuc2xpZGVzaG93Lm1hY3JvZW5hYmxlZC4xMiIscG90bToiYXBwbGljYXRpb24vdm5kLm1zLXBvd2VycG9pbnQudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyIixtcHA6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0IixwdWI6ImFwcGxpY2F0aW9uL3gtbXNwdWJsaXNoZXIiLHNjZDoiYXBwbGljYXRpb24veC1tc3NjaGVkdWxlIix4YXA6ImFwcGxpY2F0aW9uL3gtc2lsdmVybGlnaHQtYXBwIixzdGw6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc3RsIixjYXQ6ImFwcGxpY2F0aW9uL3ZuZC5tcy1wa2kuc2VjY2F0Iix2c2Q6ImFwcGxpY2F0aW9uL3ZuZC52aXNpbyIsdnNkeDoiYXBwbGljYXRpb24vdm5kLnZpc2lvMjAxMyIsd206InZpZGVvL3gtbXMtd20iLHdtYToiYXVkaW8veC1tcy13bWEiLHdheDoiYXVkaW8veC1tcy13YXgiLHdteDoidmlkZW8veC1tcy13bXgiLHdtZDoiYXBwbGljYXRpb24veC1tcy13bWQiLHdwbDoiYXBwbGljYXRpb24vdm5kLm1zLXdwbCIsd216OiJhcHBsaWNhdGlvbi94LW1zLXdteiIsd212OiJ2aWRlby94LW1zLXdtdiIsd3Z4OiJ2aWRlby94LW1zLXd2eCIsd21mOiJhcHBsaWNhdGlvbi94LW1zbWV0YWZpbGUiLHRybToiYXBwbGljYXRpb24veC1tc3Rlcm1pbmFsIixkb2M6ImFwcGxpY2F0aW9uL21zd29yZCIsZG9jbToiYXBwbGljYXRpb24vdm5kLm1zLXdvcmQuZG9jdW1lbnQubWFjcm9lbmFibGVkLjEyIixkb3RtOiJhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTIiLHdyaToiYXBwbGljYXRpb24veC1tc3dyaXRlIix3cHM6ImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JrcyIseGJhcDoiYXBwbGljYXRpb24veC1tcy14YmFwIix4cHM6ImFwcGxpY2F0aW9uL3ZuZC5tcy14cHNkb2N1bWVudCIsbWlkOiJhdWRpby9taWRpIixtcHk6ImFwcGxpY2F0aW9uL3ZuZC5pYm0ubWluaXBheSIsYWZwOiJhcHBsaWNhdGlvbi92bmQuaWJtLm1vZGNhcCIscm1zOiJhcHBsaWNhdGlvbi92bmQuamNwLmphdmFtZS5taWRsZXQtcm1zIix0bW86ImFwcGxpY2F0aW9uL3ZuZC50bW9iaWxlLWxpdmV0diIscHJjOiJhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2siLG1iazoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tYmsiLGRpczoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXMiLHBsYzoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5wbGMiLG1xeToiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tcXkiLG1zbDoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2wiLHR4ZjoiYXBwbGljYXRpb24vdm5kLm1vYml1cy50eGYiLGRhZjoiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kYWYiLGZseToidGV4dC92bmQuZmx5IixtcGM6ImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGUiLG1wbjoiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvbiIsbWoyOiJ2aWRlby9tajIiLG1wZ2E6ImF1ZGlvL21wZWciLG14dToidmlkZW8vdm5kLm1wZWd1cmwiLG1wZWc6InZpZGVvL21wZWciLG0yMToiYXBwbGljYXRpb24vbXAyMSIsbXA0YToiYXVkaW8vbXA0IixtcDQ6InZpZGVvL21wNCIsbTN1ODoiYXBwbGljYXRpb24vdm5kLmFwcGxlLm1wZWd1cmwiLG11czoiYXBwbGljYXRpb24vdm5kLm11c2ljaWFuIixtc3R5OiJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGUiLG14bWw6ImFwcGxpY2F0aW9uL3h2K3htbCIsbmdkYXQ6ImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2UuZGF0YSIsIm4tZ2FnZSI6ImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsIixuY3g6ImFwcGxpY2F0aW9uL3gtZHRibmN4K3htbCIsbmM6ImFwcGxpY2F0aW9uL3gtbmV0Y2RmIixubHU6ImFwcGxpY2F0aW9uL3ZuZC5uZXVyb2xhbmd1YWdlLm5sdSIsZG5hOiJhcHBsaWNhdGlvbi92bmQuZG5hIixubmQ6ImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1kaXJlY3RvcnkiLG5uczoiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXNlYWxlciIsbm53OiJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtd2ViIixycHN0OiJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0IixycHNzOiJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0cyIsbjM6InRleHQvbjMiLGVkbToiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkbSIsZWR4OiJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWR4IixleHQ6ImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHQiLGdwaDoiYXBwbGljYXRpb24vdm5kLmZsb2dyYXBoaXQiLGVjZWxwNDgwMDoiYXVkaW8vdm5kLm51ZXJhLmVjZWxwNDgwMCIsZWNlbHA3NDcwOiJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwIixlY2VscDk2MDA6ImF1ZGlvL3ZuZC5udWVyYS5lY2VscDk2MDAiLG9kYToiYXBwbGljYXRpb24vb2RhIixvZ3g6ImFwcGxpY2F0aW9uL29nZyIsb2dhOiJhdWRpby9vZ2ciLG9ndjoidmlkZW8vb2dnIixkZDI6ImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGQyK3htbCIsb3RoOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtd2ViIixvcGY6ImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sIixxYm86ImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFibyIsb3h0OiJhcHBsaWNhdGlvbi92bmQub3Blbm9mZmljZW9yZy5leHRlbnNpb24iLG9zZjoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5vcGVuc2NvcmVmb3JtYXQiLHdlYmE6ImF1ZGlvL3dlYm0iLHdlYm06InZpZGVvL3dlYm0iLG9kYzoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydCIsb3RjOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmNoYXJ0LXRlbXBsYXRlIixvZGI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZGF0YWJhc2UiLG9kZjoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhIixvZGZ0OiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmZvcm11bGEtdGVtcGxhdGUiLG9kZzoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5ncmFwaGljcyIsb3RnOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzLXRlbXBsYXRlIixvZGk6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UiLG90aToiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZS10ZW1wbGF0ZSIsb2RwOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbiIsb3RwOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbi10ZW1wbGF0ZSIsb2RzOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixvdHM6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGUiLG9kdDoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0IixvZG06ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC1tYXN0ZXIiLG90dDoiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXRlbXBsYXRlIixrdHg6ImltYWdlL2t0eCIsc3hjOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjIixzdGM6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGUiLHN4ZDoiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuZHJhdyIsc3RkOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3LnRlbXBsYXRlIixzeGk6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmltcHJlc3MiLHN0aToiYXBwbGljYXRpb24vdm5kLnN1bi54bWwuaW1wcmVzcy50ZW1wbGF0ZSIsc3htOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5tYXRoIixzeHc6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlciIsc3hnOiJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXIuZ2xvYmFsIixzdHc6ImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci50ZW1wbGF0ZSIsb3RmOiJhcHBsaWNhdGlvbi94LWZvbnQtb3RmIixvc2Zwdmc6ImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0Lm9zZnB2Zyt4bWwiLGRwOiJhcHBsaWNhdGlvbi92bmQub3NnaS5kcCIscGRiOiJhcHBsaWNhdGlvbi92bmQucGFsbSIscDoidGV4dC94LXBhc2NhbCIscGF3OiJhcHBsaWNhdGlvbi92bmQucGF3YWFmaWxlIixwY2x4bDoiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsIixlZmlmOiJhcHBsaWNhdGlvbi92bmQucGljc2VsIixwY3g6ImltYWdlL3gtcGN4Iixwc2Q6ImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AiLHByZjoiYXBwbGljYXRpb24vcGljcy1ydWxlcyIscGljOiJpbWFnZS94LXBpY3QiLGNoYXQ6ImFwcGxpY2F0aW9uL3gtY2hhdCIscDEwOiJhcHBsaWNhdGlvbi9wa2NzMTAiLHAxMjoiYXBwbGljYXRpb24veC1wa2NzMTIiLHA3bToiYXBwbGljYXRpb24vcGtjczctbWltZSIscDdzOiJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUiLHA3cjoiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcCIscDdiOiJhcHBsaWNhdGlvbi94LXBrY3M3LWNlcnRpZmljYXRlcyIscDg6ImFwcGxpY2F0aW9uL3BrY3M4IixwbGY6ImFwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFybiIscG5tOiJpbWFnZS94LXBvcnRhYmxlLWFueW1hcCIscGJtOiJpbWFnZS94LXBvcnRhYmxlLWJpdG1hcCIscGNmOiJhcHBsaWNhdGlvbi94LWZvbnQtcGNmIixwZnI6ImFwcGxpY2F0aW9uL2ZvbnQtdGRwZnIiLHBnbjoiYXBwbGljYXRpb24veC1jaGVzcy1wZ24iLHBnbToiaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwIixwbmc6ImltYWdlL3BuZyIscHBtOiJpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCIscHNrY3htbDoiYXBwbGljYXRpb24vcHNrYyt4bWwiLHBtbDoiYXBwbGljYXRpb24vdm5kLmN0Yy1wb3NtbCIsYWk6ImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLHBmYToiYXBwbGljYXRpb24veC1mb250LXR5cGUxIixwYmQ6ImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2IixwZ3A6ImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLGJveDoiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveCIscHRpZDoiYXBwbGljYXRpb24vdm5kLnB2aS5wdGlkMSIscGxzOiJhcHBsaWNhdGlvbi9wbHMreG1sIixzdHI6ImFwcGxpY2F0aW9uL3ZuZC5wZy5mb3JtYXQiLGVpNjoiYXBwbGljYXRpb24vdm5kLnBnLm9zYXNsaSIsZHNjOiJ0ZXh0L3Bycy5saW5lcy50YWciLHBzZjoiYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZiIscXBzOiJhcHBsaWNhdGlvbi92bmQucHVibGlzaGFyZS1kZWx0YS10cmVlIix3ZzoiYXBwbGljYXRpb24vdm5kLnBtaS53aWRnZXQiLHF4ZDoiYXBwbGljYXRpb24vdm5kLnF1YXJrLnF1YXJreHByZXNzIixlc2Y6ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5lc2YiLG1zZjoiYXBwbGljYXRpb24vdm5kLmVwc29uLm1zZiIsc3NmOiJhcHBsaWNhdGlvbi92bmQuZXBzb24uc3NmIixxYW06ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5xdWlja2FuaW1lIixxZng6ImFwcGxpY2F0aW9uL3ZuZC5pbnR1LnFmeCIscXQ6InZpZGVvL3F1aWNrdGltZSIscmFyOiJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkIixyYW06ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvIixybXA6ImF1ZGlvL3gtcG4tcmVhbGF1ZGlvLXBsdWdpbiIscnNkOiJhcHBsaWNhdGlvbi9yc2QreG1sIixybToiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYSIsYmVkOiJhcHBsaWNhdGlvbi92bmQucmVhbHZuYy5iZWQiLG14bDoiYXBwbGljYXRpb24vdm5kLnJlY29yZGFyZS5tdXNpY3htbCIsbXVzaWN4bWw6ImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWwreG1sIixybmM6ImFwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4IixyZHo6ImFwcGxpY2F0aW9uL3ZuZC5kYXRhLXZpc2lvbi5yZHoiLHJkZjoiYXBwbGljYXRpb24vcmRmK3htbCIscnA5OiJhcHBsaWNhdGlvbi92bmQuY2xvYW50by5ycDkiLGppc3A6ImFwcGxpY2F0aW9uL3ZuZC5qaXNwIixydGY6ImFwcGxpY2F0aW9uL3J0ZiIscnR4OiJ0ZXh0L3JpY2h0ZXh0IixsaW5rNjY6ImFwcGxpY2F0aW9uL3ZuZC5yb3V0ZTY2Lmxpbms2Nit4bWwiLHJzczoiYXBwbGljYXRpb24vcnNzK3htbCIsc2hmOiJhcHBsaWNhdGlvbi9zaGYreG1sIixzdDoiYXBwbGljYXRpb24vdm5kLnNhaWxpbmd0cmFja2VyLnRyYWNrIixzdmc6ImltYWdlL3N2Zyt4bWwiLHN1czoiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhciIsc3J1OiJhcHBsaWNhdGlvbi9zcnUreG1sIixzZXRwYXk6ImFwcGxpY2F0aW9uL3NldC1wYXltZW50LWluaXRpYXRpb24iLHNldHJlZzoiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uIixzZW1hOiJhcHBsaWNhdGlvbi92bmQuc2VtYSIsc2VtZDoiYXBwbGljYXRpb24vdm5kLnNlbWQiLHNlbWY6ImFwcGxpY2F0aW9uL3ZuZC5zZW1mIixzZWU6ImFwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsIixzbmY6ImFwcGxpY2F0aW9uL3gtZm9udC1zbmYiLHNwcToiYXBwbGljYXRpb24vc2N2cC12cC1yZXF1ZXN0IixzcHA6ImFwcGxpY2F0aW9uL3NjdnAtdnAtcmVzcG9uc2UiLHNjcToiYXBwbGljYXRpb24vc2N2cC1jdi1yZXF1ZXN0IixzY3M6ImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2UiLHNkcDoiYXBwbGljYXRpb24vc2RwIixldHg6InRleHQveC1zZXRleHQiLG1vdmllOiJ2aWRlby94LXNnaS1tb3ZpZSIsaWZtOiJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuZm9ybWRhdGEiLGl0cDoiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZSIsaWlmOiJhcHBsaWNhdGlvbi92bmQuc2hhbmEuaW5mb3JtZWQuaW50ZXJjaGFuZ2UiLGlwazoiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLnBhY2thZ2UiLHRmaToiYXBwbGljYXRpb24vdGhyYXVkK3htbCIsc2hhcjoiYXBwbGljYXRpb24veC1zaGFyIixyZ2I6ImltYWdlL3gtcmdiIixzbHQ6ImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0Iixhc286ImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzbyIsaW1wOiJhcHBsaWNhdGlvbi92bmQuYWNjcGFjLnNpbXBseS5pbXAiLHR3ZDoiYXBwbGljYXRpb24vdm5kLnNpbXRlY2gtbWluZG1hcHBlciIsY3NwOiJhcHBsaWNhdGlvbi92bmQuY29tbW9uc3BhY2UiLHNhZjoiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvIixtbWY6ImFwcGxpY2F0aW9uL3ZuZC5zbWFmIixzcGY6ImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuc21hZi1waHJhc2UiLHRlYWNoZXI6ImFwcGxpY2F0aW9uL3ZuZC5zbWFydC50ZWFjaGVyIixzdmQ6ImFwcGxpY2F0aW9uL3ZuZC5zdmQiLHJxOiJhcHBsaWNhdGlvbi9zcGFycWwtcXVlcnkiLHNyeDoiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sIixncmFtOiJhcHBsaWNhdGlvbi9zcmdzIixncnhtbDoiYXBwbGljYXRpb24vc3Jncyt4bWwiLHNzbWw6ImFwcGxpY2F0aW9uL3NzbWwreG1sIixza3A6ImFwcGxpY2F0aW9uL3ZuZC5rb2FuIixzZ21sOiJ0ZXh0L3NnbWwiLHNkYzoiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5jYWxjIixzZGE6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uZHJhdyIsc2RkOiJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmltcHJlc3MiLHNtZjoiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoIixzZHc6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyIixzZ2w6ImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24ud3JpdGVyLWdsb2JhbCIsc206ImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEuc3RlcGNoYXJ0IixzaXQ6ImFwcGxpY2F0aW9uL3gtc3R1ZmZpdCIsc2l0eDoiYXBwbGljYXRpb24veC1zdHVmZml0eCIsc2RrbToiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbCIseG86ImFwcGxpY2F0aW9uL3ZuZC5vbHBjLXN1Z2FyIixhdToiYXVkaW8vYmFzaWMiLHdxZDoiYXBwbGljYXRpb24vdm5kLndxZCIsc2lzOiJhcHBsaWNhdGlvbi92bmQuc3ltYmlhbi5pbnN0YWxsIixzbWk6ImFwcGxpY2F0aW9uL3NtaWwreG1sIix4c206ImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sIixiZG06ImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWwiLHhkbToiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbSt4bWwiLHN2NGNwaW86ImFwcGxpY2F0aW9uL3gtc3Y0Y3BpbyIsc3Y0Y3JjOiJhcHBsaWNhdGlvbi94LXN2NGNyYyIsc2JtbDoiYXBwbGljYXRpb24vc2JtbCt4bWwiLHRzdjoidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIsdGlmZjoiaW1hZ2UvdGlmZiIsdGFvOiJhcHBsaWNhdGlvbi92bmQudGFvLmludGVudC1tb2R1bGUtYXJjaGl2ZSIsdGFyOiJhcHBsaWNhdGlvbi94LXRhciIsdGNsOiJhcHBsaWNhdGlvbi94LXRjbCIsdGV4OiJhcHBsaWNhdGlvbi94LXRleCIsdGZtOiJhcHBsaWNhdGlvbi94LXRleC10Zm0iLHRlaToiYXBwbGljYXRpb24vdGVpK3htbCIsdHh0OiJ0ZXh0L3BsYWluIixkeHA6ImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHAiLHNmczoiYXBwbGljYXRpb24vdm5kLnNwb3RmaXJlLnNmcyIsdHNkOiJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhIix0cHQ6ImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdCIsbXhzOiJhcHBsaWNhdGlvbi92bmQudHJpc2NhcGUubXhzIix0OiJ0ZXh0L3Ryb2ZmIix0cmE6ImFwcGxpY2F0aW9uL3ZuZC50cnVlYXBwIix0dGY6ImFwcGxpY2F0aW9uL3gtZm9udC10dGYiLHR0bDoidGV4dC90dXJ0bGUiLHVtajoiYXBwbGljYXRpb24vdm5kLnVtYWppbiIsdW9tbDoiYXBwbGljYXRpb24vdm5kLnVvbWwreG1sIix1bml0eXdlYjoiYXBwbGljYXRpb24vdm5kLnVuaXR5Iix1ZmQ6ImFwcGxpY2F0aW9uL3ZuZC51ZmRsIix1cmk6InRleHQvdXJpLWxpc3QiLHV0ejoiYXBwbGljYXRpb24vdm5kLnVpcS50aGVtZSIsdXN0YXI6ImFwcGxpY2F0aW9uL3gtdXN0YXIiLHV1OiJ0ZXh0L3gtdXVlbmNvZGUiLHZjczoidGV4dC94LXZjYWxlbmRhciIsdmNmOiJ0ZXh0L3gtdmNhcmQiLHZjZDoiYXBwbGljYXRpb24veC1jZGxpbmsiLHZzZjoiYXBwbGljYXRpb24vdm5kLnZzZiIsd3JsOiJtb2RlbC92cm1sIix2Y3g6ImFwcGxpY2F0aW9uL3ZuZC52Y3giLG10czoibW9kZWwvdm5kLm10cyIsdnR1OiJtb2RlbC92bmQudnR1Iix2aXM6ImFwcGxpY2F0aW9uL3ZuZC52aXNpb25hcnkiLHZpdjoidmlkZW8vdm5kLnZpdm8iLGNjeG1sOiJhcHBsaWNhdGlvbi9jY3htbCt4bWwsIix2eG1sOiJhcHBsaWNhdGlvbi92b2ljZXhtbCt4bWwiLHNyYzoiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZSIsd2J4bWw6ImFwcGxpY2F0aW9uL3ZuZC53YXAud2J4bWwiLHdibXA6ImltYWdlL3ZuZC53YXAud2JtcCIsd2F2OiJhdWRpby94LXdhdiIsZGF2bW91bnQ6ImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbCIsd29mZjoiYXBwbGljYXRpb24veC1mb250LXdvZmYiLHdzcG9saWN5OiJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWwiLHdlYnA6ImltYWdlL3dlYnAiLHd0YjoiYXBwbGljYXRpb24vdm5kLndlYnR1cmJvIix3Z3Q6ImFwcGxpY2F0aW9uL3dpZGdldCIsaGxwOiJhcHBsaWNhdGlvbi93aW5obHAiLHdtbDoidGV4dC92bmQud2FwLndtbCIsd21sczoidGV4dC92bmQud2FwLndtbHNjcmlwdCIsd21sc2M6ImFwcGxpY2F0aW9uL3ZuZC53YXAud21sc2NyaXB0YyIsd3BkOiJhcHBsaWNhdGlvbi92bmQud29yZHBlcmZlY3QiLHN0ZjoiYXBwbGljYXRpb24vdm5kLnd0LnN0ZiIsd3NkbDoiYXBwbGljYXRpb24vd3NkbCt4bWwiLHhibToiaW1hZ2UveC14Yml0bWFwIix4cG06ImltYWdlL3gteHBpeG1hcCIseHdkOiJpbWFnZS94LXh3aW5kb3dkdW1wIixkZXI6ImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0IixmaWc6ImFwcGxpY2F0aW9uL3gteGZpZyIseGh0bWw6ImFwcGxpY2F0aW9uL3hodG1sK3htbCIseG1sOiJhcHBsaWNhdGlvbi94bWwiLHhkZjoiYXBwbGljYXRpb24veGNhcC1kaWZmK3htbCIseGVuYzoiYXBwbGljYXRpb24veGVuYyt4bWwiLHhlcjoiYXBwbGljYXRpb24vcGF0Y2gtb3BzLWVycm9yK3htbCIscmw6ImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzK3htbCIscnM6ImFwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWwiLHJsZDoiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMtZGlmZit4bWwiLHhzbHQ6ImFwcGxpY2F0aW9uL3hzbHQreG1sIix4b3A6ImFwcGxpY2F0aW9uL3hvcCt4bWwiLHhwaToiYXBwbGljYXRpb24veC14cGluc3RhbGwiLHhzcGY6ImFwcGxpY2F0aW9uL3hzcGYreG1sIix4dWw6ImFwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWwiLHh5ejoiY2hlbWljYWwveC14eXoiLHlhbWw6InRleHQveWFtbCIseWFuZzoiYXBwbGljYXRpb24veWFuZyIseWluOiJhcHBsaWNhdGlvbi95aW4reG1sIix6aXI6ImFwcGxpY2F0aW9uL3ZuZC56dWwiLHppcDoiYXBwbGljYXRpb24vemlwIix6bW06ImFwcGxpY2F0aW9uL3ZuZC5oYW5kaGVsZC1lbnRlcnRhaW5tZW50K3htbCIsemF6OiJhcHBsaWNhdGlvbi92bmQuenphenouZGVjayt4bWwifSxPTz1PYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoUk8pLm1hcChmdW5jdGlvbih0KXt2YXIgZT1qRSh0LDIpLG49ZVswXSxyPWVbMV07cmV0dXJuW3Isbl19KSksUE89L15kYXRhOiguKj8pO2Jhc2U2NCwvO2Z1bmN0aW9uIEZmKHQpe3ZhciBlPVBPLmV4ZWModCk7aWYoZSYmZVsxXSlyZXR1cm4gZVsxXX1mdW5jdGlvbiBCZih0KXt2YXIgZT1PT1t0XTtyZXR1cm4gZXx8dC5zcGxpdCgiLyIpWzFdfXZhciBBTz0vXmgoW1xkK10pJC87ZnVuY3Rpb24gTU8odCl7dmFyIGU9dC5jaGlsZHJlbi5tYXAoTE8pO3JldHVybiBETyhlKX1mdW5jdGlvbiBMTyh0KXtpZih0LnR5cGU9PT0iaGVhZGluZyIpe3ZhciBlLG49IiIscj1OdW1iZXIoKGU9dC50YWcubWF0Y2goQU8pKT09PW51bGx8fGU9PT12b2lkIDA/dm9pZCAwOmVbMV0pO2lmKE51bWJlci5pc05hTihyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGVhZGVyIGRlcHRoIik7Zm9yKHZhciBpPTA7aTxOdW1iZXIocik7aSsrKW4rPSIjIjt2YXIgbz1bIiIuY29uY2F0KG4sIiAiKV07cmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjpvLmNvbmNhdC5hcHBseShvLFJtKHQuY2hpbGRyZW4ubWFwKE9tKSkpfX1lbHNle2lmKHQudHlwZT09PSJwYXJhZ3JhcGgiKXJldHVybiB0LmNoaWxkcmVuLmxlbmd0aD09PTA/e3R5cGU6ImJsb2NrIixjaGlsZHJlbjpbIjxiciAvPiJdfTp7dHlwZToiYmxvY2siLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBPbShzKX0pfTtpZih0LnR5cGU9PT0ibGlzdCIpcmV0dXJue3R5cGU6ImJsb2NrIixjaGlsZHJlbjp0LmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24ocyxhKXtyZXR1cm4gRkUoQkUodCkscywwLGE9PT0wKX0pfTt2YXIgbD10O3Rocm93IG5ldyBFcnJvcigiVW5oYW5kbGVkIG5vZGUgdHlwZTogIi5jb25jYXQoInR5cGUiaW4gbD8iZXhoYXVzdGl2ZUNoZWNrLnR5cGUiOiJ1bmtub3duIikpfX1mdW5jdGlvbiBETyh0KXtmb3IodmFyIGU9W2AKYF0sbj1bXSxyPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89dFtpXSxsPWtPKG8uY2hpbGRyZW4pLHM7dHJ5e2ZvcihsLnMoKTshKHM9bC5uKCkpLmRvbmU7KXt2YXIgYT1zLnZhbHVlO2lmKHR5cGVvZiBhPT0ic3RyaW5nIillW2UubGVuZ3RoLTFdKz1hO2Vsc2V7aWYoYS50eXBlPT09ImltYWdlIiluLnB1c2goRk8oYSxyKSk7ZWxzZSBpZihhLnR5cGU9PT0ibGluayIpbi5wdXNoKFVPKGEpKTtlbHNle3ZhciBjPWE7dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG5vZGUgdHlwZTogIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYyxudWxsLDIpKSl9ZS5wdXNoKCIiKX19fWNhdGNoKHUpe2wuZSh1KX1maW5hbGx5e2wuZigpfWk9PT10Lmxlbmd0aC0xP2VbZS5sZW5ndGgtMV0rPWAKYDplW2UubGVuZ3RoLTFdKz1gCgpgfXJldHVybiBxdChxdChxdChxdCh7fSxubiwicmljaHRleHQiKSwidGVtcGxhdGVTdHJpbmdzIixlKSwiZXhwcnMiLG4pLCJmaWxlcyIscil9ZnVuY3Rpb24gekUodCl7dmFyIGU9dHlwZW9mIHQuZm9ybWF0PT0ibnVtYmVyIj9qTyh0LmZvcm1hdCk6W10sbj10LnRleHQudHJpbVN0YXJ0KCkscj10LnRleHQubGVuZ3RoLW4ubGVuZ3RoO249bi50cmltRW5kKCk7dmFyIGk9dC50ZXh0Lmxlbmd0aC1uLmxlbmd0aC1yO3JldHVybiBlLmluY2x1ZGVzKCJib2xkIikmJmUuaW5jbHVkZXMoIml0YWxpYyIpP249IioqKiIuY29uY2F0KG4sIioqKiIpOmUuaW5jbHVkZXMoImJvbGQiKT9uPSIqKiIuY29uY2F0KG4sIioqIik6ZS5pbmNsdWRlcygiaXRhbGljIikmJihuPSJfIi5jb25jYXQobiwiXyIpKSxlLmluY2x1ZGVzKCJsaW5lLXRocm91Z2giKSYmKG49In5+Ii5jb25jYXQobiwifn4iKSksIiIuY29uY2F0KCIgIi5yZXBlYXQocikpLmNvbmNhdChuKS5jb25jYXQoIiAiLnJlcGVhdChpKSl9ZnVuY3Rpb24gT20odCl7cmV0dXJuIHQudHlwZT09PSJ0ZXh0Ij96RSh0KTp0LnR5cGU9PT0ibGluZWJyZWFrIj9gCmA6dH1mdW5jdGlvbiBGRSh0LGUsbil7dmFyIHIsaT1hcmd1bWVudHMubGVuZ3RoPjMmJmFyZ3VtZW50c1szXSE9PXZvaWQgMD9hcmd1bWVudHNbM106ITEsbz1pPyIiOmAKYCxsPVsiIi5jb25jYXQobykuY29uY2F0KCIgIi5yZXBlYXQobikpLmNvbmNhdCh0KV07cmV0dXJuKChyPWUuY2hpbGRyZW4pPT09bnVsbHx8cj09PXZvaWQgMHx8KHI9clswXSk9PT1udWxsfHxyPT09dm9pZCAwP3ZvaWQgMDpyLnR5cGUpIT09Imxpc3QiJiZsLnB1c2goIiAiKSxsLmNvbmNhdChlLmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24ocyl7cmV0dXJuIHMudHlwZT09PSJsaXN0Ij9zLmNoaWxkcmVuLmZsYXRNYXAoZnVuY3Rpb24oYSl7cmV0dXJuIEZFKEJFKHMpLGEsbis0KX0pOltPbShzKV19KSl9ZnVuY3Rpb24gQkUodCl7aWYodC5saXN0VHlwZT09PSJidWxsZXQiKXJldHVybiItIjtpZih0Lmxpc3RUeXBlPT09Im51bWJlciIpcmV0dXJuIjEuIjt0aHJvdyBuZXcgRXJyb3IoIlVuaGFuZGxlZCBsaXN0IHR5cGU6ICIuY29uY2F0KHQubGlzdFR5cGUpKX12YXIgSU89e2JvbGQ6MSxpdGFsaWM6MiwibGluZS10aHJvdWdoIjo0fTtmdW5jdGlvbiBqTyh0KXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoSU8pLmZsYXRNYXAoZnVuY3Rpb24oZSl7dmFyIG49akUoZSwyKSxyPW5bMF0saT1uWzFdO3JldHVybihpJnQpPT09aT9bcl06W119KX12YXIgek89bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIEZPKHQsZSl7aWYodC5zcmMuc3RhcnRzV2l0aCgiZGF0YToiKSl7dmFyIG49cm4uZ2V0U0hBMjU2SGFzaCh6Ty5lbmNvZGUodC5zcmMpKSxyPUZmKHQuc3JjKTtpZihyPT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGRldGVjdCBNaW1lIFR5cGUgZm9yIGltYWdlOiAiLmNvbmNhdCh0LnNyYykpO3ZhciBpPUJmKHIpLG89Ii9wdWJsaWMvIi5jb25jYXQobiwiLiIpLmNvbmNhdChpKTtyZXR1cm4gZVtvXT10LnNyYyxxdChxdChxdCh7fSxubiwiZmlsZSIpLFBuLG8pLCJtZXRhZGF0YSIse3dpZHRoOnQud2lkdGh8fDAsaGVpZ2h0OnQuaGVpZ2h0fHwwLHNoYTI1NjpufHwiIixtaW1lVHlwZTpyfSl9ZWxzZXt2YXIgbD1CTygic2hhMjU2Iix0LnNyYyk7cmV0dXJuIHF0KHF0KHF0KHt9LG5uLCJmaWxlIiksUG4sIi9wdWJsaWMiLmNvbmNhdCh0LnNyYy5zcGxpdCgiPyIpWzBdKSksIm1ldGFkYXRhIix7d2lkdGg6dC53aWR0aHx8MCxoZWlnaHQ6dC5oZWlnaHR8fDAsc2hhMjU2Omx8fCIiLG1pbWVUeXBlOnQubWltZVR5cGV8fCIifSl9fWZ1bmN0aW9uIEJPKHQsZSl7dmFyIG49ZS5zcGxpdCgiPyIpO2lmKCEobi5sZW5ndGg8Mikpe3ZhciByPW5bMV0saT1uZXcgVVJMU2VhcmNoUGFyYW1zKHIpO2lmKGkuaGFzKHQpKXJldHVybiBpLmdldCh0KX19ZnVuY3Rpb24gVU8odCl7cmV0dXJuIHF0KHF0KHF0KHt9LG5uLCJsaW5rIiksImhyZWYiLHQudXJsKSwiY2hpbGRyZW4iLHQuY2hpbGRyZW4ubWFwKHpFKSl9ZnVuY3Rpb24gZ3godCxlKXt2YXIgbj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihyPXIuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsaSkuZW51bWVyYWJsZX0pKSxuLnB1c2guYXBwbHkobixyKX1yZXR1cm4gbn1mdW5jdGlvbiBsdCh0KXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgbj1hcmd1bWVudHNbZV0hPW51bGw/YXJndW1lbnRzW2VdOnt9O2UlMj9neChPYmplY3QobiksITApLmZvckVhY2goZnVuY3Rpb24ocil7cXQodCxyLG5bcl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXModCxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKSk6Z3goT2JqZWN0KG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHIpKX0pfXJldHVybiB0fXZhciAkcj17dmVyc2lvbjoxLGZvcm1hdDoiIixpbmRlbnQ6MCxkaXJlY3Rpb246bnVsbH07ZnVuY3Rpb24gRHModCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0hPT12b2lkIDA/YXJndW1lbnRzWzFdOiExO2lmKHR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJ0ZXh0Iixmb3JtYXQ6IiIsdGV4dDp0fSk7aWYoInRhZyJpbiB0KXN3aXRjaCh0LnRhZyl7Y2FzZSJoMSI6cmV0dXJuIF9sKHQpO2Nhc2UiaDIiOnJldHVybiBfbCh0KTtjYXNlImgzIjpyZXR1cm4gX2wodCk7Y2FzZSJoNCI6cmV0dXJuIF9sKHQpO2Nhc2UiaDUiOnJldHVybiBfbCh0KTtjYXNlImg2IjpyZXR1cm4gX2wodCk7Y2FzZSJsaSI6cmV0dXJuIEdPKHQpO2Nhc2UicCI6cmV0dXJuIEtPKHQpO2Nhc2UidWwiOnJldHVybiB2eCh0KTtjYXNlIm9sIjpyZXR1cm4gdngodCk7Y2FzZSJzcGFuIjpyZXR1cm4gVUUodCk7Y2FzZSJhIjpyZXR1cm4gSE8odCk7Y2FzZSJpbWciOnJldHVybiBXTyh0KTtjYXNlImJyIjpyZXR1cm4gZT9sdChsdCh7fSwkcikse30se3R5cGU6ImxpbmVicmVhayJ9KTpaTygpO2RlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuZXhwZWN0ZWQgbm9kZSB0YWc6ICIrSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpKX1lbHNlIHRocm93IEVycm9yKCJVbmV4cGVjdGVkIG5vZGU6ICIrSlNPTi5zdHJpbmdpZnkodCxudWxsLDIpKX1mdW5jdGlvbiBXTyh0KXt2YXIgZT10LnNyYztyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJpbWFnZSIsc3JjOmUsd2lkdGg6dC53aWR0aCxoZWlnaHQ6dC5oZWlnaHQsbWltZVR5cGU6dC5taW1lVHlwZX0pfWZ1bmN0aW9uIEhPKHQpe3JldHVybiBsdChsdCh7fSwkcikse30se3R5cGU6ImxpbmsiLHVybDp0LmhyZWYsY2hpbGRyZW46dC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIERzKGUpfSl9KX1mdW5jdGlvbiBWTyh0KXtyZXR1cm4gbHQobHQoe30sJHIpLHt9LHtmb3JtYXQ6IiIsdHlwZToicm9vdCIsY2hpbGRyZW46dC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIERzKGUpfSl9KX1mdW5jdGlvbiBfbCh0KXtyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJoZWFkaW5nIix0YWc6dC50YWcsY2hpbGRyZW46dC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIERzKGUpfSl9KX1mdW5jdGlvbiBLTyh0KXtyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJwYXJhZ3JhcGgiLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBEcyhlLCEwKX0pfSl9ZnVuY3Rpb24gWk8oKXtyZXR1cm4gbHQobHQoe30sJHIpLHt9LHt0eXBlOiJwYXJhZ3JhcGgiLGNoaWxkcmVuOltdfSl9ZnVuY3Rpb24gR08odCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToibGlzdGl0ZW0iLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBEcyhlLCEwKX0pfSl9ZnVuY3Rpb24gdngodCl7cmV0dXJuIGx0KGx0KHt9LCRyKSx7fSx7dHlwZToibGlzdCIsbGlzdFR5cGU6dC50YWc9PT0ib2wiPyJudW1iZXIiOiJidWxsZXQiLGNoaWxkcmVuOnQuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBEcyhlKX0pfSx0LmRpcj97ZGlyZWN0aW9uOnQuZGlyfTp7ZGlyZWN0aW9uOm51bGx9KX12YXIgWU89e2JvbGQ6MSxpdGFsaWM6MiwibGluZS10aHJvdWdoIjo0fTtmdW5jdGlvbiBYTyh0KXtyZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24oZSxuKXtyZXR1cm4gZXxZT1tuXX0sMCl9ZnVuY3Rpb24gVUUodCl7dmFyIGU9dC5jaGlsZHJlblswXTtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP2x0KGx0KHt9LCRyKSx7fSx7dHlwZToidGV4dCIsdGV4dDplLGZvcm1hdDpYTyh0LmNsYXNzZXMpfSk6VUUobHQobHQoe30sZSkse30se2NsYXNzZXM6dC5jbGFzc2VzLmNvbmNhdChlLmNsYXNzZXMpfSkpfXZhciBqZD0nPHZhbCB2YWx1ZT0iJyxQbT0nIj4nLEFtPSI8L3ZhbD4iO2Z1bmN0aW9uIG1yKHQsZSxuKXtmb3IodmFyIHI9YXJndW1lbnRzLmxlbmd0aD4zJiZhcmd1bWVudHNbM10hPT12b2lkIDA/YXJndW1lbnRzWzNdOiExLGk9W10sbz1mdW5jdGlvbigpe3ZhciBhPXRbbl07aWYoYS50eXBlPT09ImhlYWRpbmciKWkucHVzaCh7dGFnOiJoIi5jb25jYXQoYS5kZXB0aCksY2hpbGRyZW46bXIoYS50b2tlbnM/YS50b2tlbnM6W10sZSwwKS5jaGlsZHJlbn0pO2Vsc2UgaWYoYS50eXBlPT09InBhcmFncmFwaCIpaS5wdXNoKHt0YWc6InAiLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJzdHJvbmciKWkucHVzaCh7dGFnOiJzcGFuIixjbGFzc2VzOlsiYm9sZCJdLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJlbSIpaS5wdXNoKHt0YWc6InNwYW4iLGNsYXNzZXM6WyJpdGFsaWMiXSxjaGlsZHJlbjptcihhLnRva2Vucz9hLnRva2VuczpbXSxlLDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0iZGVsIilpLnB1c2goe3RhZzoic3BhbiIsY2xhc3NlczpbImxpbmUtdGhyb3VnaCJdLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZT09PSJ0ZXh0IilpZigidG9rZW5zImluIGEmJkFycmF5LmlzQXJyYXkoYS50b2tlbnMpKWkucHVzaC5hcHBseShpLFJtKG1yKGEudG9rZW5zLGUsbixyKS5jaGlsZHJlbikpO2Vsc2UgaWYociYmdHlwZW9mIGEucmF3PT0ic3RyaW5nIil7dmFyIGM9YS5yYXcuc3BsaXQoYApgKSx1PWMuZmxhdE1hcChmdW5jdGlvbihFLGspe3JldHVybiBrPT09Yy5sZW5ndGgtMT9bRV06W0Use3RhZzoiYnIiLGNoaWxkcmVuOltdfV19KTtpLnB1c2guYXBwbHkoaSxSbSh1KSl9ZWxzZSBpLnB1c2goYS5yYXcpO2Vsc2UgaWYoYS50eXBlPT09Imxpc3QiKWkucHVzaCh7dGFnOmEub3JkZXJlZD8ib2wiOiJ1bCIsY2hpbGRyZW46bXIoYS5pdGVtcyxlLDApLmNoaWxkcmVufSk7ZWxzZSBpZihhLnR5cGU9PT0ibGlzdF9pdGVtIilpLnB1c2goe3RhZzoibGkiLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCwhMCkuY2hpbGRyZW59KTtlbHNlIGlmKGEudHlwZSE9PSJzcGFjZSIpaWYoYS50eXBlPT09Imh0bWwiKXtpZihhLnRleHQ9PT1BbSlyZXR1cm57djp7Y2hpbGRyZW46aSxjdXJzb3I6bn19O3ZhciBkPWEudGV4dC5pbmRleE9mKFBtKTtpZihhLnRleHQuc3RhcnRzV2l0aChqZCkmJmQ+LTEpe3ZhciBmPU51bWJlcihhLnRleHQuc2xpY2UoamQubGVuZ3RoLGQpKTtpZihOdW1iZXIuaXNOYU4oZikpdGhyb3cgRXJyb3IoIklsbGVnYWwgdmFsIGludGVybWVkaWF0ZSBub2RlOiAiLmNvbmNhdChKU09OLnN0cmluZ2lmeShhKSkpO3ZhciBwPW1yKHQubWFwKGZ1bmN0aW9uKEUpe3JldHVybiBFLnR5cGU9PT0ibGluayJ8fEUudHlwZT09PSJsaXN0Ij97dHlwZToidGV4dCIscmF3OkUucmF3LHRleHQ6RS5yYXd9OkV9KSxlLG4rMSksZz1wLmNoaWxkcmVuLG09cC5jdXJzb3Isdz1lW2ZdO2lmKHcuX3R5cGU9PT0ibGluayIpaS5wdXNoKHt0YWc6ImEiLGhyZWY6dy5ocmVmLGNoaWxkcmVuOmd9KTtlbHNlIGlmKHcuX3R5cGU9PT0iZmlsZSIpe3ZhciB2LHgsXztpLnB1c2goe3RhZzoiaW1nIixzcmM6cm4uY29udmVydEZpbGVTb3VyY2UodykudXJsLHdpZHRoOih2PXcubWV0YWRhdGEpPT09bnVsbHx8dj09PXZvaWQgMD92b2lkIDA6di53aWR0aCxoZWlnaHQ6KHg9dy5tZXRhZGF0YSk9PT1udWxsfHx4PT09dm9pZCAwP3ZvaWQgMDp4LmhlaWdodCxtaW1lVHlwZTooXz13Lm1ldGFkYXRhKT09PW51bGx8fF89PT12b2lkIDA/dm9pZCAwOl8ubWltZVR5cGUsY2hpbGRyZW46W119KX1uPW19dmFyIFM9LzxiclxzKlwvPz4vZ2k7YS50ZXh0LnRyaW0oKS5tYXRjaChTKSYmaS5wdXNoKHt0YWc6ImJyIixjaGlsZHJlbjpbXX0pfWVsc2UgYS50eXBlPT09ImxpbmsiP2EucmF3PT09YS5ocmVmP2kucHVzaChhLnJhdyk6aS5wdXNoKHt0YWc6ImEiLGhyZWY6YS5ocmVmLGNoaWxkcmVuOm1yKGEudG9rZW5zP2EudG9rZW5zOltdLGUsMCkuY2hpbGRyZW59KTphLnR5cGU9PT0iYnIiP2kucHVzaCh7dGFnOiJiciIsY2hpbGRyZW46W119KTpjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgcGFyc2UgbWFya2Rvd246IHVuc3VwcG9ydGVkIHRva2VuIHR5cGU6ICIuY29uY2F0KGEudHlwZSwiLiBGb3VuZDogIikuY29uY2F0KGEucmF3KSk7bisrfSxsO248dC5sZW5ndGg7KWlmKGw9bygpLGwpcmV0dXJuIGwudjtyZXR1cm57Y2hpbGRyZW46aSxjdXJzb3I6bn19ZnVuY3Rpb24gV0UodCl7dmFyIGU9dC50ZW1wbGF0ZVN0cmluZ3Msbj10LmV4cHJzLHI9ZS5mbGF0TWFwKGZ1bmN0aW9uKGEsYyl7dmFyIHU9bltjXTtyZXR1cm4gdT91W25uXT09PSJsaW5rIj9hLmNvbmNhdCgiIi5jb25jYXQoamQpLmNvbmNhdChjKS5jb25jYXQoUG0pLmNvbmNhdCh1LmNoaWxkcmVuWzBdKS5jb25jYXQoQW0pKTphLmNvbmNhdCgiIi5jb25jYXQoamQpLmNvbmNhdChjKS5jb25jYXQoUG0pLmNvbmNhdChBbSkpOmF9KS5qb2luKCIiKSxpPV9PKHIse2dmbTohMH0pLG89bXIoaSxuLDApLGw9by5jaGlsZHJlbixzPW8uY3Vyc29yO2lmKHMhPT1pLmxlbmd0aCl0aHJvdyBFcnJvcigiVW5leHBlY3RlZGx5IHRlcm1pbmF0ZWQgbWFya2Rvd24gcGFyc2luZy4gUG9zc2libGUgcmVhc29uOiB1bmNsb3NlZCBodG1sIHRhZz8iKTtyZXR1cm4gcXQocXQoe30sbm4sInJpY2h0ZXh0IiksImNoaWxkcmVuIixsKX12YXIgRW49e30sJHQ9e30sVXQ9e30sc2U9X2U7bGV0IHpkPW5ldyBNYXA7ZnVuY3Rpb24geXgodCl7Zm9yKDt0IT1udWxsOyl7aWYodC5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXJldHVybiB0O3Q9dC5maXJzdENoaWxkfXJldHVybiBudWxsfWZ1bmN0aW9uIHh4KHQpe2xldCBlPXQucGFyZW50Tm9kZTtpZihlPT1udWxsKXRocm93IEVycm9yKCJTaG91bGQgbmV2ZXIgaGFwcGVuIik7cmV0dXJuW2UsQXJyYXkuZnJvbShlLmNoaWxkTm9kZXMpLmluZGV4T2YodCldfWZ1bmN0aW9uIEhFKHQpe2xldCBlPXt9O3Q9dC5zcGxpdCgiOyIpO2ZvcihsZXQgbiBvZiB0KWlmKG4hPT0iIil7bGV0W3IsaV09bi5zcGxpdCgvOihbXl0rKS8pO2Vbci50cmltKCldPWkudHJpbSgpfXJldHVybiBlfWZ1bmN0aW9uIEZkKHQpe2xldCBlPXpkLmdldCh0KTtyZXR1cm4gZT09PXZvaWQgMCYmKGU9SEUodCksemQuc2V0KHQsZSkpLGV9ZnVuY3Rpb24gSk8odCl7bGV0IGU9IiI7Zm9yKGxldCBuIGluIHQpbiYmKGUrPWAke259OiAke3Rbbl19O2ApO3JldHVybiBlfWZ1bmN0aW9uIHdsKHQsZSl7dmFyIG49RmQoImdldFN0eWxlImluIHQ/dC5nZXRTdHlsZSgpOnQuc3R5bGUpO2U9T2JqZWN0LmVudHJpZXMoZSkucmVkdWNlKChyLFtpLG9dKT0+KG89PT1udWxsP2RlbGV0ZSByW2ldOnJbaV09byxyKSx7Li4ubn0pLG49Sk8oZSksdC5zZXRTdHlsZShuKSx6ZC5zZXQobixlKX1mdW5jdGlvbiBWRSh0LGUpe3ZhciBuPXQuZ2V0Tm9kZXMoKSxyPW4ubGVuZ3RoO2lmKHNlLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbih0KSl7Zm9yKHZhciBpPXNlLiRjcmVhdGVSYW5nZVNlbGVjdGlvbigpLG89aS5hbmNob3IsbD1pLmZvY3VzLHM9MDtzPHI7cysrKXt2YXIgYT1uW3NdO3NlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGEpJiYoby5zZXQoYS5nZXRLZXkoKSwwLCJlbGVtZW50IiksbC5zZXQoYS5nZXRLZXkoKSxhLmdldENoaWxkcmVuU2l6ZSgpLCJlbGVtZW50IiksVkUoc2UuJG5vcm1hbGl6ZVNlbGVjdGlvbl9fRVhQRVJJTUVOVEFMKGkpLGUpKX1zZS4kc2V0U2VsZWN0aW9uKHQpfWVsc2UgaWYoLS1yLGk9blswXSxvPW5bcl0sdC5pc0NvbGxhcHNlZCgpKXdsKHQsZSk7ZWxzZXt2YXIgYz10LmFuY2hvcix1PXQuZm9jdXM7cz1pLmdldFRleHRDb250ZW50KCkubGVuZ3RoLGE9dS5vZmZzZXQ7dmFyIGQ9Yy5vZmZzZXQsZj1jLmlzQmVmb3JlKHUpO2w9Zj9kOmEsdD1mP2E6ZDt2YXIgcD1mP2MudHlwZTp1LnR5cGUsZz1mP3UudHlwZTpjLnR5cGU7aWYoYz1mP3Uua2V5OmMua2V5LHNlLiRpc1RleHROb2RlKGkpJiZsPT09cyYmKHU9aS5nZXROZXh0U2libGluZygpLHNlLiRpc1RleHROb2RlKHUpJiYobD1kPTAsaT11KSksbi5sZW5ndGg9PT0xKXNlLiRpc1RleHROb2RlKGkpJiYobD1wPT09ImVsZW1lbnQiPzA6ZD5hP2E6ZCx0PWc9PT0iZWxlbWVudCI/czpkPmE/ZDphLGwhPT10JiYobD09PTAmJnQ9PT1zPyh3bChpLGUpLGkuc2VsZWN0KGwsdCkpOihuPWkuc3BsaXRUZXh0KGwsdCksbj1sPT09MD9uWzBdOm5bMV0sd2wobixlKSxuLnNlbGVjdCgwLHQtbCkpKSk7ZWxzZSBmb3Ioc2UuJGlzVGV4dE5vZGUoaSkmJmw8aS5nZXRUZXh0Q29udGVudFNpemUoKSYmKGwhPT0wJiYoaT1pLnNwbGl0VGV4dChsKVsxXSksd2woaSxlKSksc2UuJGlzVGV4dE5vZGUobykmJihsPW8uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGgsby5fX2tleSE9PWMmJnQhPT0wJiYodD1sKSx0IT09bCYmKFtvXT1vLnNwbGl0VGV4dCh0KSksdCE9PTAmJndsKG8sZSkpLHQ9MTt0PHI7dCsrKWw9blt0XSxzPWwuZ2V0S2V5KCksc2UuJGlzVGV4dE5vZGUobCkmJnMhPT1pLmdldEtleSgpJiZzIT09by5nZXRLZXkoKSYmIWwuaXNUb2tlbigpJiZ3bChsLGUpfX1mdW5jdGlvbiBRTyh0KXtmb3IoO3QhPT1udWxsJiYhc2UuJGlzUm9vdE9yU2hhZG93Um9vdCh0KTspe2xldCBlPXQuZ2V0TGF0ZXN0KCksbj10LmdldFBhcmVudCgpO2UuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZ0LnJlbW92ZSghMCksdD1ufX1mdW5jdGlvbiBacCh0LGUsbixyLGk9bnVsbCl7aWYoZS5sZW5ndGghPT0wKXt2YXIgbz1lWzBdLGw9bmV3IE1hcCxzPVtdO289c2UuJGlzRWxlbWVudE5vZGUobyk/bzpvLmdldFBhcmVudE9yVGhyb3coKSxvLmlzSW5saW5lKCkmJihvPW8uZ2V0UGFyZW50T3JUaHJvdygpKTtmb3IodmFyIGE9ITE7byE9PW51bGw7KXt2YXIgYz1vLmdldFByZXZpb3VzU2libGluZygpO2lmKGMhPT1udWxsKXtvPWMsYT0hMDticmVha31pZihvPW8uZ2V0UGFyZW50T3JUaHJvdygpLHNlLiRpc1Jvb3RPclNoYWRvd1Jvb3QobykpYnJlYWt9Yz1uZXcgU2V0O2Zvcih2YXIgdT0wO3U8bjt1Kyspe3ZhciBkPWVbdV07c2UuJGlzRWxlbWVudE5vZGUoZCkmJmQuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZjLmFkZChkLmdldEtleSgpKX12YXIgZj1uZXcgU2V0O2Zvcih1PTA7dTxuO3UrKyl7ZD1lW3VdO3ZhciBwPWQuZ2V0UGFyZW50KCk7aWYocCE9PW51bGwmJnAuaXNJbmxpbmUoKSYmKHA9cC5nZXRQYXJlbnQoKSkscCE9PW51bGwmJnNlLiRpc0xlYWZOb2RlKGQpJiYhZi5oYXMoZC5nZXRLZXkoKSkpe2lmKGQ9cC5nZXRLZXkoKSxsLmdldChkKT09PXZvaWQgMCl7bGV0IGc9cigpO2cuc2V0Rm9ybWF0KHAuZ2V0Rm9ybWF0VHlwZSgpKSxnLnNldEluZGVudChwLmdldEluZGVudCgpKSxzLnB1c2goZyksbC5zZXQoZCxnKSxwLmdldENoaWxkcmVuKCkuZm9yRWFjaChtPT57Zy5hcHBlbmQobSksZi5hZGQobS5nZXRLZXkoKSksc2UuJGlzRWxlbWVudE5vZGUobSkmJm0uZ2V0Q2hpbGRyZW5LZXlzKCkuZm9yRWFjaCh3PT5mLmFkZCh3KSl9KSxRTyhwKX19ZWxzZSBjLmhhcyhkLmdldEtleSgpKSYmKHA9cigpLHAuc2V0Rm9ybWF0KGQuZ2V0Rm9ybWF0VHlwZSgpKSxwLnNldEluZGVudChkLmdldEluZGVudCgpKSxzLnB1c2gocCksZC5yZW1vdmUoITApKX1pZihpIT09bnVsbClmb3IoZT0wO2U8cy5sZW5ndGg7ZSsrKWkuYXBwZW5kKHNbZV0pO2lmKGU9bnVsbCxzZS4kaXNSb290T3JTaGFkb3dSb290KG8pKWlmKGEpaWYoaSE9PW51bGwpby5pbnNlcnRBZnRlcihpKTtlbHNlIGZvcihpPXMubGVuZ3RoLTE7MDw9aTtpLS0pby5pbnNlcnRBZnRlcihzW2ldKTtlbHNlIGlmKGE9by5nZXRGaXJzdENoaWxkKCksc2UuJGlzRWxlbWVudE5vZGUoYSkmJihvPWEpLGE9PT1udWxsKWlmKGkpby5hcHBlbmQoaSk7ZWxzZSBmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWE9c1tpXSxvLmFwcGVuZChhKSxlPWE7ZWxzZSBpZihpIT09bnVsbClhLmluc2VydEJlZm9yZShpKTtlbHNlIGZvcihvPTA7bzxzLmxlbmd0aDtvKyspaT1zW29dLGEuaW5zZXJ0QmVmb3JlKGkpLGU9aTtlbHNlIGlmKGkpby5pbnNlcnRBZnRlcihpKTtlbHNlIGZvcihpPXMubGVuZ3RoLTE7MDw9aTtpLS0pYT1zW2ldLG8uaW5zZXJ0QWZ0ZXIoYSksZT1hO3M9c2UuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksc2UuJGlzUmFuZ2VTZWxlY3Rpb24ocykmJnMuYW5jaG9yLmdldE5vZGUoKS5pc0F0dGFjaGVkKCkmJnMuZm9jdXMuZ2V0Tm9kZSgpLmlzQXR0YWNoZWQoKT9zZS4kc2V0U2VsZWN0aW9uKHMuY2xvbmUoKSk6ZSE9PW51bGw/ZS5zZWxlY3RFbmQoKTp0LmRpcnR5PSEwfX1mdW5jdGlvbiBLRSh0LGUsbixyKXt0Lm1vZGlmeShlPyJleHRlbmQiOiJtb3ZlIixuLHIpfWZ1bmN0aW9uIFpFKHQpe3JldHVybiB0PXQuYW5jaG9yLmdldE5vZGUoKSwoc2UuJGlzUm9vdE5vZGUodCk/dDp0LmdldFBhcmVudE9yVGhyb3coKSkuZ2V0RGlyZWN0aW9uKCk9PT0icnRsIn1VdC4kYWRkTm9kZVN0eWxlPWZ1bmN0aW9uKHQpe3Q9dC5nZXRTdHlsZSgpO2xldCBlPUhFKHQpO3pkLnNldCh0LGUpfTtVdC4kY2xvbmVXaXRoUHJvcGVydGllcz1mdW5jdGlvbih0KXtsZXQgZT10LmNvbnN0cnVjdG9yLmNsb25lKHQpO3JldHVybiBlLl9fcGFyZW50PXQuX19wYXJlbnQsZS5fX25leHQ9dC5fX25leHQsZS5fX3ByZXY9dC5fX3ByZXYsc2UuJGlzRWxlbWVudE5vZGUodCkmJnNlLiRpc0VsZW1lbnROb2RlKGUpPyhlLl9fZmlyc3Q9dC5fX2ZpcnN0LGUuX19sYXN0PXQuX19sYXN0LGUuX19zaXplPXQuX19zaXplLGUuX19mb3JtYXQ9dC5fX2Zvcm1hdCxlLl9faW5kZW50PXQuX19pbmRlbnQsZS5fX2Rpcj10Ll9fZGlyLGUpOihzZS4kaXNUZXh0Tm9kZSh0KSYmc2UuJGlzVGV4dE5vZGUoZSkmJihlLl9fZm9ybWF0PXQuX19mb3JtYXQsZS5fX3N0eWxlPXQuX19zdHlsZSxlLl9fbW9kZT10Ll9fbW9kZSxlLl9fZGV0YWlsPXQuX19kZXRhaWwpLGUpfTtVdC4kZ2V0U2VsZWN0aW9uU3R5bGVWYWx1ZUZvclByb3BlcnR5PWZ1bmN0aW9uKHQsZSxuPSIiKXtsZXQgcj1udWxsLGk9dC5nZXROb2RlcygpO3ZhciBvPXQuYW5jaG9yLGw9dC5mb2N1cyxzPXQuaXNCYWNrd2FyZCgpO2xldCBhPXM/bC5vZmZzZXQ6by5vZmZzZXQ7aWYobz1zP2wuZ2V0Tm9kZSgpOm8uZ2V0Tm9kZSgpLHQuc3R5bGUhPT0iIiYmKHQ9RmQodC5zdHlsZSksdCE9PW51bGwmJmUgaW4gdCkpcmV0dXJuIHRbZV07Zm9yKHQ9MDt0PGkubGVuZ3RoO3QrKyl7dmFyIGM9aVt0XTtpZigodD09PTB8fGEhPT0wfHwhYy5pcyhvKSkmJnNlLiRpc1RleHROb2RlKGMpKXtpZihsPWUscz1uLGM9Yy5nZXRTdHlsZSgpLGM9RmQoYyksbD1jIT09bnVsbCYmY1tsXXx8cyxyPT09bnVsbClyPWw7ZWxzZSBpZihyIT09bCl7cj0iIjticmVha319fXJldHVybiByPT09bnVsbD9uOnJ9O1V0LiRpc0F0Tm9kZUVuZD1mdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09InRleHQiP3Qub2Zmc2V0PT09dC5nZXROb2RlKCkuZ2V0VGV4dENvbnRlbnRTaXplKCk6dC5vZmZzZXQ9PT10LmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKX07VXQuJGlzUGFyZW50RWxlbWVudFJUTD1aRTtVdC4kbW92ZUNhcmV0U2VsZWN0aW9uPUtFO1V0LiRtb3ZlQ2hhcmFjdGVyPWZ1bmN0aW9uKHQsZSxuKXtsZXQgcj1aRSh0KTtLRSh0LGUsbj8hcjpyLCJjaGFyYWN0ZXIiKX07VXQuJHBhdGNoU3R5bGVUZXh0PVZFO1V0LiRzZWxlY3RBbGw9ZnVuY3Rpb24odCl7bGV0IGU9dC5hbmNob3I7dD10LmZvY3VzO3ZhciBuPWUuZ2V0Tm9kZSgpLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5nZXRQYXJlbnRPclRocm93KCk7bGV0IHI9bi5nZXRGaXJzdERlc2NlbmRhbnQoKTtuPW4uZ2V0TGFzdERlc2NlbmRhbnQoKTtsZXQgaT0iZWxlbWVudCIsbz0iZWxlbWVudCIsbD0wO3NlLiRpc1RleHROb2RlKHIpP2k9InRleHQiOnNlLiRpc0VsZW1lbnROb2RlKHIpfHxyPT09bnVsbHx8KHI9ci5nZXRQYXJlbnRPclRocm93KCkpLHNlLiRpc1RleHROb2RlKG4pPyhvPSJ0ZXh0IixsPW4uZ2V0VGV4dENvbnRlbnRTaXplKCkpOnNlLiRpc0VsZW1lbnROb2RlKG4pfHxuPT09bnVsbHx8KG49bi5nZXRQYXJlbnRPclRocm93KCkpLHImJm4mJihlLnNldChyLmdldEtleSgpLDAsaSksdC5zZXQobi5nZXRLZXkoKSxsLG8pKX07VXQuJHNldEJsb2Nrc1R5cGU9ZnVuY3Rpb24odCxlKXtpZih0LmFuY2hvci5rZXk9PT0icm9vdCIpe2U9ZSgpO3ZhciBuPXNlLiRnZXRSb290KCk7KHQ9bi5nZXRGaXJzdENoaWxkKCkpP3QucmVwbGFjZShlLCEwKTpuLmFwcGVuZChlKX1lbHNlIGZvcihuPXQuZ2V0Tm9kZXMoKSx0PXQuYW5jaG9yLmdldE5vZGUoKS5nZXRQYXJlbnRPclRocm93KCksbi5pbmRleE9mKHQpPT09LTEmJm4ucHVzaCh0KSx0LmlzSW5saW5lKCkmJih0PXQuZ2V0UGFyZW50T3JUaHJvdygpLG4uaW5kZXhPZih0KT09PS0xJiZuLnB1c2godCkpLHQ9MDt0PG4ubGVuZ3RoO3QrKyl7bGV0IG89blt0XTt2YXIgcj1vO2lmKCFzZS4kaXNFbGVtZW50Tm9kZShyKXx8c2UuJGlzUm9vdE9yU2hhZG93Um9vdChyKSlyPSExO2Vsc2V7dmFyIGk9ci5nZXRGaXJzdENoaWxkKCk7aT1pPT09bnVsbHx8c2UuJGlzTGluZUJyZWFrTm9kZShpKXx8c2UuJGlzVGV4dE5vZGUoaSl8fGkuaXNJbmxpbmUoKSxyPSFyLmlzSW5saW5lKCkmJnIuY2FuQmVFbXB0eSgpIT09ITEmJml9ciYmKHI9ZSgpLHIuc2V0Rm9ybWF0KG8uZ2V0Rm9ybWF0VHlwZSgpKSxyLnNldEluZGVudChvLmdldEluZGVudCgpKSxvLnJlcGxhY2UociwhMCkpfX07VXQuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0PXNlLiRnZXRBZGphY2VudE5vZGUodC5mb2N1cyxlKSxzZS4kaXNEZWNvcmF0b3JOb2RlKHQpJiYhdC5pc0lzb2xhdGVkKCl8fHNlLiRpc0VsZW1lbnROb2RlKHQpJiYhdC5pc0lubGluZSgpJiYhdC5jYW5CZUVtcHR5KCl9O1V0LiRzbGljZVNlbGVjdGVkVGV4dE5vZGVDb250ZW50PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1NlbGVjdGVkKCkmJiFlLmlzU2VnbWVudGVkKCkmJiFlLmlzVG9rZW4oKSYmKHNlLiRpc1JhbmdlU2VsZWN0aW9uKHQpfHxzZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24odCkpKXt2YXIgbj10LmFuY2hvci5nZXROb2RlKCkscj10LmZvY3VzLmdldE5vZGUoKSxpPWUuaXMobiksbz1lLmlzKHIpO2lmKGl8fG8pe2k9dC5pc0JhY2t3YXJkKCk7bGV0W2wsc109dC5nZXRDaGFyYWN0ZXJPZmZzZXRzKCk7dD1uLmlzKHIpLG89ZS5pcyhpP3I6bikscj1lLmlzKGk/bjpyKSxuPTA7bGV0IGE7dD8obj1sPnM/czpsLGE9bD5zP2w6cyk6bz8obj1pP3M6bCxhPXZvaWQgMCk6ciYmKGk9aT9sOnMsbj0wLGE9aSksZS5fX3RleHQ9ZS5fX3RleHQuc2xpY2UobixhKX19cmV0dXJuIGV9O1V0LiR3cmFwTm9kZXM9ZnVuY3Rpb24odCxlLG49bnVsbCl7dmFyIHI9dC5nZXROb2RlcygpO2xldCBpPXIubGVuZ3RoO3ZhciBvPXQuYW5jaG9yO2lmKGk9PT0wfHxpPT09MSYmby50eXBlPT09ImVsZW1lbnQiJiZvLmdldE5vZGUoKS5nZXRDaGlsZHJlblNpemUoKT09PTApe3Q9by50eXBlPT09InRleHQiP28uZ2V0Tm9kZSgpLmdldFBhcmVudE9yVGhyb3coKTpvLmdldE5vZGUoKSxyPXQuZ2V0Q2hpbGRyZW4oKTtsZXQgcz1lKCk7cy5zZXRGb3JtYXQodC5nZXRGb3JtYXRUeXBlKCkpLHMuc2V0SW5kZW50KHQuZ2V0SW5kZW50KCkpLHIuZm9yRWFjaChhPT5zLmFwcGVuZChhKSksbiYmKHM9bi5hcHBlbmQocykpLHQucmVwbGFjZShzKX1lbHNle289bnVsbDt2YXIgbD1bXTtmb3IobGV0IHM9MDtzPGk7cysrKXtsZXQgYT1yW3NdO3NlLiRpc1Jvb3RPclNoYWRvd1Jvb3QoYSk/KFpwKHQsbCxsLmxlbmd0aCxlLG4pLGw9W10sbz1hKTpvPT09bnVsbHx8byE9PW51bGwmJnNlLiRoYXNBbmNlc3RvcihhLG8pP2wucHVzaChhKTooWnAodCxsLGwubGVuZ3RoLGUsbiksbD1bYV0pfVpwKHQsbCxsLmxlbmd0aCxlLG4pfX07VXQuY3JlYXRlRE9NUmFuZ2U9ZnVuY3Rpb24odCxlLG4scixpKXtsZXQgbz1lLmdldEtleSgpLGw9ci5nZXRLZXkoKSxzPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCksYT10LmdldEVsZW1lbnRCeUtleShvKTtpZih0PXQuZ2V0RWxlbWVudEJ5S2V5KGwpLHNlLiRpc1RleHROb2RlKGUpJiYoYT15eChhKSksc2UuJGlzVGV4dE5vZGUocikmJih0PXl4KHQpKSxlPT09dm9pZCAwfHxyPT09dm9pZCAwfHxhPT09bnVsbHx8dD09PW51bGwpcmV0dXJuIG51bGw7YS5ub2RlTmFtZT09PSJCUiImJihbYSxuXT14eChhKSksdC5ub2RlTmFtZT09PSJCUiImJihbdCxpXT14eCh0KSksZT1hLmZpcnN0Q2hpbGQsYT09PXQmJmUhPW51bGwmJmUubm9kZU5hbWU9PT0iQlIiJiZuPT09MCYmaT09PTAmJihpPTEpO3RyeXtzLnNldFN0YXJ0KGEsbikscy5zZXRFbmQodCxpKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4hcy5jb2xsYXBzZWR8fG49PT1pJiZvPT09bHx8KHMuc2V0U3RhcnQodCxpKSxzLnNldEVuZChhLG4pKSxzfTtVdC5jcmVhdGVSZWN0c0Zyb21ET01SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciBuPXQuZ2V0Um9vdEVsZW1lbnQoKTtpZihuPT09bnVsbClyZXR1cm5bXTt0PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1nZXRDb21wdXRlZFN0eWxlKG4pLG49cGFyc2VGbG9hdChuLnBhZGRpbmdMZWZ0KStwYXJzZUZsb2F0KG4ucGFkZGluZ1JpZ2h0KSxlPUFycmF5LmZyb20oZS5nZXRDbGllbnRSZWN0cygpKTtsZXQgcj1lLmxlbmd0aDtlLnNvcnQoKG8sbCk9PntsZXQgcz1vLnRvcC1sLnRvcDtyZXR1cm4gMz49TWF0aC5hYnMocyk/by5sZWZ0LWwubGVmdDpzfSk7bGV0IGk7Zm9yKGxldCBvPTA7bzxyO28rKyl7bGV0IGw9ZVtvXSxzPWwud2lkdGgrbj09PXQud2lkdGg7aSYmaS50b3A8PWwudG9wJiZpLnRvcCtpLmhlaWdodD5sLnRvcCYmaS5sZWZ0K2kud2lkdGg+bC5sZWZ0fHxzPyhlLnNwbGljZShvLS0sMSksci0tKTppPWx9cmV0dXJuIGV9O1V0LmdldFN0eWxlT2JqZWN0RnJvbUNTUz1GZDtVdC50cmltVGV4dENvbnRlbnRGcm9tQW5jaG9yPWZ1bmN0aW9uKHQsZSxuKXtsZXQgcj1lLmdldE5vZGUoKTtpZihzZS4kaXNFbGVtZW50Tm9kZShyKSl7dmFyIGk9ci5nZXREZXNjZW5kYW50QnlJbmRleChlLm9mZnNldCk7aSE9PW51bGwmJihyPWkpfWZvcig7MDxuJiZyIT09bnVsbDspe3ZhciBvPXIuZ2V0UHJldmlvdXNTaWJsaW5nKCksbD0wO2lmKG89PT1udWxsKXtpPXIuZ2V0UGFyZW50T3JUaHJvdygpO2Zvcih2YXIgcz1pLmdldFByZXZpb3VzU2libGluZygpO3M9PT1udWxsOyl7aWYoaT1pLmdldFBhcmVudCgpLGk9PT1udWxsKXtvPW51bGw7YnJlYWt9cz1pLmdldFByZXZpb3VzU2libGluZygpfWkhPT1udWxsJiYobD1pLmlzSW5saW5lKCk/MDoyLG89c2UuJGlzRWxlbWVudE5vZGUocyk/cy5nZXRMYXN0RGVzY2VuZGFudCgpOnMpfWlmKHM9ci5nZXRUZXh0Q29udGVudCgpLHM9PT0iIiYmc2UuJGlzRWxlbWVudE5vZGUocikmJiFyLmlzSW5saW5lKCkmJihzPWAKCmApLGk9cy5sZW5ndGgsIXNlLiRpc1RleHROb2RlKHIpfHxuPj1pKXM9ci5nZXRQYXJlbnQoKSxyLnJlbW92ZSgpLHM9PW51bGx8fHMuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxzZS4kaXNSb290Tm9kZShzKXx8cy5yZW1vdmUoKSxuLT1pK2wscj1vO2Vsc2V7bGV0IGE9ci5nZXRLZXkoKTtsPXQuZ2V0RWRpdG9yU3RhdGUoKS5yZWFkKCgpPT57Y29uc3QgdT1zZS4kZ2V0Tm9kZUJ5S2V5KGEpO3JldHVybiBzZS4kaXNUZXh0Tm9kZSh1KSYmdS5pc1NpbXBsZVRleHQoKT91LmdldFRleHRDb250ZW50KCk6bnVsbH0pLG89aS1uO2xldCBjPXMuc2xpY2UoMCxvKTtsIT09bnVsbCYmbCE9PXM/KG49c2UuJGdldFByZXZpb3VzU2VsZWN0aW9uKCksaT1yLHIuaXNTaW1wbGVUZXh0KCk/ci5zZXRUZXh0Q29udGVudChsKTooaT1zZS4kY3JlYXRlVGV4dE5vZGUobCksci5yZXBsYWNlKGkpKSxzZS4kaXNSYW5nZVNlbGVjdGlvbihuKSYmbi5pc0NvbGxhcHNlZCgpJiYobj1uLmFuY2hvci5vZmZzZXQsaS5zZWxlY3QobixuKSkpOnIuaXNTaW1wbGVUZXh0KCk/KGw9ZS5rZXk9PT1hLHM9ZS5vZmZzZXQsczxuJiYocz1pKSxuPWw/cy1uOjAsaT1sP3M6byxsJiZuPT09MD8oW25dPXIuc3BsaXRUZXh0KG4saSksbi5yZW1vdmUoKSk6KFssbl09ci5zcGxpdFRleHQobixpKSxuLnJlbW92ZSgpKSk6KG49c2UuJGNyZWF0ZVRleHROb2RlKGMpLHIucmVwbGFjZShuKSksbj0wfX19O2NvbnN0IHFPPVV0O3ZhciB1bz1xTyxlUD11byxFdD1fZTtmdW5jdGlvbiB0UCh0KXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2UuYXBwZW5kKCJjb2RlIix0KTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWUuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke3R9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHtlfSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24gR0UodCxlKXtmb3IobGV0IG4gb2YgZSlpZih0LnR5cGUuc3RhcnRzV2l0aChuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBZRSh0LGUpe2Zvcig7dCE9PUV0LiRnZXRSb290KCkmJnQhPW51bGw7KXtpZihlKHQpKXJldHVybiB0O3Q9dC5nZXRQYXJlbnQoKX1yZXR1cm4gbnVsbH0kdC4kc3BsaXROb2RlPUV0LiRzcGxpdE5vZGU7JHQuaXNIVE1MQW5jaG9yRWxlbWVudD1FdC5pc0hUTUxBbmNob3JFbGVtZW50OyR0LmlzSFRNTEVsZW1lbnQ9RXQuaXNIVE1MRWxlbWVudDskdC4kZGZzPWZ1bmN0aW9uKHQsZSl7bGV0IG49W107dD0odHx8RXQuJGdldFJvb3QoKSkuZ2V0TGF0ZXN0KCksZT1lfHwoRXQuJGlzRWxlbWVudE5vZGUodCk/dC5nZXRMYXN0RGVzY2VuZGFudCgpOnQpO2Zvcih2YXIgcj10LGk9MDsocj1yLmdldFBhcmVudCgpKSE9PW51bGw7KWkrKztmb3Iocj1pO3QhPT1udWxsJiYhdC5pcyhlKTspaWYobi5wdXNoKHtkZXB0aDpyLG5vZGU6dH0pLEV0LiRpc0VsZW1lbnROb2RlKHQpJiYwPHQuZ2V0Q2hpbGRyZW5TaXplKCkpdD10LmdldEZpcnN0Q2hpbGQoKSxyKys7ZWxzZSBmb3IoaT1udWxsO2k9PT1udWxsJiZ0IT09bnVsbDspaT10LmdldE5leHRTaWJsaW5nKCksaT09PW51bGw/KHQ9dC5nZXRQYXJlbnQoKSxyLS0pOnQ9aTtyZXR1cm4gdCE9PW51bGwmJnQuaXMoZSkmJm4ucHVzaCh7ZGVwdGg6cixub2RlOnR9KSxufTskdC4kZmlsdGVyPWZ1bmN0aW9uKHQsZSl7bGV0IG49W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2xldCBpPWUodFtyXSk7aSE9PW51bGwmJm4ucHVzaChpKX1yZXR1cm4gbn07JHQuJGZpbmRNYXRjaGluZ1BhcmVudD1ZRTskdC4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdz1mdW5jdGlvbih0KXtsZXQgZT1ZRSh0LG49PkV0LiRpc0VsZW1lbnROb2RlKG4pJiYhbi5pc0lubGluZSgpKTtyZXR1cm4gRXQuJGlzRWxlbWVudE5vZGUoZSl8fHRQKDQsdC5fX2tleSksZX07JHQuJGdldE5lYXJlc3ROb2RlT2ZUeXBlPWZ1bmN0aW9uKHQsZSl7Zm9yKDt0IT1udWxsOyl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuIHQ7dD10LmdldFBhcmVudCgpfXJldHVybiBudWxsfTskdC4kaW5zZXJ0Rmlyc3Q9ZnVuY3Rpb24odCxlKXtsZXQgbj10LmdldEZpcnN0Q2hpbGQoKTtuIT09bnVsbD9uLmluc2VydEJlZm9yZShlKTp0LmFwcGVuZChlKX07JHQuJGluc2VydE5vZGVUb05lYXJlc3RSb290PWZ1bmN0aW9uKHQpe3ZhciBlPUV0LiRnZXRTZWxlY3Rpb24oKXx8RXQuJGdldFByZXZpb3VzU2VsZWN0aW9uKCk7aWYoRXQuJGlzUmFuZ2VTZWxlY3Rpb24oZSkpe3Zhcntmb2N1czpufT1lO2lmKGU9bi5nZXROb2RlKCksbj1uLm9mZnNldCxFdC4kaXNSb290T3JTaGFkb3dSb290KGUpKW49ZS5nZXRDaGlsZEF0SW5kZXgobiksbj09bnVsbD9lLmFwcGVuZCh0KTpuLmluc2VydEJlZm9yZSh0KSx0LnNlbGVjdE5leHQoKTtlbHNle2xldCByLGk7RXQuJGlzVGV4dE5vZGUoZSk/KHI9ZS5nZXRQYXJlbnRPclRocm93KCksaT1lLmdldEluZGV4V2l0aGluUGFyZW50KCksMDxuJiYoaSs9MSxlLnNwbGl0VGV4dChuKSkpOihyPWUsaT1uKSxbLGVdPUV0LiRzcGxpdE5vZGUocixpKSxlLmluc2VydEJlZm9yZSh0KSxlLnNlbGVjdFN0YXJ0KCl9fWVsc2UgRXQuJGlzTm9kZVNlbGVjdGlvbihlKXx8RXQuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKGUpPyhlPWUuZ2V0Tm9kZXMoKSxlW2UubGVuZ3RoLTFdLmdldFRvcExldmVsRWxlbWVudE9yVGhyb3coKS5pbnNlcnRBZnRlcih0KSk6RXQuJGdldFJvb3QoKS5hcHBlbmQodCksZT1FdC4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLHQuaW5zZXJ0QWZ0ZXIoZSksZS5zZWxlY3QoKTtyZXR1cm4gdC5nZXRMYXRlc3QoKX07JHQuJHJlc3RvcmVFZGl0b3JTdGF0ZT1mdW5jdGlvbih0LGUpe2xldCBuPW5ldyBNYXAscj10Ll9wZW5kaW5nRWRpdG9yU3RhdGU7Zm9yKGxldFtpLG9db2YgZS5fbm9kZU1hcCl7bGV0IGw9ZVAuJGNsb25lV2l0aFByb3BlcnRpZXMobyk7RXQuJGlzVGV4dE5vZGUobCkmJihsLl9fdGV4dD1vLl9fdGV4dCksbi5zZXQoaSxsKX1yJiYoci5fbm9kZU1hcD1uKSx0Ll9kaXJ0eVR5cGU9Mix0PWUuX3NlbGVjdGlvbixFdC4kc2V0U2VsZWN0aW9uKHQ9PT1udWxsP251bGw6dC5jbG9uZSgpKX07JHQuJHdyYXBOb2RlSW5FbGVtZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZSgpLHQucmVwbGFjZShlKSxlLmFwcGVuZCh0KSxlfTskdC5hZGRDbGFzc05hbWVzVG9FbGVtZW50PWZ1bmN0aW9uKHQsLi4uZSl7ZS5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJihuPW4uc3BsaXQoIiAiKS5maWx0ZXIocj0+ciE9PSIiKSx0LmNsYXNzTGlzdC5hZGQoLi4ubikpfSl9OyR0LmlzTWltZVR5cGU9R0U7JHQubWVkaWFGaWxlUmVhZGVyPWZ1bmN0aW9uKHQsZSl7bGV0IG49dFtTeW1ib2wuaXRlcmF0b3JdKCk7cmV0dXJuIG5ldyBQcm9taXNlKChyLGkpPT57bGV0IG89W10sbD0oKT0+e2NvbnN0e2RvbmU6cyx2YWx1ZTphfT1uLm5leHQoKTtpZihzKXJldHVybiByKG8pO2NvbnN0IGM9bmV3IEZpbGVSZWFkZXI7Yy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsaSksYy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IHU9Yy5yZXN1bHQ7dHlwZW9mIHU9PSJzdHJpbmciJiZvLnB1c2goe2ZpbGU6YSxyZXN1bHQ6dX0pLGwoKX0pLEdFKGEsZSk/Yy5yZWFkQXNEYXRhVVJMKGEpOmwoKX07bCgpfSl9OyR0Lm1lcmdlUmVnaXN0ZXI9ZnVuY3Rpb24oLi4udCl7cmV0dXJuKCk9Pnt0LmZvckVhY2goZT0+ZSgpKX19OyR0Lm9iamVjdEtsYXNzRXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1udWxsP09iamVjdC5nZXRQcm90b3R5cGVPZih0KS5jb25zdHJ1Y3Rvci5uYW1lPT09ZS5uYW1lOiExfTskdC5yZWdpc3Rlck5lc3RlZEVsZW1lbnRSZXNvbHZlcj1mdW5jdGlvbih0LGUsbixyKXtyZXR1cm4gdC5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0oZSxpPT57ZTp7Zm9yKHZhciBvPWkuZ2V0Q2hpbGRyZW4oKSxsPTA7bDxvLmxlbmd0aDtsKyspaWYob1tsXWluc3RhbmNlb2YgZSl7bz1udWxsO2JyZWFrIGV9Zm9yKG89aTtvIT09bnVsbDspaWYobD1vLG89by5nZXRQYXJlbnQoKSxvIGluc3RhbmNlb2YgZSl7bz17Y2hpbGQ6bCxwYXJlbnQ6b307YnJlYWsgZX1vPW51bGx9aWYobyE9PW51bGwpe2NvbnN0e2NoaWxkOnMscGFyZW50OmF9PW87aWYocy5pcyhpKSl7aWYocihhLGkpLGk9cy5nZXROZXh0U2libGluZ3MoKSxvPWkubGVuZ3RoLGEuaW5zZXJ0QWZ0ZXIocyksbyE9PTApe2w9bihhKSxzLmluc2VydEFmdGVyKGwpO2ZvcihsZXQgYz0wO2M8bztjKyspbC5hcHBlbmQoaVtjXSl9YS5jYW5CZUVtcHR5KCl8fGEuZ2V0Q2hpbGRyZW5TaXplKCkhPT0wfHxhLnJlbW92ZSgpfX19KX07JHQucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50PWZ1bmN0aW9uKHQsLi4uZSl7ZS5mb3JFYWNoKG49Pnt0eXBlb2Ygbj09InN0cmluZyImJnQuY2xhc3NMaXN0LnJlbW92ZSguLi5uLnNwbGl0KCIgIikpfSl9O2NvbnN0IG5QPSR0O3ZhciBGdD1uUCx6ZT1fZSxmbz1GdDtmdW5jdGlvbiB2cyh0KXtsZXQgZT1uZXcgVVJMU2VhcmNoUGFyYW1zO2UuYXBwZW5kKCJjb2RlIix0KTtmb3IobGV0IG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKWUuYXBwZW5kKCJ2Iixhcmd1bWVudHNbbl0pO3Rocm93IEVycm9yKGBNaW5pZmllZCBMZXhpY2FsIGVycm9yICMke3R9OyB2aXNpdCBodHRwczovL2xleGljYWwuZGV2L2RvY3MvZXJyb3I/JHtlfSBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuYCl9ZnVuY3Rpb24gWEUodCl7bGV0IGU9MTtmb3IodD10LmdldFBhcmVudCgpO3QhPW51bGw7KXtpZihmdCh0KSl7aWYodD10LmdldFBhcmVudCgpLE5lKHQpKXtlKyssdD10LmdldFBhcmVudCgpO2NvbnRpbnVlfXZzKDQwKX1icmVha31yZXR1cm4gZX1mdW5jdGlvbiBNbSh0KXt0PXQuZ2V0UGFyZW50KCksTmUodCl8fHZzKDQwKTtsZXQgZT10O2Zvcig7ZSE9PW51bGw7KWU9ZS5nZXRQYXJlbnQoKSxOZShlKSYmKHQ9ZSk7cmV0dXJuIHR9ZnVuY3Rpb24gSkUodCl7bGV0IGU9W107dD10LmdldENoaWxkcmVuKCkuZmlsdGVyKGZ0KTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl7bGV0IHI9dFtuXSxpPXIuZ2V0Rmlyc3RDaGlsZCgpO05lKGkpP2U9ZS5jb25jYXQoSkUoaSkpOmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBNcih0KXtyZXR1cm4gZnQodCkmJk5lKHQuZ2V0Rmlyc3RDaGlsZCgpKX1mdW5jdGlvbiByUCh0KXtmb3IoO3QuZ2V0TmV4dFNpYmxpbmcoKT09bnVsbCYmdC5nZXRQcmV2aW91c1NpYmxpbmcoKT09bnVsbDspe2xldCBlPXQuZ2V0UGFyZW50KCk7aWYoZT09bnVsbHx8IWZ0KHQpJiYhTmUodCkpYnJlYWs7dD1lfXQucmVtb3ZlKCl9ZnVuY3Rpb24gX3godCl7cmV0dXJuIEJuKCkuYXBwZW5kKHQpfWZ1bmN0aW9uIFFFKHQsZSl7cmV0dXJuIGZ0KHQpJiYoZS5sZW5ndGg9PT0wfHxlLmxlbmd0aD09PTEmJnQuaXMoZVswXSkmJnQuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wKX1mdW5jdGlvbiBlbCh0LGUpe3Quc3BsaWNlKHQuZ2V0Q2hpbGRyZW5TaXplKCksMCxlKX1mdW5jdGlvbiB3eCh0LGUpe2lmKE5lKHQpKXJldHVybiB0O2xldCBuPXQuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj10LmdldE5leHRTaWJsaW5nKCksaT1CbigpO3JldHVybiBpLnNldEZvcm1hdCh0LmdldEZvcm1hdFR5cGUoKSksaS5zZXRJbmRlbnQodC5nZXRJbmRlbnQoKSksZWwoaSx0LmdldENoaWxkcmVuKCkpLE5lKG4pJiZlPT09bi5nZXRMaXN0VHlwZSgpPyhuLmFwcGVuZChpKSx0LnJlbW92ZSgpLE5lKHIpJiZlPT09ci5nZXRMaXN0VHlwZSgpJiYoZWwobixyLmdldENoaWxkcmVuKCkpLHIucmVtb3ZlKCkpLG4pOk5lKHIpJiZlPT09ci5nZXRMaXN0VHlwZSgpPyhyLmdldEZpcnN0Q2hpbGRPclRocm93KCkuaW5zZXJ0QmVmb3JlKGkpLHQucmVtb3ZlKCkscik6KGU9eW4oZSksZS5hcHBlbmQoaSksdC5yZXBsYWNlKGUpLGZuKGUpLGUpfWZ1bmN0aW9uIHFFKHQsZSl7dmFyIG49dC5nZXRMYXN0Q2hpbGQoKTtsZXQgcj1lLmdldEZpcnN0Q2hpbGQoKTtuJiZyJiZNcihuKSYmTXIocikmJihxRShuLmdldEZpcnN0Q2hpbGQoKSxyLmdldEZpcnN0Q2hpbGQoKSksci5yZW1vdmUoKSksbj1lLmdldENoaWxkcmVuKCksMDxuLmxlbmd0aCYmKHQuYXBwZW5kKC4uLm4pLGZuKHQpKSxlLnJlbW92ZSgpfWZ1bmN0aW9uIGZuKHQsZSl7aWYodD1lfHx0LmdldENoaWxkcmVuKCksdCE9PXZvaWQgMClmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgbz10W2VdO2lmKGZ0KG8pKXtsZXQgbD1vLmdldFZhbHVlKCk7dmFyIG49byxyPW4uZ2V0UGFyZW50KCksaT0xO2ZvcihyIT1udWxsJiYoTmUocik/aT1yLmdldFN0YXJ0KCk6dnMoNDQpKSxuPW4uZ2V0UHJldmlvdXNTaWJsaW5ncygpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7bGV0IHM9bltyXTtmdChzKSYmIU5lKHMuZ2V0Rmlyc3RDaGlsZCgpKSYmaSsrfWwhPT1pJiZvLnNldFZhbHVlKGkpfX19ZnVuY3Rpb24gaVAodCl7aWYoIU1yKHQpKXt2YXIgZT10LmdldFBhcmVudCgpLG49ZT9lLmdldFBhcmVudCgpOnZvaWQgMCxyPW4/bi5nZXRQYXJlbnQoKTp2b2lkIDA7aWYoTmUocikmJmZ0KG4pJiZOZShlKSl7dmFyIGk9ZT9lLmdldEZpcnN0Q2hpbGQoKTp2b2lkIDAsbz1lP2UuZ2V0TGFzdENoaWxkKCk6dm9pZCAwO2lmKHQuaXMoaSkpbi5pbnNlcnRCZWZvcmUodCksZS5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZSBpZih0LmlzKG8pKW4uaW5zZXJ0QWZ0ZXIodCksZS5pc0VtcHR5KCkmJm4ucmVtb3ZlKCk7ZWxzZXt2YXIgbD1lLmdldExpc3RUeXBlKCk7aT1CbigpO2xldCBzPXluKGwpO2kuYXBwZW5kKHMpLHQuZ2V0UHJldmlvdXNTaWJsaW5ncygpLmZvckVhY2goYT0+cy5hcHBlbmQoYSkpLG89Qm4oKSxsPXluKGwpLG8uYXBwZW5kKGwpLGVsKGwsdC5nZXROZXh0U2libGluZ3MoKSksbi5pbnNlcnRCZWZvcmUoaSksbi5pbnNlcnRBZnRlcihvKSxuLnJlcGxhY2UodCl9Zm4oZSksZm4ocil9fX1sZXQgVWY9Y2xhc3MgZUMgZXh0ZW5kcyB6ZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0aXRlbSJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgZUMoZS5fX3ZhbHVlLGUuX19jaGVja2VkLGUuX19rZXkpfWNvbnN0cnVjdG9yKGUsbixyKXtzdXBlcihyKSx0aGlzLl9fdmFsdWU9ZT09PXZvaWQgMD8xOmUsdGhpcy5fX2NoZWNrZWQ9bn1jcmVhdGVET00oZSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKSxyPXRoaXMuZ2V0UGFyZW50KCk7cmV0dXJuIE5lKHIpJiZyLmdldExpc3RUeXBlKCk9PT0iY2hlY2siJiZFeChuLHRoaXMsbnVsbCksbi52YWx1ZT10aGlzLl9fdmFsdWUsU3gobixlLnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKGUsbixyKXtsZXQgaT10aGlzLmdldFBhcmVudCgpO3JldHVybiBOZShpKSYmaS5nZXRMaXN0VHlwZSgpPT09ImNoZWNrIiYmRXgobix0aGlzLGUpLG4udmFsdWU9dGhpcy5fX3ZhbHVlLFN4KG4sci50aGVtZSx0aGlzKSwhMX1zdGF0aWMgdHJhbnNmb3JtKCl7cmV0dXJuIGU9PntsZXQgbj1lLmdldFBhcmVudCgpO05lKG4pJiYoZm4obiksbi5nZXRMaXN0VHlwZSgpIT09ImNoZWNrIiYmZS5nZXRDaGVja2VkKCkhPW51bGwmJmUuc2V0Q2hlY2tlZCh2b2lkIDApKX19c3RhdGljIGltcG9ydERPTSgpe3JldHVybntsaTooKT0+KHtjb252ZXJzaW9uOm9QLHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49Qm4oKTtyZXR1cm4gbi5zZXRDaGVja2VkKGUuY2hlY2tlZCksbi5zZXRWYWx1ZShlLnZhbHVlKSxuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksY2hlY2tlZDp0aGlzLmdldENoZWNrZWQoKSx0eXBlOiJsaXN0aXRlbSIsdmFsdWU6dGhpcy5nZXRWYWx1ZSgpLHZlcnNpb246MX19YXBwZW5kKC4uLmUpe2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtsZXQgcj1lW25dO2lmKHplLiRpc0VsZW1lbnROb2RlKHIpJiZ0aGlzLmNhbk1lcmdlV2l0aChyKSl7bGV0IGk9ci5nZXRDaGlsZHJlbigpO3RoaXMuYXBwZW5kKC4uLmkpLHIucmVtb3ZlKCl9ZWxzZSBzdXBlci5hcHBlbmQocil9cmV0dXJuIHRoaXN9cmVwbGFjZShlLG4pe2lmKGZ0KGUpKXJldHVybiBzdXBlci5yZXBsYWNlKGUpO3RoaXMuc2V0SW5kZW50KDApO2xldCByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpO2lmKCFOZShyKSlyZXR1cm4gZTtpZihyLl9fZmlyc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QmVmb3JlKGUpO2Vsc2UgaWYoci5fX2xhc3Q9PT10aGlzLmdldEtleSgpKXIuaW5zZXJ0QWZ0ZXIoZSk7ZWxzZXtsZXQgaT15bihyLmdldExpc3RUeXBlKCkpLG89dGhpcy5nZXROZXh0U2libGluZygpO2Zvcig7bzspe2xldCBsPW87bz1vLmdldE5leHRTaWJsaW5nKCksaS5hcHBlbmQobCl9ci5pbnNlcnRBZnRlcihlKSxlLmluc2VydEFmdGVyKGkpfXJldHVybiBuJiZ0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaChpPT57ZS5hcHBlbmQoaSl9KSx0aGlzLnJlbW92ZSgpLHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0wJiZyLnJlbW92ZSgpLGV9aW5zZXJ0QWZ0ZXIoZSxuPSEwKXt2YXIgcj10aGlzLmdldFBhcmVudE9yVGhyb3coKTtOZShyKXx8dnMoMzkpO3ZhciBpPXRoaXMuZ2V0TmV4dFNpYmxpbmdzKCk7aWYoZnQoZSkpcmV0dXJuIG49c3VwZXIuaW5zZXJ0QWZ0ZXIoZSxuKSxlPWUuZ2V0UGFyZW50T3JUaHJvdygpLE5lKGUpJiZmbihlKSxuO2lmKE5lKGUpKXtmb3Iocj1lLGU9ZS5nZXRDaGlsZHJlbigpLGk9ZS5sZW5ndGgtMTswPD1pO2ktLSlyPWVbaV0sdGhpcy5pbnNlcnRBZnRlcihyLG4pO3JldHVybiByfWlmKHIuaW5zZXJ0QWZ0ZXIoZSxuKSxpLmxlbmd0aCE9PTApe2xldCBvPXluKHIuZ2V0TGlzdFR5cGUoKSk7aS5mb3JFYWNoKGw9Pm8uYXBwZW5kKGwpKSxlLmluc2VydEFmdGVyKG8sbil9cmV0dXJuIGV9cmVtb3ZlKGUpe2xldCBuPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCkscj10aGlzLmdldE5leHRTaWJsaW5nKCk7c3VwZXIucmVtb3ZlKGUpLG4mJnImJk1yKG4pJiZNcihyKT8ocUUobi5nZXRGaXJzdENoaWxkKCksci5nZXRGaXJzdENoaWxkKCkpLHIucmVtb3ZlKCkpOnImJihlPXIuZ2V0UGFyZW50KCksTmUoZSkmJmZuKGUpKX1pbnNlcnROZXdBZnRlcihlLG49ITApe3JldHVybiBlPUJuKHRoaXMuX19jaGVja2VkPT1udWxsP3ZvaWQgMDohMSksdGhpcy5pbnNlcnRBZnRlcihlLG4pLGV9Y29sbGFwc2VBdFN0YXJ0KGUpe2xldCBuPXplLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7dGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2gobD0+bi5hcHBlbmQobCkpO3ZhciByPXRoaXMuZ2V0UGFyZW50T3JUaHJvdygpLGk9ci5nZXRQYXJlbnRPclRocm93KCk7bGV0IG89ZnQoaSk7cmV0dXJuIHIuZ2V0Q2hpbGRyZW5TaXplKCk9PT0xP28/KHIucmVtb3ZlKCksaS5zZWxlY3QoKSk6KHIuaW5zZXJ0QmVmb3JlKG4pLHIucmVtb3ZlKCkscj1lLmFuY2hvcixlPWUuZm9jdXMsaT1uLmdldEtleSgpLHIudHlwZT09PSJlbGVtZW50IiYmci5nZXROb2RlKCkuaXModGhpcykmJnIuc2V0KGksci5vZmZzZXQsImVsZW1lbnQiKSxlLnR5cGU9PT0iZWxlbWVudCImJmUuZ2V0Tm9kZSgpLmlzKHRoaXMpJiZlLnNldChpLGUub2Zmc2V0LCJlbGVtZW50IikpOihyLmluc2VydEJlZm9yZShuKSx0aGlzLnJlbW92ZSgpKSwhMH1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdmFsdWV9c2V0VmFsdWUoZSl7dGhpcy5nZXRXcml0YWJsZSgpLl9fdmFsdWU9ZX1nZXRDaGVja2VkKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX19jaGVja2VkfXNldENoZWNrZWQoZSl7dGhpcy5nZXRXcml0YWJsZSgpLl9fY2hlY2tlZD1lfXRvZ2dsZUNoZWNrZWQoKXt0aGlzLnNldENoZWNrZWQoIXRoaXMuX19jaGVja2VkKX1nZXRJbmRlbnQoKXt2YXIgZT10aGlzLmdldFBhcmVudCgpO2lmKGU9PT1udWxsKXJldHVybiB0aGlzLmdldExhdGVzdCgpLl9faW5kZW50O2U9ZS5nZXRQYXJlbnRPclRocm93KCk7bGV0IG49MDtmb3IoO2Z0KGUpOyllPWUuZ2V0UGFyZW50T3JUaHJvdygpLmdldFBhcmVudE9yVGhyb3coKSxuKys7cmV0dXJuIG59c2V0SW5kZW50KGUpe3R5cGVvZiBlPT0ibnVtYmVyIiYmLTE8ZXx8dnMoMTE3KTtsZXQgbj10aGlzLmdldEluZGVudCgpO2Zvcig7biE9PWU7KWlmKG48ZSl7ZTp7dmFyIHI9bmV3IFNldDtpZihNcih0aGlzKXx8ci5oYXModGhpcy5nZXRLZXkoKSkpYnJlYWsgZTtsZXQgcz10aGlzLmdldFBhcmVudCgpO3ZhciBpPXRoaXMuZ2V0TmV4dFNpYmxpbmcoKSxvPXRoaXMuZ2V0UHJldmlvdXNTaWJsaW5nKCk7aWYoTXIoaSkmJk1yKG8pKXtpZihvPW8uZ2V0Rmlyc3RDaGlsZCgpLE5lKG8pKXtvLmFwcGVuZCh0aGlzKTt2YXIgbD1pLmdldEZpcnN0Q2hpbGQoKTtOZShsKSYmKGw9bC5nZXRDaGlsZHJlbigpLGVsKG8sbCksaS5yZW1vdmUoKSxyLmFkZChpLmdldEtleSgpKSksZm4obyl9fWVsc2UgTXIoaSk/KGk9aS5nZXRGaXJzdENoaWxkKCksTmUoaSkmJihyPWkuZ2V0Rmlyc3RDaGlsZCgpLHIhPT1udWxsJiZyLmluc2VydEJlZm9yZSh0aGlzKSxmbihpKSkpOk1yKG8pPyhpPW8uZ2V0Rmlyc3RDaGlsZCgpLE5lKGkpJiYoaS5hcHBlbmQodGhpcyksZm4oaSkpKTpOZShzKSYmKHI9Qm4oKSxsPXluKHMuZ2V0TGlzdFR5cGUoKSksci5hcHBlbmQobCksbC5hcHBlbmQodGhpcyksbz9vLmluc2VydEFmdGVyKHIpOmk/aS5pbnNlcnRCZWZvcmUocik6cy5hcHBlbmQociksZm4obCkpO05lKHMpJiZmbihzKX1uKyt9ZWxzZSBpUCh0aGlzKSxuLS07cmV0dXJuIHRoaXN9aW5zZXJ0QmVmb3JlKGUpe2lmKGZ0KGUpKXtsZXQgbj10aGlzLmdldFBhcmVudE9yVGhyb3coKTtpZihOZShuKSl7bGV0IHI9dGhpcy5nZXROZXh0U2libGluZ3MoKTtmbihuLHIpfX1yZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKGUpfWNhbkluc2VydEFmdGVyKGUpe3JldHVybiBmdChlKX1jYW5SZXBsYWNlV2l0aChlKXtyZXR1cm4gZnQoZSl9Y2FuTWVyZ2VXaXRoKGUpe3JldHVybiB6ZS4kaXNQYXJhZ3JhcGhOb2RlKGUpfHxmdChlKX1leHRyYWN0V2l0aENoaWxkKGUsbil7aWYoIXplLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXJldHVybiExO2U9bi5hbmNob3IuZ2V0Tm9kZSgpO2xldCByPW4uZm9jdXMuZ2V0Tm9kZSgpO3JldHVybiB0aGlzLmlzUGFyZW50T2YoZSkmJnRoaXMuaXNQYXJlbnRPZihyKSYmdGhpcy5nZXRUZXh0Q29udGVudCgpLmxlbmd0aD09PW4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9aXNQYXJlbnRSZXF1aXJlZCgpe3JldHVybiEwfWNyZWF0ZVBhcmVudEVsZW1lbnROb2RlKCl7cmV0dXJuIHluKCJidWxsZXQiKX19O2Z1bmN0aW9uIFN4KHQsZSxuKXtsZXQgcj1bXSxpPVtdO3ZhciBvPShlPWUubGlzdCk/ZS5saXN0aXRlbTp2b2lkIDA7aWYoZSYmZS5uZXN0ZWQpdmFyIGw9ZS5uZXN0ZWQubGlzdGl0ZW07aWYobyE9PXZvaWQgMCYmKG89by5zcGxpdCgiICIpLHIucHVzaCguLi5vKSksZSl7bz1uLmdldFBhcmVudCgpLG89TmUobykmJm8uZ2V0TGlzdFR5cGUoKT09PSJjaGVjayI7bGV0IHM9bi5nZXRDaGVja2VkKCk7byYmIXN8fGkucHVzaChlLmxpc3RpdGVtVW5jaGVja2VkKSxvJiZzfHxpLnB1c2goZS5saXN0aXRlbUNoZWNrZWQpLG8mJnIucHVzaChzP2UubGlzdGl0ZW1DaGVja2VkOmUubGlzdGl0ZW1VbmNoZWNrZWQpfWwhPT12b2lkIDAmJihsPWwuc3BsaXQoIiAiKSxuLmdldENoaWxkcmVuKCkuc29tZShzPT5OZShzKSk/ci5wdXNoKC4uLmwpOmkucHVzaCguLi5sKSksMDxpLmxlbmd0aCYmZm8ucmVtb3ZlQ2xhc3NOYW1lc0Zyb21FbGVtZW50KHQsLi4uaSksMDxyLmxlbmd0aCYmZm8uYWRkQ2xhc3NOYW1lc1RvRWxlbWVudCh0LC4uLnIpfWZ1bmN0aW9uIEV4KHQsZSxuKXtOZShlLmdldEZpcnN0Q2hpbGQoKSk/KHQucmVtb3ZlQXR0cmlidXRlKCJyb2xlIiksdC5yZW1vdmVBdHRyaWJ1dGUoInRhYkluZGV4IiksdC5yZW1vdmVBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIpKToodC5zZXRBdHRyaWJ1dGUoInJvbGUiLCJjaGVja2JveCIpLHQuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIiksbiYmZS5fX2NoZWNrZWQ9PT1uLl9fY2hlY2tlZHx8dC5zZXRBdHRyaWJ1dGUoImFyaWEtY2hlY2tlZCIsZS5nZXRDaGVja2VkKCk/InRydWUiOiJmYWxzZSIpKX1mdW5jdGlvbiBvUCh0KXtyZXR1cm4gdD1mby5pc0hUTUxFbGVtZW50KHQpJiZ0LmdldEF0dHJpYnV0ZSgiYXJpYS1jaGVja2VkIik9PT0idHJ1ZSIse25vZGU6Qm4odCl9fWZ1bmN0aW9uIEJuKHQpe3JldHVybiB6ZS4kYXBwbHlOb2RlUmVwbGFjZW1lbnQobmV3IFVmKHZvaWQgMCx0KSl9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVZn1sZXQgQXY9Y2xhc3MgdEMgZXh0ZW5kcyB6ZS5FbGVtZW50Tm9kZXtzdGF0aWMgZ2V0VHlwZSgpe3JldHVybiJsaXN0In1zdGF0aWMgY2xvbmUoZSl7cmV0dXJuIG5ldyB0QyhlLl9fbGlzdFR5cGV8fGt4W2UuX190YWddLGUuX19zdGFydCxlLl9fa2V5KX1jb25zdHJ1Y3RvcihlLG4scil7c3VwZXIociksdGhpcy5fX2xpc3RUeXBlPWU9a3hbZV18fGUsdGhpcy5fX3RhZz1lPT09Im51bWJlciI/Im9sIjoidWwiLHRoaXMuX19zdGFydD1ufWdldFRhZygpe3JldHVybiB0aGlzLl9fdGFnfXNldExpc3RUeXBlKGUpe2xldCBuPXRoaXMuZ2V0V3JpdGFibGUoKTtuLl9fbGlzdFR5cGU9ZSxuLl9fdGFnPWU9PT0ibnVtYmVyIj8ib2wiOiJ1bCJ9Z2V0TGlzdFR5cGUoKXtyZXR1cm4gdGhpcy5fX2xpc3RUeXBlfWdldFN0YXJ0KCl7cmV0dXJuIHRoaXMuX19zdGFydH1jcmVhdGVET00oZSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLl9fdGFnKTtyZXR1cm4gdGhpcy5fX3N0YXJ0IT09MSYmbi5zZXRBdHRyaWJ1dGUoInN0YXJ0IixTdHJpbmcodGhpcy5fX3N0YXJ0KSksbi5fX2xleGljYWxMaXN0VHlwZT10aGlzLl9fbGlzdFR5cGUsQ3gobixlLnRoZW1lLHRoaXMpLG59dXBkYXRlRE9NKGUsbixyKXtyZXR1cm4gZS5fX3RhZyE9PXRoaXMuX190YWc/ITA6KEN4KG4sci50aGVtZSx0aGlzKSwhMSl9c3RhdGljIGltcG9ydERPTSgpe3JldHVybntvbDooKT0+KHtjb252ZXJzaW9uOmJ4LHByaW9yaXR5OjB9KSx1bDooKT0+KHtjb252ZXJzaW9uOmJ4LHByaW9yaXR5OjB9KX19c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49eW4oZS5saXN0VHlwZSxlLnN0YXJ0KTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1leHBvcnRET00oZSl7cmV0dXJue2VsZW1lbnQ6ZX09c3VwZXIuZXhwb3J0RE9NKGUpLGUmJmZvLmlzSFRNTEVsZW1lbnQoZSkmJih0aGlzLl9fc3RhcnQhPT0xJiZlLnNldEF0dHJpYnV0ZSgic3RhcnQiLFN0cmluZyh0aGlzLl9fc3RhcnQpKSx0aGlzLl9fbGlzdFR5cGU9PT0iY2hlY2siJiZlLnNldEF0dHJpYnV0ZSgiX19sZXhpY2FsTGlzdFR5cGUiLCJjaGVjayIpKSx7ZWxlbWVudDplfX1leHBvcnRKU09OKCl7cmV0dXJuey4uLnN1cGVyLmV4cG9ydEpTT04oKSxsaXN0VHlwZTp0aGlzLmdldExpc3RUeXBlKCksc3RhcnQ6dGhpcy5nZXRTdGFydCgpLHRhZzp0aGlzLmdldFRhZygpLHR5cGU6Imxpc3QiLHZlcnNpb246MX19Y2FuQmVFbXB0eSgpe3JldHVybiExfWNhbkluZGVudCgpe3JldHVybiExfWFwcGVuZCguLi5lKXtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtpZihmdChuKSlzdXBlci5hcHBlbmQobik7ZWxzZXtsZXQgaT1CbigpO05lKG4pfHx6ZS4kaXNFbGVtZW50Tm9kZShuKSYmKG49emUuJGNyZWF0ZVRleHROb2RlKG4uZ2V0VGV4dENvbnRlbnQoKSkpLGkuYXBwZW5kKG4pLHN1cGVyLmFwcGVuZChpKX19cmV0dXJuIGZuKHRoaXMpLHRoaXN9ZXh0cmFjdFdpdGhDaGlsZChlKXtyZXR1cm4gZnQoZSl9fTtmdW5jdGlvbiBDeCh0LGUsbil7bGV0IHI9W10saT1bXTt2YXIgbz1lLmxpc3Q7aWYobyE9PXZvaWQgMCl7bGV0IHM9b1tgJHtuLl9fdGFnfURlcHRoYF18fFtdO2U9WEUobiktMTtsZXQgYT1lJXMubGVuZ3RoO3ZhciBsPXNbYV07bGV0IGM9b1tuLl9fdGFnXSx1O2lmKG89by5uZXN0ZWQsbyE9PXZvaWQgMCYmby5saXN0JiYodT1vLmxpc3QpLGMhPT12b2lkIDAmJnIucHVzaChjKSxsIT09dm9pZCAwKWZvcihsPWwuc3BsaXQoIiAiKSxyLnB1c2goLi4ubCksbD0wO2w8cy5sZW5ndGg7bCsrKWwhPT1hJiZpLnB1c2gobi5fX3RhZytsKTt1IT09dm9pZCAwJiYobj11LnNwbGl0KCIgIiksMTxlP3IucHVzaCguLi5uKTppLnB1c2goLi4ubikpfTA8aS5sZW5ndGgmJmZvLnJlbW92ZUNsYXNzTmFtZXNGcm9tRWxlbWVudCh0LC4uLmkpLDA8ci5sZW5ndGgmJmZvLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQodCwuLi5yKX1mdW5jdGlvbiBsUCh0KXtsZXQgZT1bXTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtmdChuKT8oZS5wdXNoKG4pLG49bi5nZXRDaGlsZHJlbigpLDE8bi5sZW5ndGgmJm4uZm9yRWFjaChpPT57TmUoaSkmJmUucHVzaChfeChpKSl9KSk6ZS5wdXNoKF94KG4pKX1yZXR1cm4gZX1mdW5jdGlvbiBieCh0KXtsZXQgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1udWxsO3JldHVybiBlPT09Im9sIj9uPXluKCJudW1iZXIiLHQuc3RhcnQpOmU9PT0idWwiJiYobj1mby5pc0hUTUxFbGVtZW50KHQpJiZ0LmdldEF0dHJpYnV0ZSgiX19sZXhpY2FsbGlzdHR5cGUiKT09PSJjaGVjayI/eW4oImNoZWNrIik6eW4oImJ1bGxldCIpKSx7YWZ0ZXI6bFAsbm9kZTpufX1sZXQga3g9e29sOiJudW1iZXIiLHVsOiJidWxsZXQifTtmdW5jdGlvbiB5bih0LGU9MSl7cmV0dXJuIHplLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgQXYodCxlKSl9ZnVuY3Rpb24gTmUodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBBdn1sZXQgc1A9emUuY3JlYXRlQ29tbWFuZCgiSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQiKSxhUD16ZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQiKSxjUD16ZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfQ0hFQ0tfTElTVF9DT01NQU5EIiksdVA9emUuY3JlYXRlQ29tbWFuZCgiUkVNT1ZFX0xJU1RfQ09NTUFORCIpO0VuLiRjcmVhdGVMaXN0SXRlbU5vZGU9Qm47RW4uJGNyZWF0ZUxpc3ROb2RlPXluO0VuLiRnZXRMaXN0RGVwdGg9WEU7RW4uJGhhbmRsZUxpc3RJbnNlcnRQYXJhZ3JhcGg9ZnVuY3Rpb24oKXt2YXIgdD16ZS4kZ2V0U2VsZWN0aW9uKCk7aWYoIXplLiRpc1JhbmdlU2VsZWN0aW9uKHQpfHwhdC5pc0NvbGxhcHNlZCgpfHwodD10LmFuY2hvci5nZXROb2RlKCksIWZ0KHQpfHx0LmdldENoaWxkcmVuU2l6ZSgpIT09MCkpcmV0dXJuITE7dmFyIGU9TW0odCksbj10LmdldFBhcmVudCgpO05lKG4pfHx2cyg0MCk7bGV0IHI9bi5nZXRQYXJlbnQoKSxpO2lmKHplLiRpc1Jvb3RPclNoYWRvd1Jvb3QocikpaT16ZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLGUuaW5zZXJ0QWZ0ZXIoaSk7ZWxzZSBpZihmdChyKSlpPUJuKCksci5pbnNlcnRBZnRlcihpKTtlbHNlIHJldHVybiExO2lmKGkuc2VsZWN0KCksZT10LmdldE5leHRTaWJsaW5ncygpLDA8ZS5sZW5ndGgpe2xldCBvPXluKG4uZ2V0TGlzdFR5cGUoKSk7emUuJGlzUGFyYWdyYXBoTm9kZShpKT9pLmluc2VydEFmdGVyKG8pOihuPUJuKCksbi5hcHBlbmQobyksaS5pbnNlcnRBZnRlcihuKSksZS5mb3JFYWNoKGw9PntsLnJlbW92ZSgpLG8uYXBwZW5kKGwpfSl9cmV0dXJuIHJQKHQpLCEwfTtFbi4kaXNMaXN0SXRlbU5vZGU9ZnQ7RW4uJGlzTGlzdE5vZGU9TmU7RW4uSU5TRVJUX0NIRUNLX0xJU1RfQ09NTUFORD1jUDtFbi5JTlNFUlRfT1JERVJFRF9MSVNUX0NPTU1BTkQ9YVA7RW4uSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQ9c1A7RW4uTGlzdEl0ZW1Ob2RlPVVmO0VuLkxpc3ROb2RlPUF2O0VuLlJFTU9WRV9MSVNUX0NPTU1BTkQ9dVA7RW4uaW5zZXJ0TGlzdD1mdW5jdGlvbih0LGUpe3QudXBkYXRlKCgpPT57dmFyIG49emUuJGdldFNlbGVjdGlvbigpO2lmKHplLiRpc1JhbmdlU2VsZWN0aW9uKG4pfHx6ZS5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24obikpe3ZhciByPW4uZ2V0Tm9kZXMoKTtuPW4uYW5jaG9yLmdldE5vZGUoKTt2YXIgaT1uLmdldFBhcmVudCgpO2lmKFFFKG4scikpcj15bihlKSx6ZS4kaXNSb290T3JTaGFkb3dSb290KGkpPyhuLnJlcGxhY2UociksaT1CbigpLHplLiRpc0VsZW1lbnROb2RlKG4pJiYoaS5zZXRGb3JtYXQobi5nZXRGb3JtYXRUeXBlKCkpLGkuc2V0SW5kZW50KG4uZ2V0SW5kZW50KCkpKSxyLmFwcGVuZChpKSk6ZnQobikmJihuPW4uZ2V0UGFyZW50T3JUaHJvdygpLGVsKHIsbi5nZXRDaGlsZHJlbigpKSxuLnJlcGxhY2UocikpO2Vsc2UgZm9yKG49bmV3IFNldCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07aWYoemUuJGlzRWxlbWVudE5vZGUobykmJm8uaXNFbXB0eSgpJiYhbi5oYXMoby5nZXRLZXkoKSkpd3gobyxlKTtlbHNlIGlmKHplLiRpc0xlYWZOb2RlKG8pKWZvcihvPW8uZ2V0UGFyZW50KCk7byE9bnVsbDspe2xldCBzPW8uZ2V0S2V5KCk7aWYoTmUobykpe2lmKCFuLmhhcyhzKSl7dmFyIGw9eW4oZSk7ZWwobCxvLmdldENoaWxkcmVuKCkpLG8ucmVwbGFjZShsKSxmbihsKSxuLmFkZChzKX1icmVha31lbHNle2lmKGw9by5nZXRQYXJlbnQoKSx6ZS4kaXNSb290T3JTaGFkb3dSb290KGwpJiYhbi5oYXMocykpe24uYWRkKHMpLHd4KG8sZSk7YnJlYWt9bz1sfX19fX0pfTtFbi5yZW1vdmVMaXN0PWZ1bmN0aW9uKHQpe3QudXBkYXRlKCgpPT57bGV0IGU9emUuJGdldFNlbGVjdGlvbigpO2lmKHplLiRpc1JhbmdlU2VsZWN0aW9uKGUpKXt2YXIgbj1uZXcgU2V0LHI9ZS5nZXROb2RlcygpLGk9ZS5hbmNob3IuZ2V0Tm9kZSgpO2lmKFFFKGkscikpbi5hZGQoTW0oaSkpO2Vsc2UgZm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXTt6ZS4kaXNMZWFmTm9kZShvKSYmKG89Zm8uJGdldE5lYXJlc3ROb2RlT2ZUeXBlKG8sVWYpLG8hPW51bGwmJm4uYWRkKE1tKG8pKSl9Zm9yKGxldCBsIG9mIG4pe249bCxyPUpFKGwpO2ZvcihsZXQgcyBvZiByKXI9emUuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSxlbChyLHMuZ2V0Q2hpbGRyZW4oKSksbi5pbnNlcnRBZnRlcihyKSxuPXIscy5fX2tleT09PWUuYW5jaG9yLmtleSYmZS5hbmNob3Iuc2V0KHIuZ2V0S2V5KCksMCwiZWxlbWVudCIpLHMuX19rZXk9PT1lLmZvY3VzLmtleSYmZS5mb2N1cy5zZXQoci5nZXRLZXkoKSwwLCJlbGVtZW50Iikscy5yZW1vdmUoKTtsLnJlbW92ZSgpfX19KX07Y29uc3QgZFA9RW47dmFyIFVpPWRQLG5DPXt9LFdmPXt9LHJDPWg7ZnVuY3Rpb24gZlAodCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztlLmFwcGVuZCgiY29kZSIsdCk7Zm9yKGxldCBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyllLmFwcGVuZCgidiIsYXJndW1lbnRzW25dKTt0aHJvdyBFcnJvcihgTWluaWZpZWQgTGV4aWNhbCBlcnJvciAjJHt0fTsgdmlzaXQgaHR0cHM6Ly9sZXhpY2FsLmRldi9kb2NzL2Vycm9yPyR7ZX0gZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLmApfWxldCBpQz1yQy5jcmVhdGVDb250ZXh0KG51bGwpO1dmLkxleGljYWxDb21wb3NlckNvbnRleHQ9aUM7V2YuY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbih0LGUpe2xldCBuPW51bGw7cmV0dXJuIHQhPW51bGwmJihuPXRbMV0pLHtnZXRUaGVtZTpmdW5jdGlvbigpe3JldHVybiBlPz8obiE9bnVsbD9uLmdldFRoZW1lKCk6bnVsbCl9fX07V2YudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dD1mdW5jdGlvbigpe2xldCB0PXJDLnVzZUNvbnRleHQoaUMpO3JldHVybiB0PT1udWxsJiZmUCg4KSx0fTtjb25zdCBwUD1XZjt2YXIgTnI9cFAsJHg9TnIsZ2E9X2UsQmQ9aDtsZXQgb0M9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO3ZhciBoUD1vQz9CZC51c2VMYXlvdXRFZmZlY3Q6QmQudXNlRWZmZWN0O2xldCB4dT17dGFnOiJoaXN0b3J5LW1lcmdlIn07ZnVuY3Rpb24gbVAodCxlKXtpZihlIT09bnVsbCl7aWYoZT09PXZvaWQgMCl0LnVwZGF0ZSgoKT0+e3ZhciBuPWdhLiRnZXRSb290KCk7aWYobi5pc0VtcHR5KCkpe2xldCByPWdhLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7bi5hcHBlbmQociksbj1vQz9kb2N1bWVudC5hY3RpdmVFbGVtZW50Om51bGwsKGdhLiRnZXRTZWxlY3Rpb24oKSE9PW51bGx8fG4hPT1udWxsJiZuPT09dC5nZXRSb290RWxlbWVudCgpKSYmci5zZWxlY3QoKX19LHh1KTtlbHNlIGlmKGUhPT1udWxsKXN3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOmxldCBuPXQucGFyc2VFZGl0b3JTdGF0ZShlKTt0LnNldEVkaXRvclN0YXRlKG4seHUpO2JyZWFrO2Nhc2Uib2JqZWN0Ijp0LnNldEVkaXRvclN0YXRlKGUseHUpO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOnQudXBkYXRlKCgpPT57Z2EuJGdldFJvb3QoKS5pc0VtcHR5KCkmJmUodCl9LHh1KX19fW5DLkxleGljYWxDb21wb3Nlcj1mdW5jdGlvbih7aW5pdGlhbENvbmZpZzp0LGNoaWxkcmVuOmV9KXtsZXQgbj1CZC51c2VNZW1vKCgpPT57Y29uc3R7dGhlbWU6cixuYW1lc3BhY2U6aSxlZGl0b3JfX0RFUFJFQ0FURUQ6byxub2RlczpsLG9uRXJyb3I6cyxlZGl0b3JTdGF0ZTphfT10LGM9JHguY3JlYXRlTGV4aWNhbENvbXBvc2VyQ29udGV4dChudWxsLHIpO2xldCB1PW98fG51bGw7aWYodT09PW51bGwpe2NvbnN0IGQ9Z2EuY3JlYXRlRWRpdG9yKHtlZGl0YWJsZTp0LmVkaXRhYmxlLG5hbWVzcGFjZTppLG5vZGVzOmwsb25FcnJvcjpmPT5zKGYsZCksdGhlbWU6cn0pO21QKGQsYSksdT1kfXJldHVyblt1LGNdfSxbXSk7cmV0dXJuIGhQKCgpPT57bGV0IHI9dC5lZGl0YWJsZSxbaV09bjtpLnNldEVkaXRhYmxlKHIhPT12b2lkIDA/cjohMCl9LFtdKSxCZC5jcmVhdGVFbGVtZW50KCR4LkxleGljYWxDb21wb3NlckNvbnRleHQuUHJvdmlkZXIse3ZhbHVlOm59LGUpfTtjb25zdCBnUD1uQzt2YXIgdlA9Z1AsTGE9aDtmdW5jdGlvbiBMbSh0LGUpe3JldHVybiBMbT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbihuLHIpe3JldHVybiBuLl9fcHJvdG9fXz1yLG59LExtKHQsZSl9ZnVuY3Rpb24geVAodCxlKXt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKSx0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10LExtKHQsZSl9ZnVuY3Rpb24geFAodCxlKXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9W10pLGU9PT12b2lkIDAmJihlPVtdKSx0Lmxlbmd0aCE9PWUubGVuZ3RofHx0LnNvbWUoZnVuY3Rpb24obixyKXtyZXR1cm4hT2JqZWN0LmlzKG4sZVtyXSl9KX12YXIgVHg9e2Vycm9yOm51bGx9LF9QPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtmb3IodmFyIHIsaT1hcmd1bWVudHMubGVuZ3RoLG89QXJyYXkoaSksbD0wO2w8aTtsKyspb1tsXT1hcmd1bWVudHNbbF07cmV0dXJuIHI9dC5jYWxsLmFwcGx5KHQsW3RoaXNdLmNvbmNhdChvKSl8fHRoaXMsci5zdGF0ZT1UeCxyLnJlc2V0RXJyb3JCb3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgcyxhPWFyZ3VtZW50cy5sZW5ndGgsYz1BcnJheShhKSx1PTA7dTxhO3UrKyljW3VdPWFyZ3VtZW50c1t1XTtyLnByb3BzLm9uUmVzZXQ9PW51bGx8fChzPXIucHJvcHMpLm9uUmVzZXQuYXBwbHkocyxjKSxyLnJlc2V0KCl9LHJ9eVAoZSx0KSxlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcj1mdW5jdGlvbihyKXtyZXR1cm57ZXJyb3I6cn19O3ZhciBuPWUucHJvdG90eXBlO3JldHVybiBuLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5zZXRTdGF0ZShUeCl9LG4uY29tcG9uZW50RGlkQ2F0Y2g9ZnVuY3Rpb24ocixpKXt2YXIgbyxsOyhvPShsPXRoaXMucHJvcHMpLm9uRXJyb3IpPT1udWxsfHxvLmNhbGwobCxyLGkpfSxuLmNvbXBvbmVudERpZFVwZGF0ZT1mdW5jdGlvbihyLGkpe3ZhciBvPXRoaXMucHJvcHMucmVzZXRLZXlzO2lmKHRoaXMuc3RhdGUuZXJyb3IhPT1udWxsJiZpLmVycm9yIT09bnVsbCYmeFAoci5yZXNldEtleXMsbykpe3ZhciBsLHM7KGw9KHM9dGhpcy5wcm9wcykub25SZXNldEtleXNDaGFuZ2UpPT1udWxsfHxsLmNhbGwocyxyLnJlc2V0S2V5cyxvKSx0aGlzLnJlc2V0KCl9fSxuLnJlbmRlcj1mdW5jdGlvbigpe3ZhciByPXRoaXMuc3RhdGUuZXJyb3IsaT10aGlzLnByb3BzLG89aS5mYWxsYmFja1JlbmRlcixsPWkuRmFsbGJhY2tDb21wb25lbnQ7aWYoaT1pLmZhbGxiYWNrLHIhPT1udWxsKXtpZihyPXtlcnJvcjpyLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX0sTGEuaXNWYWxpZEVsZW1lbnQoaSkpcmV0dXJuIGk7aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpcmV0dXJuIG8ocik7aWYobClyZXR1cm4gTGEuY3JlYXRlRWxlbWVudChsLHIpO3Rocm93IEVycm9yKCJyZWFjdC1lcnJvci1ib3VuZGFyeSByZXF1aXJlcyBlaXRoZXIgYSBmYWxsYmFjaywgZmFsbGJhY2tSZW5kZXIsIG9yIEZhbGxiYWNrQ29tcG9uZW50IHByb3AiKX1yZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbn0sZX0oTGEuQ29tcG9uZW50KSx3UD1mdW5jdGlvbih7Y2hpbGRyZW46dCxvbkVycm9yOmV9KXtyZXR1cm4gTGEuY3JlYXRlRWxlbWVudChfUCx7ZmFsbGJhY2s6TGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7c3R5bGU6e2JvcmRlcjoiMXB4IHNvbGlkICNmMDAiLGNvbG9yOiIjZjAwIixwYWRkaW5nOiI4cHgifX0sIkFuIGVycm9yIHdhcyB0aHJvd24uIiksb25FcnJvcjplfSx0KX07Y29uc3QgU1A9d1A7dmFyIEVQPVNQO2NvbnN0IENQPU9jKEVQKTt2YXIgTXY9e30sTHY9e30sYlA9RnQsWWU9X2U7ZnVuY3Rpb24ga1AodCxlLG4scixpKXtpZih0PT09bnVsbHx8bi5zaXplPT09MCYmci5zaXplPT09MCYmIWkpcmV0dXJuIDA7dmFyIG89ZS5fc2VsZWN0aW9uLGw9dC5fc2VsZWN0aW9uO2lmKGkpcmV0dXJuIDE7aWYoIShZZS4kaXNSYW5nZVNlbGVjdGlvbihvKSYmWWUuJGlzUmFuZ2VTZWxlY3Rpb24obCkmJmwuaXNDb2xsYXBzZWQoKSYmby5pc0NvbGxhcHNlZCgpKSlyZXR1cm4gMDtpPWUuX25vZGVNYXA7bGV0IHM9W107Zm9yKGxldCBhIG9mIG4pbj1pLmdldChhKSxuIT09dm9pZCAwJiZzLnB1c2gobik7Zm9yKGxldFthLGNdb2YgciljJiYocj1pLmdldChhKSxyPT09dm9pZCAwfHxZZS4kaXNSb290Tm9kZShyKXx8cy5wdXNoKHIpKTtyZXR1cm4gcy5sZW5ndGg9PT0wPzA6MTxzLmxlbmd0aD8ocj1lLl9ub2RlTWFwLGU9ci5nZXQoby5hbmNob3Iua2V5KSxsPXIuZ2V0KGwuYW5jaG9yLmtleSksZSYmbCYmIXQuX25vZGVNYXAuaGFzKGUuX19rZXkpJiZZZS4kaXNUZXh0Tm9kZShlKSYmZS5fX3RleHQubGVuZ3RoPT09MSYmby5hbmNob3Iub2Zmc2V0PT09MT8yOjApOihlPXNbMF0sdD10Ll9ub2RlTWFwLmdldChlLl9fa2V5KSwhWWUuJGlzVGV4dE5vZGUodCl8fCFZZS4kaXNUZXh0Tm9kZShlKXx8dC5fX21vZGUhPT1lLl9fbW9kZXx8KHQ9dC5fX3RleHQsZT1lLl9fdGV4dCx0PT09ZSl8fChvPW8uYW5jaG9yLGw9bC5hbmNob3Isby5rZXkhPT1sLmtleXx8by50eXBlIT09InRleHQiKT8wOihvPW8ub2Zmc2V0LGw9bC5vZmZzZXQsdD1lLmxlbmd0aC10Lmxlbmd0aCx0PT09MSYmbD09PW8tMT8yOnQ9PT0tMSYmbD09PW8rMT8zOnQ9PT0tMSYmbD09PW8/NDowKSl9ZnVuY3Rpb24gJFAodCxlKXtsZXQgbj1EYXRlLm5vdygpLHI9MDtyZXR1cm4oaSxvLGwscyxhLGMpPT57bGV0IHU9RGF0ZS5ub3coKTtpZihjLmhhcygiaGlzdG9yaWMiKSlyZXR1cm4gcj0wLG49dSwyO2xldCBkPWtQKGksbyxzLGEsdC5pc0NvbXBvc2luZygpKSxmPSgoKT0+e3ZhciBwPWw9PT1udWxsfHxsLmVkaXRvcj09PXQsZz1jLmhhcygiaGlzdG9yeS1wdXNoIik7aWYoIWcmJnAmJmMuaGFzKCJoaXN0b3J5LW1lcmdlIikpcmV0dXJuIDA7aWYoaT09PW51bGwpcmV0dXJuIDE7dmFyIG09by5fc2VsZWN0aW9uO2lmKCEoMDxzLnNpemV8fDA8YS5zaXplKSlyZXR1cm4gbSE9PW51bGw/MDoyO2lmKGc9PT0hMSYmZCE9PTAmJmQ9PT1yJiZ1PG4rZSYmcClyZXR1cm4gMDtpZihzLnNpemU9PT0xKXt7Zz1BcnJheS5mcm9tKHMpWzBdLHA9aS5fbm9kZU1hcC5nZXQoZyksZz1vLl9ub2RlTWFwLmdldChnKSxtPWkuX3NlbGVjdGlvbjtsZXQgdz1vLl9zZWxlY3Rpb24sdj0hMTtZZS4kaXNSYW5nZVNlbGVjdGlvbihtKSYmWWUuJGlzUmFuZ2VTZWxlY3Rpb24odykmJih2PW0uYW5jaG9yLnR5cGU9PT0iZWxlbWVudCImJm0uZm9jdXMudHlwZT09PSJlbGVtZW50IiYmdy5hbmNob3IudHlwZT09PSJ0ZXh0IiYmdy5mb2N1cy50eXBlPT09InRleHQiKSxwPSF2JiZZZS4kaXNUZXh0Tm9kZShwKSYmWWUuJGlzVGV4dE5vZGUoZyk/cC5fX3R5cGU9PT1nLl9fdHlwZSYmcC5fX3RleHQ9PT1nLl9fdGV4dCYmcC5fX21vZGU9PT1nLl9fbW9kZSYmcC5fX2RldGFpbD09PWcuX19kZXRhaWwmJnAuX19zdHlsZT09PWcuX19zdHlsZSYmcC5fX2Zvcm1hdD09PWcuX19mb3JtYXQmJnAuX19wYXJlbnQ9PT1nLl9fcGFyZW50OiExfWlmKHApcmV0dXJuIDB9cmV0dXJuIDF9KSgpO3JldHVybiBuPXUscj1kLGZ9fUx2LmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlPWZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bnVsbCxyZWRvU3RhY2s6W10sdW5kb1N0YWNrOltdfX07THYucmVnaXN0ZXJIaXN0b3J5PWZ1bmN0aW9uKHQsZSxuKXtsZXQgcj0kUCh0LG4pO249KHtlZGl0b3JTdGF0ZTpsLHByZXZFZGl0b3JTdGF0ZTpzLGRpcnR5TGVhdmVzOmEsZGlydHlFbGVtZW50czpjLHRhZ3M6dX0pPT57Y29uc3QgZD1lLmN1cnJlbnQsZj1lLnJlZG9TdGFjayxwPWUudW5kb1N0YWNrLGc9ZD09PW51bGw/bnVsbDpkLmVkaXRvclN0YXRlO2lmKGQ9PT1udWxsfHxsIT09Zyl7aWYocz1yKHMsbCxkLGEsYyx1KSxzPT09MSlmLmxlbmd0aCE9PTAmJihlLnJlZG9TdGFjaz1bXSx0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fUkVET19DT01NQU5ELCExKSksZCE9PW51bGwmJihwLnB1c2goey4uLmR9KSx0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fVU5ET19DT01NQU5ELCEwKSk7ZWxzZSBpZihzPT09MilyZXR1cm47ZS5jdXJyZW50PXtlZGl0b3I6dCxlZGl0b3JTdGF0ZTpsfX19O2xldCBpPWJQLm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlckNvbW1hbmQoWWUuVU5ET19DT01NQU5ELCgpPT57bGV0IGw9ZS5yZWRvU3RhY2sscz1lLnVuZG9TdGFjaztpZihzLmxlbmd0aCE9PTApe2xldCBhPWUuY3VycmVudCxjPXMucG9wKCk7YSE9PW51bGwmJihsLnB1c2goYSksdC5kaXNwYXRjaENvbW1hbmQoWWUuQ0FOX1JFRE9fQ09NTUFORCwhMCkpLHMubGVuZ3RoPT09MCYmdC5kaXNwYXRjaENvbW1hbmQoWWUuQ0FOX1VORE9fQ09NTUFORCwhMSksZS5jdXJyZW50PWN8fG51bGwsYyYmYy5lZGl0b3Iuc2V0RWRpdG9yU3RhdGUoYy5lZGl0b3JTdGF0ZSx7dGFnOiJoaXN0b3JpYyJ9KX1yZXR1cm4hMH0sWWUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKFllLlJFRE9fQ09NTUFORCwoKT0+e2xldCBsPWUucmVkb1N0YWNrO3ZhciBzPWUudW5kb1N0YWNrO2lmKGwubGVuZ3RoIT09MCl7bGV0IGE9ZS5jdXJyZW50O2EhPT1udWxsJiYocy5wdXNoKGEpLHQuZGlzcGF0Y2hDb21tYW5kKFllLkNBTl9VTkRPX0NPTU1BTkQsITApKSxzPWwucG9wKCksbC5sZW5ndGg9PT0wJiZ0LmRpc3BhdGNoQ29tbWFuZChZZS5DQU5fUkVET19DT01NQU5ELCExKSxlLmN1cnJlbnQ9c3x8bnVsbCxzJiZzLmVkaXRvci5zZXRFZGl0b3JTdGF0ZShzLmVkaXRvclN0YXRlLHt0YWc6Imhpc3RvcmljIn0pfXJldHVybiEwfSxZZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoWWUuQ0xFQVJfRURJVE9SX0NPTU1BTkQsKCk9PihlLnVuZG9TdGFjaz1bXSxlLnJlZG9TdGFjaz1bXSxlLmN1cnJlbnQ9bnVsbCwhMSksWWUuQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKFllLkNMRUFSX0hJU1RPUllfQ09NTUFORCwoKT0+KGUudW5kb1N0YWNrPVtdLGUucmVkb1N0YWNrPVtdLGUuY3VycmVudD1udWxsLHQuZGlzcGF0Y2hDb21tYW5kKFllLkNBTl9SRURPX0NPTU1BTkQsITEpLHQuZGlzcGF0Y2hDb21tYW5kKFllLkNBTl9VTkRPX0NPTU1BTkQsITEpLCEwKSxZZS5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKG4pKSxvPXQucmVnaXN0ZXJVcGRhdGVMaXN0ZW5lcihuKTtyZXR1cm4oKT0+e2koKSxvKCl9fTtjb25zdCBUUD1Mdjt2YXIgTlA9VFAsUlA9TnIsRG09TlAsTng9aDtmdW5jdGlvbiBPUCh0LGUsbj0xZTMpe2xldCByPU54LnVzZU1lbW8oKCk9PmV8fERtLmNyZWF0ZUVtcHR5SGlzdG9yeVN0YXRlKCksW2VdKTtOeC51c2VFZmZlY3QoKCk9PkRtLnJlZ2lzdGVySGlzdG9yeSh0LHIsbiksW24sdCxyXSl9TXYuY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU9RG0uY3JlYXRlRW1wdHlIaXN0b3J5U3RhdGU7TXYuSGlzdG9yeVBsdWdpbj1mdW5jdGlvbih7ZXh0ZXJuYWxIaXN0b3J5U3RhdGU6dH0pe2xldFtlXT1SUC51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIE9QKGUsdCksbnVsbH07Y29uc3QgUFA9TXY7dmFyIEFQPVBQLGxDPXt9LE1QPU5yLERhPWgsTFA9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiP0RhLnVzZUxheW91dEVmZmVjdDpEYS51c2VFZmZlY3Q7ZnVuY3Rpb24gRFAodCl7bGV0W2VdPU1QLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxuPURhLnVzZU1lbW8oKCk9PnQoZSksW2UsdF0pLHI9RGEudXNlUmVmKG4uaW5pdGlhbFZhbHVlRm4oKSksW2ksb109RGEudXNlU3RhdGUoci5jdXJyZW50KTtyZXR1cm4gTFAoKCk9PntsZXR7aW5pdGlhbFZhbHVlRm46bCxzdWJzY3JpYmU6c309bixhPWwoKTtyZXR1cm4gci5jdXJyZW50IT09YSYmKHIuY3VycmVudD1hLG8oYSkpLHMoYz0+e3IuY3VycmVudD1jLG8oYyl9KX0sW24sdF0pLGl9ZnVuY3Rpb24gSVAodCl7cmV0dXJue2luaXRpYWxWYWx1ZUZuOigpPT50LmlzRWRpdGFibGUoKSxzdWJzY3JpYmU6ZT0+dC5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIoZSl9fXZhciBqUD1mdW5jdGlvbigpe3JldHVybiBEUChJUCl9O2NvbnN0IHpQPWpQO3ZhciBGUD16UCxTbz17fSxwbj1fZTtmdW5jdGlvbiBEdih0LGU9ITApe3JldHVybiB0PyExOih0PXNDKCksZSYmKHQ9dC50cmltKCkpLHQ9PT0iIil9ZnVuY3Rpb24gc0MoKXtyZXR1cm4gcG4uJGdldFJvb3QoKS5nZXRUZXh0Q29udGVudCgpfWZ1bmN0aW9uIGFDKHQpe2lmKCFEdih0LCExKSlyZXR1cm4hMTt0PXBuLiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtsZXQgZT10Lmxlbmd0aDtpZigxPGUpcmV0dXJuITE7Zm9yKGxldCByPTA7cjxlO3IrKyl7dmFyIG49dFtyXTtpZihwbi4kaXNEZWNvcmF0b3JOb2RlKG4pKXJldHVybiExO2lmKHBuLiRpc0VsZW1lbnROb2RlKG4pKXtpZighcG4uJGlzUGFyYWdyYXBoTm9kZShuKXx8bi5fX2luZGVudCE9PTApcmV0dXJuITE7bj1uLmdldENoaWxkcmVuKCk7bGV0IGk9bi5sZW5ndGg7Zm9yKGxldCBvPTA7bzxpO28rKylpZighcG4uJGlzVGV4dE5vZGUobltyXSkpcmV0dXJuITF9fXJldHVybiEwfVNvLiRjYW5TaG93UGxhY2Vob2xkZXI9YUM7U28uJGNhblNob3dQbGFjZWhvbGRlckN1cnJ5PWZ1bmN0aW9uKHQpe3JldHVybigpPT5hQyh0KX07U28uJGZpbmRUZXh0SW50ZXJzZWN0aW9uRnJvbUNoYXJhY3RlcnM9ZnVuY3Rpb24odCxlKXt2YXIgbj10LmdldEZpcnN0Q2hpbGQoKTt0PTA7ZTpmb3IoO24hPT1udWxsOyl7aWYocG4uJGlzRWxlbWVudE5vZGUobikpe3ZhciByPW4uZ2V0Rmlyc3RDaGlsZCgpO2lmKHIhPT1udWxsKXtuPXI7Y29udGludWV9fWVsc2UgaWYocG4uJGlzVGV4dE5vZGUobikpe2lmKHI9bi5nZXRUZXh0Q29udGVudFNpemUoKSx0K3I+ZSlyZXR1cm57bm9kZTpuLG9mZnNldDplLXR9O3QrPXJ9aWYocj1uLmdldE5leHRTaWJsaW5nKCksciE9PW51bGwpbj1yO2Vsc2V7Zm9yKG49bi5nZXRQYXJlbnQoKTtuIT09bnVsbDspe2lmKHI9bi5nZXROZXh0U2libGluZygpLHIhPT1udWxsKXtuPXI7Y29udGludWUgZX1uPW4uZ2V0UGFyZW50KCl9YnJlYWt9fXJldHVybiBudWxsfTtTby4kaXNSb290VGV4dENvbnRlbnRFbXB0eT1EdjtTby4kaXNSb290VGV4dENvbnRlbnRFbXB0eUN1cnJ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKCk9PkR2KHQsZSl9O1NvLiRyb290VGV4dENvbnRlbnQ9c0M7U28ucmVnaXN0ZXJMZXhpY2FsVGV4dEVudGl0eT1mdW5jdGlvbih0LGUsbixyKXtsZXQgaT1sPT57Y29uc3Qgcz1wbi4kY3JlYXRlVGV4dE5vZGUobC5nZXRUZXh0Q29udGVudCgpKTtzLnNldEZvcm1hdChsLmdldEZvcm1hdCgpKSxsLnJlcGxhY2Uocyl9LG89dC5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0ocG4uVGV4dE5vZGUsbD0+e2lmKGwuaXNTaW1wbGVUZXh0KCkpe3ZhciBzPWwuZ2V0UHJldmlvdXNTaWJsaW5nKCksYT1sLmdldFRleHRDb250ZW50KCksYz1sO2lmKHBuLiRpc1RleHROb2RlKHMpKXt2YXIgdT1zLmdldFRleHRDb250ZW50KCksZD1lKHUrYSk7aWYocyBpbnN0YW5jZW9mIG4pe2lmKGQ9PT1udWxsfHxzLmdldExhdGVzdCgpLl9fbW9kZSE9PTApe2kocyk7cmV0dXJufWlmKGQ9ZC5lbmQtdS5sZW5ndGgsMDxkKXtjPWEuc2xpY2UoMCxkKSxjPXUrYyxzLnNlbGVjdCgpLHMuc2V0VGV4dENvbnRlbnQoYyksZD09PWEubGVuZ3RoP2wucmVtb3ZlKCk6KHM9YS5zbGljZShkKSxsLnNldFRleHRDb250ZW50KHMpKTtyZXR1cm59fWVsc2UgaWYoZD09PW51bGx8fGQuc3RhcnQ8dS5sZW5ndGgpcmV0dXJufWZvcig7Oyl7aWYobD1lKGEpLGE9ZD1sPT09bnVsbD8iIjphLnNsaWNlKGwuZW5kKSxkPT09IiIpe2lmKHU9Yy5nZXROZXh0U2libGluZygpLHBuLiRpc1RleHROb2RlKHUpKXtpZihkPWMuZ2V0VGV4dENvbnRlbnQoKSt1LmdldFRleHRDb250ZW50KCksZD1lKGQpLGQ9PT1udWxsKXt1IGluc3RhbmNlb2Ygbj9pKHUpOnUubWFya0RpcnR5KCk7YnJlYWt9ZWxzZSBpZihkLnN0YXJ0IT09MClicmVha319ZWxzZSBpZih1PWUoZCksdSE9PW51bGwmJnUuc3RhcnQ9PT0wKWJyZWFrO2lmKGw9PT1udWxsKWJyZWFrO2lmKGwuc3RhcnQ9PT0wJiZwbi4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSljb250aW51ZTtsZXQgZjtpZihsLnN0YXJ0PT09MD9bZixjXT1jLnNwbGl0VGV4dChsLmVuZCk6WyxmLGNdPWMuc3BsaXRUZXh0KGwuc3RhcnQsbC5lbmQpLGw9cihmKSxsLnNldEZvcm1hdChmLmdldEZvcm1hdCgpKSxmLnJlcGxhY2UobCksYz09bnVsbClicmVha319fSk7cmV0dXJuIHQ9dC5yZWdpc3Rlck5vZGVUcmFuc2Zvcm0obixsPT57dmFyIHM9bC5nZXRUZXh0Q29udGVudCgpO2NvbnN0IGE9ZShzKTthPT09bnVsbHx8YS5zdGFydCE9PTA/aShsKTpzLmxlbmd0aD5hLmVuZD9sLnNwbGl0VGV4dChhLmVuZCk6KHM9bC5nZXRQcmV2aW91c1NpYmxpbmcoKSxwbi4kaXNUZXh0Tm9kZShzKSYmcy5pc1RleHRFbnRpdHkoKSYmKGkocyksaShsKSkscz1sLmdldE5leHRTaWJsaW5nKCkscG4uJGlzVGV4dE5vZGUocykmJnMuaXNUZXh0RW50aXR5KCkmJihpKHMpLGwgaW5zdGFuY2VvZiBuJiZpKGwpKSl9KSxbbyx0XX07Y29uc3QgQlA9U287dmFyIFVQPUJQLGNDPXt9LF91PV9lO2NDLnJlZ2lzdGVyRHJhZ29uU3VwcG9ydD1mdW5jdGlvbih0KXtsZXQgZT13aW5kb3cubG9jYXRpb24ub3JpZ2luLG49cj0+e2lmKHIub3JpZ2luPT09ZSl7dmFyIGk9dC5nZXRSb290RWxlbWVudCgpO2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1pJiYoaT1yLmRhdGEsdHlwZW9mIGk9PSJzdHJpbmciKSl7dHJ5e3ZhciBvPUpTT04ucGFyc2UoaSl9Y2F0Y2h7cmV0dXJufWlmKG8mJm8ucHJvdG9jb2w9PT0ibnVhbnJpYV9tZXNzYWdpbmciJiZvLnR5cGU9PT0icmVxdWVzdCImJihvPW8ucGF5bG9hZCkmJm8uZnVuY3Rpb25JZD09PSJtYWtlQ2hhbmdlcyImJihvPW8uYXJncykpe2NvbnN0W2wscyxhLGMsdV09bzt0LnVwZGF0ZSgoKT0+e2NvbnN0IGQ9X3UuJGdldFNlbGVjdGlvbigpO2lmKF91LiRpc1JhbmdlU2VsZWN0aW9uKGQpKXt2YXIgZj1kLmFuY2hvcjtsZXQgcD1mLmdldE5vZGUoKSxnPTAsbT0wO191LiRpc1RleHROb2RlKHApJiYwPD1sJiYwPD1zJiYoZz1sLG09bCtzLGQuc2V0VGV4dE5vZGVSYW5nZShwLGcscCxtKSksKGchPT1tfHxhIT09IiIpJiYoZC5pbnNlcnRSYXdUZXh0KGEpLHA9Zi5nZXROb2RlKCkpLF91LiRpc1RleHROb2RlKHApJiYoZz1jLG09Yyt1LGY9cC5nZXRUZXh0Q29udGVudFNpemUoKSxnPWc+Zj9mOmcsbT1tPmY/ZjptLGQuc2V0VGV4dE5vZGVSYW5nZShwLGcscCxtKSksci5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19KX19fX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuLCEwKX19O2NvbnN0IFdQPWNDO3ZhciBIUD1XUCxxcj17fSxraT17fSxJdj17fSxSeD11byxWUD1GdCxIbD1fZTtmdW5jdGlvbiB1Qyh0LGUsbixyPW51bGwpe2xldCBpPXIhPW51bGw/ZS5pc1NlbGVjdGVkKHIpOiEwLG89SGwuJGlzRWxlbWVudE5vZGUoZSkmJmUuZXhjbHVkZUZyb21Db3B5KCJodG1sIik7dmFyIGw9ZTtyIT09bnVsbCYmKGw9UnguJGNsb25lV2l0aFByb3BlcnRpZXMoZSksbD1IbC4kaXNUZXh0Tm9kZShsKSYmciE9bnVsbD9SeC4kc2xpY2VTZWxlY3RlZFRleHROb2RlQ29udGVudChyLGwpOmwpO2xldCBzPUhsLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXSx7ZWxlbWVudDphLGFmdGVyOmN9PWwuZXhwb3J0RE9NKHQpO2lmKCFhKXJldHVybiExO2xldCB1PWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IobGV0IGQ9MDtkPHMubGVuZ3RoO2QrKyl7bGV0IGY9c1tkXSxwPXVDKHQsZix1LHIpOyFpJiZIbC4kaXNFbGVtZW50Tm9kZShlKSYmcCYmZS5leHRyYWN0V2l0aENoaWxkKGYsciwiaHRtbCIpJiYoaT0hMCl9cmV0dXJuIGkmJiFvPyhWUC5pc0hUTUxFbGVtZW50KGEpJiZhLmFwcGVuZCh1KSxuLmFwcGVuZChhKSxjJiYodD1jLmNhbGwobCxhKSkmJmEucmVwbGFjZVdpdGgodCkpOm4uYXBwZW5kKHUpLGl9bGV0IGRDPW5ldyBTZXQoWyJTVFlMRSIsIlNDUklQVCJdKTtmdW5jdGlvbiBmQyh0LGUsbj1uZXcgTWFwLHIpe2xldCBpPVtdO2lmKGRDLmhhcyh0Lm5vZGVOYW1lKSlyZXR1cm4gaTtsZXQgbz1udWxsO3ZhciBsLHtub2RlTmFtZTpzfT10LGE9ZS5faHRtbENvbnZlcnNpb25zLmdldChzLnRvTG93ZXJDYXNlKCkpO2lmKHM9bnVsbCxhIT09dm9pZCAwKWZvcihsIG9mIGEpYT1sKHQpLGEhPT1udWxsJiYocz09PW51bGx8fHMucHJpb3JpdHk8YS5wcmlvcml0eSkmJihzPWEpO2lmKHM9KGw9cyE9PW51bGw/cy5jb252ZXJzaW9uOm51bGwpP2wodCk6bnVsbCxsPW51bGwscyE9PW51bGwpe2lmKGw9cy5hZnRlcixhPXMubm9kZSxvPUFycmF5LmlzQXJyYXkoYSk/YVthLmxlbmd0aC0xXTphLG8hPT1udWxsKXtmb3IodmFyWyxjXW9mIG4paWYobz1jKG8sciksIW8pYnJlYWs7byYmaS5wdXNoKC4uLkFycmF5LmlzQXJyYXkoYSk/YTpbb10pfXMuZm9yQ2hpbGQhPW51bGwmJm4uc2V0KHQubm9kZU5hbWUscy5mb3JDaGlsZCl9Zm9yKHQ9dC5jaGlsZE5vZGVzLHI9W10sYz0wO2M8dC5sZW5ndGg7YysrKXIucHVzaCguLi5mQyh0W2NdLGUsbmV3IE1hcChuKSxvKSk7cmV0dXJuIGwhPW51bGwmJihyPWwocikpLG89PW51bGw/aT1pLmNvbmNhdChyKTpIbC4kaXNFbGVtZW50Tm9kZShvKSYmby5hcHBlbmQoLi4uciksaX1Jdi4kZ2VuZXJhdGVIdG1sRnJvbU5vZGVzPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGRvY3VtZW50PiJ1Inx8dHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgRXJyb3IoIlRvIHVzZSAkZ2VuZXJhdGVIdG1sRnJvbU5vZGVzIGluIGhlYWRsZXNzIG1vZGUgcGxlYXNlIGluaXRpYWxpemUgYSBoZWFkbGVzcyBicm93c2VyIGltcGxlbWVudGF0aW9uIHN1Y2ggYXMgSlNEb20gYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4iKTtsZXQgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPUhsLiRnZXRSb290KCkuZ2V0Q2hpbGRyZW4oKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyl1Qyh0LHJbaV0sbixlKTtyZXR1cm4gbi5pbm5lckhUTUx9O0l2LiRnZW5lcmF0ZU5vZGVzRnJvbURPTT1mdW5jdGlvbih0LGUpe2U9ZS5ib2R5P2UuYm9keS5jaGlsZE5vZGVzOltdO2xldCBuPVtdO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgcj1lW2ldO2RDLmhhcyhyLm5vZGVOYW1lKXx8KHI9ZkMocix0KSxyIT09bnVsbCYmKG49bi5jb25jYXQocikpKX1yZXR1cm4gbn07Y29uc3QgS1A9SXY7dmFyIFpQPUtQLHBDPVpQLEltPXVvLG5zPUZ0LGhlPV9lO2Z1bmN0aW9uIHNpKHQpe2xldCBlPW5ldyBVUkxTZWFyY2hQYXJhbXM7ZS5hcHBlbmQoImNvZGUiLHQpO2ZvcihsZXQgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspZS5hcHBlbmQoInYiLGFyZ3VtZW50c1tuXSk7dGhyb3cgRXJyb3IoYE1pbmlmaWVkIExleGljYWwgZXJyb3IgIyR7dH07IHZpc2l0IGh0dHBzOi8vbGV4aWNhbC5kZXYvZG9jcy9lcnJvcj8ke2V9IGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgZnVsbCBlcnJvcnMgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy5gKX1sZXQgaEM9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQ8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiO2Z1bmN0aW9uIG1DKHQpe2xldCBlPWhlLiRnZXRTZWxlY3Rpb24oKTtpZihlPT1udWxsKXRocm93IEVycm9yKCJFeHBlY3RlZCB2YWxpZCBMZXhpY2FsU2VsZWN0aW9uIik7cmV0dXJuIGhlLiRpc1JhbmdlU2VsZWN0aW9uKGUpJiZlLmlzQ29sbGFwc2VkKCl8fGUuZ2V0Tm9kZXMoKS5sZW5ndGg9PT0wPyIiOnBDLiRnZW5lcmF0ZUh0bWxGcm9tTm9kZXModCxlKX1mdW5jdGlvbiBnQyh0KXtsZXQgZT1oZS4kZ2V0U2VsZWN0aW9uKCk7aWYoZT09bnVsbCl0aHJvdyBFcnJvcigiRXhwZWN0ZWQgdmFsaWQgTGV4aWNhbFNlbGVjdGlvbiIpO3JldHVybiBoZS4kaXNSYW5nZVNlbGVjdGlvbihlKSYmZS5pc0NvbGxhcHNlZCgpfHxlLmdldE5vZGVzKCkubGVuZ3RoPT09MD9udWxsOkpTT04uc3RyaW5naWZ5KHlDKHQsZSkpfWZ1bmN0aW9uIGptKHQsZSxuKXsoaGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pfHxucy4kZmluZE1hdGNoaW5nUGFyZW50KG4uYW5jaG9yLmdldE5vZGUoKSxyPT5oZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZShyKSkhPT1udWxsJiZucy4kZmluZE1hdGNoaW5nUGFyZW50KG4uZm9jdXMuZ2V0Tm9kZSgpLHI9PmhlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKHIpKSE9PW51bGwpJiZlLmxlbmd0aD09PTEmJmhlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUoZVswXSk/WVAoZSxuLCExLHQpOkdQKGUsbil9ZnVuY3Rpb24gR1AodCxlKXtsZXQgbj1bXSxyPW51bGw7Zm9yKGxldCBpPTA7aTx0Lmxlbmd0aDtpKyspe2xldCBvPXRbaV0sbD1oZS4kaXNMaW5lQnJlYWtOb2RlKG8pO2lmKGx8fGhlLiRpc0RlY29yYXRvck5vZGUobykmJm8uaXNJbmxpbmUoKXx8aGUuJGlzRWxlbWVudE5vZGUobykmJm8uaXNJbmxpbmUoKXx8aGUuJGlzVGV4dE5vZGUobyl8fG8uaXNQYXJlbnRSZXF1aXJlZCgpKXtpZihyPT09bnVsbCYmKHI9by5jcmVhdGVQYXJlbnRFbGVtZW50Tm9kZSgpLG4ucHVzaChyKSxsKSljb250aW51ZTtyIT09bnVsbCYmci5hcHBlbmQobyl9ZWxzZSBuLnB1c2gobykscj1udWxsfWhlLiRpc1JhbmdlU2VsZWN0aW9uKGUpP2UuaW5zZXJ0Tm9kZXMobik6aGUuREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKGUpJiYodD1lLmFuY2hvci5nZXROb2RlKCksaGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUodCl8fHNpKDQxKSx0LmFwcGVuZCguLi5uKSl9ZnVuY3Rpb24gWVAodCxlLG4scil7dC5sZW5ndGg9PT0xJiZoZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKHRbMF0pfHxzaSg0Mik7dmFyIGk9dFswXTt0PWkuZ2V0Q2hpbGRyZW4oKSxuPWkuZ2V0Rmlyc3RDaGlsZE9yVGhyb3coKS5nZXRDaGlsZHJlblNpemUoKTt2YXIgbz1pLmdldENoaWxkcmVuU2l6ZSgpLGw9bnMuJGZpbmRNYXRjaGluZ1BhcmVudChlLmFuY2hvci5nZXROb2RlKCkscD0+aGUuREVQUkVDQVRFRF8kaXNHcmlkQ2VsbE5vZGUocCkpO2U9KGk9bCYmbnMuJGZpbmRNYXRjaGluZ1BhcmVudChsLHA9PmhlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUocCkpKSYmbnMuJGZpbmRNYXRjaGluZ1BhcmVudChpLHA9PmhlLkRFUFJFQ0FURURfJGlzR3JpZE5vZGUocCkpLGhlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKGwpJiZoZS5ERVBSRUNBVEVEXyRpc0dyaWRSb3dOb2RlKGkpJiZoZS5ERVBSRUNBVEVEXyRpc0dyaWROb2RlKGUpfHxzaSg0Myk7dmFyIHM9aS5nZXRJbmRleFdpdGhpblBhcmVudCgpLGE9TWF0aC5taW4oZS5nZXRDaGlsZHJlblNpemUoKS0xLHMrby0xKTtvPWwuZ2V0SW5kZXhXaXRoaW5QYXJlbnQoKSxsPU1hdGgubWluKGkuZ2V0Q2hpbGRyZW5TaXplKCktMSxvK24tMSksbj1NYXRoLm1pbihvLGwpLGk9TWF0aC5taW4ocyxhKSxvPU1hdGgubWF4KG8sbCkscz1NYXRoLm1heChzLGEpLGE9ZS5nZXRDaGlsZHJlbigpLGw9MDtsZXQgYyx1O2ZvcihsZXQgcD1pO3A8PXM7cCsrKXt2YXIgZD1hW3BdO2hlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZCl8fHNpKDI0KTt2YXIgZj10W2xdO2hlLkRFUFJFQ0FURURfJGlzR3JpZFJvd05vZGUoZil8fHNpKDI0KSxkPWQuZ2V0Q2hpbGRyZW4oKSxmPWYuZ2V0Q2hpbGRyZW4oKTtsZXQgZz0wO2ZvcihsZXQgbT1uO208PW87bSsrKXtsZXQgdz1kW21dO2hlLkRFUFJFQ0FURURfJGlzR3JpZENlbGxOb2RlKHcpfHxzaSgyNSk7bGV0IHY9ZltnXTtoZS5ERVBSRUNBVEVEXyRpc0dyaWRDZWxsTm9kZSh2KXx8c2koMjUpLHA9PT1pJiZtPT09bj9jPXcuZ2V0S2V5KCk6cD09PXMmJm09PT1vJiYodT13LmdldEtleSgpKTtsZXQgeD13LmdldENoaWxkcmVuKCk7di5nZXRDaGlsZHJlbigpLmZvckVhY2goXz0+e2hlLiRpc1RleHROb2RlKF8pJiZoZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSgpLmFwcGVuZChfKSx3LmFwcGVuZChfKX0pLHguZm9yRWFjaChfPT5fLnJlbW92ZSgpKSxnKyt9bCsrfWMmJnUmJih0PWhlLkRFUFJFQ0FURURfJGNyZWF0ZUdyaWRTZWxlY3Rpb24oKSx0LnNldChlLmdldEtleSgpLGMsdSksaGUuJHNldFNlbGVjdGlvbih0KSxyLmRpc3BhdGNoQ29tbWFuZChoZS5TRUxFQ1RJT05fQ0hBTkdFX0NPTU1BTkQsdm9pZCAwKSl9ZnVuY3Rpb24gdkModCxlLG4scj1bXSl7bGV0IGk9ZSE9bnVsbD9uLmlzU2VsZWN0ZWQoZSk6ITAsbz1oZS4kaXNFbGVtZW50Tm9kZShuKSYmbi5leGNsdWRlRnJvbUNvcHkoImh0bWwiKTt2YXIgbD1uO2lmKGUhPT1udWxsKXt2YXIgcz1JbS4kY2xvbmVXaXRoUHJvcGVydGllcyhuKTtsPXM9aGUuJGlzVGV4dE5vZGUocykmJmUhPW51bGw/SW0uJHNsaWNlU2VsZWN0ZWRUZXh0Tm9kZUNvbnRlbnQoZSxzKTpzfWxldCBhPWhlLiRpc0VsZW1lbnROb2RlKGwpP2wuZ2V0Q2hpbGRyZW4oKTpbXTt2YXIgYz1sO3M9Yy5leHBvcnRKU09OKCk7dmFyIHU9Yy5jb25zdHJ1Y3RvcjtzLnR5cGUhPT11LmdldFR5cGUoKSYmc2koNTgsdS5uYW1lKTtsZXQgZD1zLmNoaWxkcmVuO2ZvcihoZS4kaXNFbGVtZW50Tm9kZShjKSYmKEFycmF5LmlzQXJyYXkoZCl8fHNpKDU5LHUubmFtZSkpLGhlLiRpc1RleHROb2RlKGwpJiYobD1sLl9fdGV4dCwwPGwubGVuZ3RoP3MudGV4dD1sOmk9ITEpLGw9MDtsPGEubGVuZ3RoO2wrKyljPWFbbF0sdT12Qyh0LGUsYyxzLmNoaWxkcmVuKSwhaSYmaGUuJGlzRWxlbWVudE5vZGUobikmJnUmJm4uZXh0cmFjdFdpdGhDaGlsZChjLGUsImNsb25lIikmJihpPSEwKTtpZihpJiYhbylyLnB1c2gocyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHMuY2hpbGRyZW4pKWZvcih0PTA7dDxzLmNoaWxkcmVuLmxlbmd0aDt0Kyspci5wdXNoKHMuY2hpbGRyZW5bdF0pO3JldHVybiBpfWZ1bmN0aW9uIHlDKHQsZSl7bGV0IG49W10scj1oZS4kZ2V0Um9vdCgpLmdldENoaWxkcmVuKCk7Zm9yKGxldCBpPTA7aTxyLmxlbmd0aDtpKyspdkModCxlLHJbaV0sbik7cmV0dXJue25hbWVzcGFjZTp0Ll9jb25maWcubmFtZXNwYWNlLG5vZGVzOm59fWZ1bmN0aW9uIHhDKHQpe2xldCBlPVtdO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtsZXQgcj1oZS4kcGFyc2VTZXJpYWxpemVkTm9kZSh0W25dKTtoZS4kaXNUZXh0Tm9kZShyKSYmSW0uJGFkZE5vZGVTdHlsZShyKSxlLnB1c2gocil9cmV0dXJuIGV9bGV0IFNsPW51bGw7ZnVuY3Rpb24gT3godCxlKXt2YXIgbj1oQz8odC5fd2luZG93fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpOm51bGw7aWYoIW4pcmV0dXJuITE7dmFyIHI9bi5hbmNob3JOb2RlO2lmKG49bi5mb2N1c05vZGUsciE9PW51bGwmJm4hPT1udWxsJiYhaGUuaXNTZWxlY3Rpb25XaXRoaW5FZGl0b3IodCxyLG4pfHwoZS5wcmV2ZW50RGVmYXVsdCgpLGU9ZS5jbGlwYm9hcmREYXRhLHI9aGUuJGdldFNlbGVjdGlvbigpLGU9PT1udWxsfHxyPT09bnVsbCkpcmV0dXJuITE7bj1tQyh0KSx0PWdDKHQpO2xldCBpPSIiO3JldHVybiByIT09bnVsbCYmKGk9ci5nZXRUZXh0Q29udGVudCgpKSxuIT09bnVsbCYmZS5zZXREYXRhKCJ0ZXh0L2h0bWwiLG4pLHQhPT1udWxsJiZlLnNldERhdGEoImFwcGxpY2F0aW9uL3gtbGV4aWNhbC1lZGl0b3IiLHQpLGUuc2V0RGF0YSgidGV4dC9wbGFpbiIsaSksITB9a2kuJGdlbmVyYXRlSlNPTkZyb21TZWxlY3RlZE5vZGVzPXlDO2tpLiRnZW5lcmF0ZU5vZGVzRnJvbVNlcmlhbGl6ZWROb2Rlcz14QztraS4kZ2V0SHRtbENvbnRlbnQ9bUM7a2kuJGdldExleGljYWxDb250ZW50PWdDO2tpLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JQbGFpblRleHQ9ZnVuY3Rpb24odCxlKXt0PXQuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHx0LmdldERhdGEoInRleHQvdXJpLWxpc3QiKSx0IT1udWxsJiZlLmluc2VydFJhd1RleHQodCl9O2tpLiRpbnNlcnREYXRhVHJhbnNmZXJGb3JSaWNoVGV4dD1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC5nZXREYXRhKCJhcHBsaWNhdGlvbi94LWxleGljYWwtZWRpdG9yIik7aWYocil0cnl7bGV0IGw9SlNPTi5wYXJzZShyKTtpZihsLm5hbWVzcGFjZT09PW4uX2NvbmZpZy5uYW1lc3BhY2UmJkFycmF5LmlzQXJyYXkobC5ub2Rlcykpe2xldCBzPXhDKGwubm9kZXMpO3JldHVybiBqbShuLHMsZSl9fWNhdGNoe31pZihyPXQuZ2V0RGF0YSgidGV4dC9odG1sIikpdHJ5e3ZhciBpPW5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcociwidGV4dC9odG1sIiksbz1wQy4kZ2VuZXJhdGVOb2Rlc0Zyb21ET00obixpKTtyZXR1cm4gam0obixvLGUpfWNhdGNoe31pZih0PXQuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfHx0LmdldERhdGEoInRleHQvdXJpLWxpc3QiKSx0IT1udWxsKWlmKGhlLiRpc1JhbmdlU2VsZWN0aW9uKGUpKWZvcih0PXQuc3BsaXQoLyhccj9cbnxcdCkvKSxuPXQubGVuZ3RoLGk9MDtpPG47aSsrKW89dFtpXSxvPT09YApgfHxvPT09YFxyCmA/ZS5pbnNlcnRQYXJhZ3JhcGgoKTpvPT09IgkiP2UuaW5zZXJ0Tm9kZXMoW2hlLiRjcmVhdGVUYWJOb2RlKCldKTplLmluc2VydFRleHQobyk7ZWxzZSBlLmluc2VydFJhd1RleHQodCl9O2tpLiRpbnNlcnRHZW5lcmF0ZWROb2Rlcz1qbTtraS5jb3B5VG9DbGlwYm9hcmQ9YXN5bmMgZnVuY3Rpb24odCxlKXtpZihTbCE9PW51bGwpcmV0dXJuITE7aWYoZSE9PW51bGwpcmV0dXJuIG5ldyBQcm9taXNlKGw9Pnt0LnVwZGF0ZSgoKT0+e2woT3godCxlKSl9KX0pO3ZhciBuPXQuZ2V0Um9vdEVsZW1lbnQoKTtsZXQgcj10Ll93aW5kb3c9PW51bGw/d2luZG93LmRvY3VtZW50OnQuX3dpbmRvdy5kb2N1bWVudCxpPWhDPyh0Ll93aW5kb3d8fHdpbmRvdykuZ2V0U2VsZWN0aW9uKCk6bnVsbDtpZihuPT09bnVsbHx8aT09PW51bGwpcmV0dXJuITE7bGV0IG89ci5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIG8uc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGZpeGVkOyB0b3A6IC0xMDAwcHg7IixvLmFwcGVuZChyLmNyZWF0ZVRleHROb2RlKCIjIikpLG4uYXBwZW5kKG8pLG49bmV3IFJhbmdlLG4uc2V0U3RhcnQobywwKSxuLnNldEVuZChvLDEpLGkucmVtb3ZlQWxsUmFuZ2VzKCksaS5hZGRSYW5nZShuKSxuZXcgUHJvbWlzZShsPT57bGV0IHM9dC5yZWdpc3RlckNvbW1hbmQoaGUuQ09QWV9DT01NQU5ELGE9Pihucy5vYmplY3RLbGFzc0VxdWFscyhhLENsaXBib2FyZEV2ZW50KSYmKHMoKSxTbCE9PW51bGwmJih3aW5kb3cuY2xlYXJUaW1lb3V0KFNsKSxTbD1udWxsKSxsKE94KHQsYSkpKSwhMCksaGUuQ09NTUFORF9QUklPUklUWV9DUklUSUNBTCk7U2w9d2luZG93LnNldFRpbWVvdXQoKCk9PntzKCksU2w9bnVsbCxsKCExKX0sNTApLHIuZXhlY0NvbW1hbmQoImNvcHkiKSxvLnJlbW92ZSgpfSl9O2NvbnN0IFhQPWtpO3ZhciBKUD1YUCxVZD1KUCx3dT11byx6cj1GdCxPPV9lO2Z1bmN0aW9uIFB4KHQsZSl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50PCJ1Ij8odD1kb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHQsZSksdD09PW51bGw/bnVsbDp7bm9kZTp0LnN0YXJ0Q29udGFpbmVyLG9mZnNldDp0LnN0YXJ0T2Zmc2V0fSk6ZG9jdW1lbnQuY2FyZXRQb3NpdGlvbkZyb21Qb2ludCE9PSJ1bmRlZmluZWQiPyh0PWRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQodCxlKSx0PT09bnVsbD9udWxsOntub2RlOnQub2Zmc2V0Tm9kZSxvZmZzZXQ6dC5vZmZzZXR9KTpudWxsfWxldCBJcz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudDwidSImJnR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudDwidSIsUVA9SXMmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQ/ZG9jdW1lbnQuZG9jdW1lbnRNb2RlOm51bGwscVA9SXMmJiJJbnB1dEV2ZW50ImluIHdpbmRvdyYmIVFQPyJnZXRUYXJnZXRSYW5nZXMiaW4gbmV3IHdpbmRvdy5JbnB1dEV2ZW50KCJpbnB1dCIpOiExLGVBPUlzJiYvVmVyc2lvblwvW1xkLl0rLipTYWZhcmkvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdEE9SXMmJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhd2luZG93Lk1TU3RyZWFtLG5BPUlzJiYvXig/PS4qQ2hyb21lKS4qL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxyQT1JcyYmL0FwcGxlV2ViS2l0XC9bXGQuXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiFuQSx6bT1PLmNyZWF0ZUNvbW1hbmQoIkRSQUdfRFJPUF9QQVNURV9GSUxFIiksanY9Y2xhc3MgX0MgZXh0ZW5kcyBPLkVsZW1lbnROb2Rle3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuInF1b3RlIn1zdGF0aWMgY2xvbmUoZSl7cmV0dXJuIG5ldyBfQyhlLl9fa2V5KX1jb25zdHJ1Y3RvcihlKXtzdXBlcihlKX1jcmVhdGVET00oZSl7bGV0IG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYmxvY2txdW90ZSIpO3JldHVybiB6ci5hZGRDbGFzc05hbWVzVG9FbGVtZW50KG4sZS50aGVtZS5xdW90ZSksbn11cGRhdGVET00oKXtyZXR1cm4hMX1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJue2Jsb2NrcXVvdGU6KCk9Pih7Y29udmVyc2lvbjppQSxwcmlvcml0eTowfSl9fWV4cG9ydERPTShlKXtpZih7ZWxlbWVudDplfT1zdXBlci5leHBvcnRET00oZSksZSYmenIuaXNIVE1MRWxlbWVudChlKSl7dGhpcy5pc0VtcHR5KCkmJmUuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO2Uuc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJihlLmRpcj1uKX1yZXR1cm57ZWxlbWVudDplfX1zdGF0aWMgaW1wb3J0SlNPTihlKXtsZXQgbj16digpO3JldHVybiBuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXRJbmRlbnQoZS5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKGUuZGlyZWN0aW9uKSxufWV4cG9ydEpTT04oKXtyZXR1cm57Li4uc3VwZXIuZXhwb3J0SlNPTigpLHR5cGU6InF1b3RlIn19aW5zZXJ0TmV3QWZ0ZXIoZSxuKXtlPU8uJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiBlLnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKGUsbiksZX1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgZT1PLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PmUuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UoZSksITB9fTtmdW5jdGlvbiB6digpe3JldHVybiBPLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcganYpfWxldCBGdj1jbGFzcyB3QyBleHRlbmRzIE8uRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4iaGVhZGluZyJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcgd0MoZS5fX3RhZyxlLl9fa2V5KX1jb25zdHJ1Y3RvcihlLG4pe3N1cGVyKG4pLHRoaXMuX190YWc9ZX1nZXRUYWcoKXtyZXR1cm4gdGhpcy5fX3RhZ31jcmVhdGVET00oZSl7bGV0IG49dGhpcy5fX3RhZyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobik7cmV0dXJuIGU9ZS50aGVtZS5oZWFkaW5nLGUhPT12b2lkIDAmJnpyLmFkZENsYXNzTmFtZXNUb0VsZW1lbnQocixlW25dKSxyfXVwZGF0ZURPTSgpe3JldHVybiExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57aDE6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSksaDI6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSksaDM6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSksaDQ6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSksaDU6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSksaDY6KCk9Pih7Y29udmVyc2lvbjpFbCxwcmlvcml0eTowfSkscDplPT4oZT1lLmZpcnN0Q2hpbGQsZSE9PW51bGwmJkF4KGUpP3tjb252ZXJzaW9uOigpPT4oe25vZGU6bnVsbH0pLHByaW9yaXR5OjN9Om51bGwpLHNwYW46ZT0+QXgoZSk/e2NvbnZlcnNpb246KCk9Pih7bm9kZTpWbCgiaDEiKX0pLHByaW9yaXR5OjN9Om51bGx9fWV4cG9ydERPTShlKXtpZih7ZWxlbWVudDplfT1zdXBlci5leHBvcnRET00oZSksZSYmenIuaXNIVE1MRWxlbWVudChlKSl7dGhpcy5pc0VtcHR5KCkmJmUuYXBwZW5kKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpO3ZhciBuPXRoaXMuZ2V0Rm9ybWF0VHlwZSgpO2Uuc3R5bGUudGV4dEFsaWduPW4sKG49dGhpcy5nZXREaXJlY3Rpb24oKSkmJihlLmRpcj1uKX1yZXR1cm57ZWxlbWVudDplfX1zdGF0aWMgaW1wb3J0SlNPTihlKXtsZXQgbj1WbChlLnRhZyk7cmV0dXJuIG4uc2V0Rm9ybWF0KGUuZm9ybWF0KSxuLnNldEluZGVudChlLmluZGVudCksbi5zZXREaXJlY3Rpb24oZS5kaXJlY3Rpb24pLG59ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdGFnOnRoaXMuZ2V0VGFnKCksdHlwZToiaGVhZGluZyIsdmVyc2lvbjoxfX1pbnNlcnROZXdBZnRlcihlLG49ITApe2U9ZT9lLmFuY2hvci5vZmZzZXQ6MCxlPTA8ZSYmZTx0aGlzLmdldFRleHRDb250ZW50U2l6ZSgpP1ZsKHRoaXMuZ2V0VGFnKCkpOk8uJGNyZWF0ZVBhcmFncmFwaE5vZGUoKTtsZXQgcj10aGlzLmdldERpcmVjdGlvbigpO3JldHVybiBlLnNldERpcmVjdGlvbihyKSx0aGlzLmluc2VydEFmdGVyKGUsbiksZX1jb2xsYXBzZUF0U3RhcnQoKXtsZXQgZT10aGlzLmlzRW1wdHkoKT9PLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCk6VmwodGhpcy5nZXRUYWcoKSk7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKG49PmUuYXBwZW5kKG4pKSx0aGlzLnJlcGxhY2UoZSksITB9ZXh0cmFjdFdpdGhDaGlsZCgpe3JldHVybiEwfX07ZnVuY3Rpb24gQXgodCl7cmV0dXJuIHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJzcGFuIj90LnN0eWxlLmZvbnRTaXplPT09IjI2cHQiOiExfWZ1bmN0aW9uIEVsKHQpe2xldCBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPW51bGw7cmV0dXJuKGU9PT0iaDEifHxlPT09ImgyInx8ZT09PSJoMyJ8fGU9PT0iaDQifHxlPT09Img1Inx8ZT09PSJoNiIpJiYobj1WbChlKSx0LnN0eWxlIT09bnVsbCYmbi5zZXRGb3JtYXQodC5zdHlsZS50ZXh0QWxpZ24pKSx7bm9kZTpufX1mdW5jdGlvbiBpQSh0KXtsZXQgZT16digpO3JldHVybiB0LnN0eWxlIT09bnVsbCYmZS5zZXRGb3JtYXQodC5zdHlsZS50ZXh0QWxpZ24pLHtub2RlOmV9fWZ1bmN0aW9uIFZsKHQpe3JldHVybiBPLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcgRnYodCkpfWZ1bmN0aW9uIG9BKHQsZSl7dC5wcmV2ZW50RGVmYXVsdCgpLGUudXBkYXRlKCgpPT57bGV0IG49Ty4kZ2V0U2VsZWN0aW9uKCkscj10IGluc3RhbmNlb2YgSW5wdXRFdmVudHx8dCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQ/bnVsbDp0LmNsaXBib2FyZERhdGE7ciE9bnVsbCYmKE8uJGlzUmFuZ2VTZWxlY3Rpb24obil8fE8uREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pKSYmVWQuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbixlKX0se3RhZzoicGFzdGUifSl9YXN5bmMgZnVuY3Rpb24gbEEodCxlKXthd2FpdCBVZC5jb3B5VG9DbGlwYm9hcmQoZSx6ci5vYmplY3RLbGFzc0VxdWFscyh0LENsaXBib2FyZEV2ZW50KT90Om51bGwpLGUudXBkYXRlKCgpPT57bGV0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7Ty4kaXNSYW5nZVNlbGVjdGlvbihuKT9uLnJlbW92ZVRleHQoKTpPLiRpc05vZGVTZWxlY3Rpb24obikmJm4uZ2V0Tm9kZXMoKS5mb3JFYWNoKHI9PnIucmVtb3ZlKCkpfSl9ZnVuY3Rpb24gdmEodCl7bGV0IGU9bnVsbDtpZih0IGluc3RhbmNlb2YgRHJhZ0V2ZW50P2U9dC5kYXRhVHJhbnNmZXI6dCBpbnN0YW5jZW9mIENsaXBib2FyZEV2ZW50JiYoZT10LmNsaXBib2FyZERhdGEpLGU9PT1udWxsKXJldHVyblshMSxbXSwhMV07dmFyIG49ZS50eXBlcztyZXR1cm4gdD1uLmluY2x1ZGVzKCJGaWxlcyIpLG49bi5pbmNsdWRlcygidGV4dC9odG1sIil8fG4uaW5jbHVkZXMoInRleHQvcGxhaW4iKSxbdCxBcnJheS5mcm9tKGUuZmlsZXMpLG5dfWZ1bmN0aW9uIE14KHQpe3ZhciBlPU8uJGdldFNlbGVjdGlvbigpO2lmKCFPLiRpc1JhbmdlU2VsZWN0aW9uKGUpKXJldHVybiExO2xldCBuPW5ldyBTZXQ7ZT1lLmdldE5vZGVzKCk7Zm9yKGxldCBvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciByPWVbb10saT1yLmdldEtleSgpO24uaGFzKGkpfHwocj16ci4kZ2V0TmVhcmVzdEJsb2NrRWxlbWVudEFuY2VzdG9yT3JUaHJvdyhyKSxpPXIuZ2V0S2V5KCksci5jYW5JbmRlbnQoKSYmIW4uaGFzKGkpJiYobi5hZGQoaSksdChyKSkpfXJldHVybiAwPG4uc2l6ZX1mdW5jdGlvbiBTdSh0KXtyZXR1cm4gdD1PLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKHQpLE8uJGlzRGVjb3JhdG9yTm9kZSh0KX1xci4kY3JlYXRlSGVhZGluZ05vZGU9Vmw7cXIuJGNyZWF0ZVF1b3RlTm9kZT16djtxci4kaXNIZWFkaW5nTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEZ2fTtxci4kaXNRdW90ZU5vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBqdn07cXIuRFJBR19EUk9QX1BBU1RFPXptO3FyLkhlYWRpbmdOb2RlPUZ2O3FyLlF1b3RlTm9kZT1qdjtxci5ldmVudEZpbGVzPXZhO3FyLnJlZ2lzdGVyUmljaFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHpyLm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlckNvbW1hbmQoTy5DTElDS19DT01NQU5ELCgpPT57Y29uc3QgZT1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNOb2RlU2VsZWN0aW9uKGUpPyhlLmNsZWFyKCksITApOiExfSwwKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkRFTEVURV9DSEFSQUNURVJfQ09NTUFORCxlPT57Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVDaGFyYWN0ZXIoZSksITApOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkRFTEVURV9XT1JEX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uZGVsZXRlV29yZChlKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uREVMRVRFX0xJTkVfQ09NTUFORCxlPT57Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihuKT8obi5kZWxldGVMaW5lKGUpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5DT05UUk9MTEVEX1RFWFRfSU5TRVJUSU9OX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYodHlwZW9mIGU9PSJzdHJpbmciKU8uJGlzUmFuZ2VTZWxlY3Rpb24obik/bi5pbnNlcnRUZXh0KGUpOk8uREVQUkVDQVRFRF8kaXNHcmlkU2VsZWN0aW9uKG4pO2Vsc2V7aWYoIU8uJGlzUmFuZ2VTZWxlY3Rpb24obikmJiFPLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihuKSlyZXR1cm4hMTtjb25zdCByPWUuZGF0YVRyYW5zZmVyO3IhPW51bGw/VWQuJGluc2VydERhdGFUcmFuc2ZlckZvclJpY2hUZXh0KHIsbix0KTpPLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYoZT1lLmRhdGEpJiZuLmluc2VydFRleHQoZSl9cmV0dXJuITB9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uUkVNT1ZFX1RFWFRfQ09NTUFORCwoKT0+e2NvbnN0IGU9Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24oZSk/KGUucmVtb3ZlVGV4dCgpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5GT1JNQVRfVEVYVF9DT01NQU5ELGU9Pntjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhuLmZvcm1hdFRleHQoZSksITApOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkZPUk1BVF9FTEVNRU5UX0NPTU1BTkQsZT0+e3ZhciBuPU8uJGdldFNlbGVjdGlvbigpO2lmKCFPLiRpc1JhbmdlU2VsZWN0aW9uKG4pJiYhTy4kaXNOb2RlU2VsZWN0aW9uKG4pKXJldHVybiExO249bi5nZXROb2RlcygpO2Zvcihjb25zdCByIG9mIG4pbj16ci4kZmluZE1hdGNoaW5nUGFyZW50KHIsaT0+Ty4kaXNFbGVtZW50Tm9kZShpKSYmIWkuaXNJbmxpbmUoKSksbiE9PW51bGwmJm4uc2V0Rm9ybWF0KGUpO3JldHVybiEwfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLklOU0VSVF9MSU5FX0JSRUFLX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obik/KG4uaW5zZXJ0TGluZUJyZWFrKGUpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsKCk9Pntjb25zdCBlPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKGUpPyhlLmluc2VydFBhcmFncmFwaCgpLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5JTlNFUlRfVEFCX0NPTU1BTkQsKCk9PihPLiRpbnNlcnROb2RlcyhbTy4kY3JlYXRlVGFiTm9kZSgpXSksITApLE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uSU5ERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+TXgoZT0+e2NvbnN0IG49ZS5nZXRJbmRlbnQoKTtlLnNldEluZGVudChuKzEpfSksTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCwoKT0+TXgoZT0+e2NvbnN0IG49ZS5nZXRJbmRlbnQoKTswPG4mJmUuc2V0SW5kZW50KG4tMSl9KSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLktFWV9BUlJPV19VUF9DT01NQU5ELGU9Pnt2YXIgbj1PLiRnZXRTZWxlY3Rpb24oKTtpZihPLiRpc05vZGVTZWxlY3Rpb24obikmJiFTdShlLnRhcmdldCkpe2lmKGU9bi5nZXROb2RlcygpLDA8ZS5sZW5ndGgpcmV0dXJuIGVbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1lbHNlIGlmKE8uJGlzUmFuZ2VTZWxlY3Rpb24obikmJihuPU8uJGdldEFkamFjZW50Tm9kZShuLmZvY3VzLCEwKSwhZS5zaGlmdEtleSYmTy4kaXNEZWNvcmF0b3JOb2RlKG4pJiYhbi5pc0lzb2xhdGVkKCkmJiFuLmlzSW5saW5lKCkpKXJldHVybiBuLnNlbGVjdFByZXZpb3VzKCksZS5wcmV2ZW50RGVmYXVsdCgpLCEwO3JldHVybiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLktFWV9BUlJPV19ET1dOX0NPTU1BTkQsZT0+e3ZhciBuPU8uJGdldFNlbGVjdGlvbigpO2lmKE8uJGlzTm9kZVNlbGVjdGlvbihuKSl7aWYoZT1uLmdldE5vZGVzKCksMDxlLmxlbmd0aClyZXR1cm4gZVswXS5zZWxlY3ROZXh0KDAsMCksITB9ZWxzZSBpZihPLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXtsZXQgcj1uLmZvY3VzO2lmKHIua2V5PT09InJvb3QiJiZyLm9mZnNldD09PU8uJGdldFJvb3QoKS5nZXRDaGlsZHJlblNpemUoKSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLCEwO2lmKG49Ty4kZ2V0QWRqYWNlbnROb2RlKG4uZm9jdXMsITEpLCFlLnNoaWZ0S2V5JiZPLiRpc0RlY29yYXRvck5vZGUobikmJiFuLmlzSXNvbGF0ZWQoKSYmIW4uaXNJbmxpbmUoKSlyZXR1cm4gbi5zZWxlY3ROZXh0KCksZS5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLktFWV9BUlJPV19MRUZUX0NPTU1BTkQsZT0+e2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYoTy4kaXNOb2RlU2VsZWN0aW9uKG4pKXt2YXIgcj1uLmdldE5vZGVzKCk7aWYoMDxyLmxlbmd0aClyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHJbMF0uc2VsZWN0UHJldmlvdXMoKSwhMH1yZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihuKSYmd3UuJHNob3VsZE92ZXJyaWRlRGVmYXVsdENoYXJhY3RlclNlbGVjdGlvbihuLCEwKT8ocj1lLnNoaWZ0S2V5LGUucHJldmVudERlZmF1bHQoKSx3dS4kbW92ZUNoYXJhY3RlcihuLHIsITApLCEwKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfQVJST1dfUklHSFRfQ09NTUFORCxlPT57Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtpZihPLiRpc05vZGVTZWxlY3Rpb24obikmJiFTdShlLnRhcmdldCkpe3ZhciByPW4uZ2V0Tm9kZXMoKTtpZigwPHIubGVuZ3RoKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksclswXS5zZWxlY3ROZXh0KDAsMCksITB9cmV0dXJuIE8uJGlzUmFuZ2VTZWxlY3Rpb24obik/KHI9ZS5zaGlmdEtleSx3dS4kc2hvdWxkT3ZlcnJpZGVEZWZhdWx0Q2hhcmFjdGVyU2VsZWN0aW9uKG4sITEpPyhlLnByZXZlbnREZWZhdWx0KCksd3UuJG1vdmVDaGFyYWN0ZXIobixyLCExKSwhMCk6ITEpOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLktFWV9CQUNLU1BBQ0VfQ09NTUFORCxlPT57aWYoU3UoZS50YXJnZXQpKXJldHVybiExO2NvbnN0IG49Ty4kZ2V0U2VsZWN0aW9uKCk7aWYoIU8uJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7ZS5wcmV2ZW50RGVmYXVsdCgpLHthbmNob3I6ZX09bjtjb25zdCByPWUuZ2V0Tm9kZSgpO3JldHVybiBuLmlzQ29sbGFwc2VkKCkmJmUub2Zmc2V0PT09MCYmIU8uJGlzUm9vdE5vZGUocikmJjA8enIuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3cocikuZ2V0SW5kZW50KCk/dC5kaXNwYXRjaENvbW1hbmQoTy5PVVRERU5UX0NPTlRFTlRfQ09NTUFORCx2b2lkIDApOnQuZGlzcGF0Y2hDb21tYW5kKE8uREVMRVRFX0NIQVJBQ1RFUl9DT01NQU5ELCEwKX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfREVMRVRFX0NPTU1BTkQsZT0+e2lmKFN1KGUudGFyZ2V0KSlyZXR1cm4hMTtjb25zdCBuPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKG4pPyhlLnByZXZlbnREZWZhdWx0KCksdC5kaXNwYXRjaENvbW1hbmQoTy5ERUxFVEVfQ0hBUkFDVEVSX0NPTU1BTkQsITEpKTohMX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfRU5URVJfQ09NTUFORCxlPT57Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtpZighTy4kaXNSYW5nZVNlbGVjdGlvbihuKSlyZXR1cm4hMTtpZihlIT09bnVsbCl7aWYoKHRBfHxlQXx8ckEpJiZxUClyZXR1cm4hMTtpZihlLnByZXZlbnREZWZhdWx0KCksZS5zaGlmdEtleSlyZXR1cm4gdC5kaXNwYXRjaENvbW1hbmQoTy5JTlNFUlRfTElORV9CUkVBS19DT01NQU5ELCExKX1yZXR1cm4gdC5kaXNwYXRjaENvbW1hbmQoTy5JTlNFUlRfUEFSQUdSQVBIX0NPTU1BTkQsdm9pZCAwKX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5LRVlfRVNDQVBFX0NPTU1BTkQsKCk9Pntjb25zdCBlPU8uJGdldFNlbGVjdGlvbigpO3JldHVybiBPLiRpc1JhbmdlU2VsZWN0aW9uKGUpPyh0LmJsdXIoKSwhMCk6ITF9LE8uQ09NTUFORF9QUklPUklUWV9FRElUT1IpLHQucmVnaXN0ZXJDb21tYW5kKE8uRFJPUF9DT01NQU5ELGU9Pntjb25zdFssbl09dmEoZSk7aWYoMDxuLmxlbmd0aCl7dmFyIHI9UHgoZS5jbGllbnRYLGUuY2xpZW50WSk7aWYociE9PW51bGwpe2NvbnN0e29mZnNldDpvLG5vZGU6bH09cjt2YXIgaT1PLiRnZXROZWFyZXN0Tm9kZUZyb21ET01Ob2RlKGwpO2lmKGkhPT1udWxsKXtpZihyPU8uJGNyZWF0ZVJhbmdlU2VsZWN0aW9uKCksTy4kaXNUZXh0Tm9kZShpKSlyLmFuY2hvci5zZXQoaS5nZXRLZXkoKSxvLCJ0ZXh0Iiksci5mb2N1cy5zZXQoaS5nZXRLZXkoKSxvLCJ0ZXh0Iik7ZWxzZXtjb25zdCBzPWkuZ2V0UGFyZW50T3JUaHJvdygpLmdldEtleSgpO2k9aS5nZXRJbmRleFdpdGhpblBhcmVudCgpKzEsci5hbmNob3Iuc2V0KHMsaSwiZWxlbWVudCIpLHIuZm9jdXMuc2V0KHMsaSwiZWxlbWVudCIpfXI9Ty4kbm9ybWFsaXplU2VsZWN0aW9uX19FWFBFUklNRU5UQUwociksTy4kc2V0U2VsZWN0aW9uKHIpfXQuZGlzcGF0Y2hDb21tYW5kKHptLG4pfXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksITB9cmV0dXJuIGU9Ty4kZ2V0U2VsZWN0aW9uKCksISFPLiRpc1JhbmdlU2VsZWN0aW9uKGUpfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkRSQUdTVEFSVF9DT01NQU5ELGU9PntbZV09dmEoZSk7Y29uc3Qgbj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4hKGUmJiFPLiRpc1JhbmdlU2VsZWN0aW9uKG4pKX0sTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5EUkFHT1ZFUl9DT01NQU5ELGU9Pnt2YXJbbl09dmEoZSk7Y29uc3Qgcj1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gbiYmIU8uJGlzUmFuZ2VTZWxlY3Rpb24ocik/ITE6KG49UHgoZS5jbGllbnRYLGUuY2xpZW50WSksbiE9PW51bGwmJihuPU8uJGdldE5lYXJlc3ROb2RlRnJvbURPTU5vZGUobi5ub2RlKSxPLiRpc0RlY29yYXRvck5vZGUobikmJmUucHJldmVudERlZmF1bHQoKSksITApfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLlNFTEVDVF9BTExfQ09NTUFORCwoKT0+KE8uJHNlbGVjdEFsbCgpLCEwKSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSx0LnJlZ2lzdGVyQ29tbWFuZChPLkNPUFlfQ09NTUFORCxlPT4oVWQuY29weVRvQ2xpcGJvYXJkKHQsenIub2JqZWN0S2xhc3NFcXVhbHMoZSxDbGlwYm9hcmRFdmVudCk/ZTpudWxsKSwhMCksTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5DVVRfQ09NTUFORCxlPT4obEEoZSx0KSwhMCksTy5DT01NQU5EX1BSSU9SSVRZX0VESVRPUiksdC5yZWdpc3RlckNvbW1hbmQoTy5QQVNURV9DT01NQU5ELGU9Pntjb25zdFssbixyXT12YShlKTtpZigwPG4ubGVuZ3RoJiYhcilyZXR1cm4gdC5kaXNwYXRjaENvbW1hbmQoem0sbiksITA7aWYoTy5pc1NlbGVjdGlvbkNhcHR1cmVkSW5EZWNvcmF0b3JJbnB1dChlLnRhcmdldCkpcmV0dXJuITE7Y29uc3QgaT1PLiRnZXRTZWxlY3Rpb24oKTtyZXR1cm4gTy4kaXNSYW5nZVNlbGVjdGlvbihpKXx8Ty5ERVBSRUNBVEVEXyRpc0dyaWRTZWxlY3Rpb24oaSk/KG9BKGUsdCksITApOiExfSxPLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9O2NvbnN0IHNBPXFyO3ZhciBJYT1zQSxTQz1OcixhQT1GUCx0cj1oLGNBPVVQLEVDPUZ0LEx4PVlyLHVBPUhQLGRBPUlhLEJ2PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LmRvY3VtZW50PCJ1IiYmdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50PCJ1Ij90ci51c2VMYXlvdXRFZmZlY3Q6dHIudXNlRWZmZWN0O2Z1bmN0aW9uIER4KHQpe3JldHVybiB0LmdldEVkaXRvclN0YXRlKCkucmVhZChjQS4kY2FuU2hvd1BsYWNlaG9sZGVyQ3VycnkodC5pc0NvbXBvc2luZygpKSl9ZnVuY3Rpb24gZkEodCl7bGV0W2Usbl09dHIudXNlU3RhdGUoKCk9PkR4KHQpKTtyZXR1cm4gQnYoKCk9PntmdW5jdGlvbiByKCl7bGV0IGk9RHgodCk7bihpKX1yZXR1cm4gcigpLEVDLm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlclVwZGF0ZUxpc3RlbmVyKCgpPT57cigpfSksdC5yZWdpc3RlckVkaXRhYmxlTGlzdGVuZXIoKCk9PntyKCl9KSl9LFt0XSksZX1mdW5jdGlvbiBwQSh0LGUpe2xldFtuLHJdPXRyLnVzZVN0YXRlKCgpPT50LmdldERlY29yYXRvcnMoKSk7cmV0dXJuIEJ2KCgpPT50LnJlZ2lzdGVyRGVjb3JhdG9yTGlzdGVuZXIoaT0+e0x4LmZsdXNoU3luYygoKT0+e3IoaSl9KX0pLFt0XSksdHIudXNlRWZmZWN0KCgpPT57cih0LmdldERlY29yYXRvcnMoKSl9LFt0XSksdHIudXNlTWVtbygoKT0+e2xldCBpPVtdLG89T2JqZWN0LmtleXMobik7Zm9yKGxldCBsPTA7bDxvLmxlbmd0aDtsKyspe2xldCBzPW9bbF0sYT10ci5jcmVhdGVFbGVtZW50KGUse29uRXJyb3I6dT0+dC5fb25FcnJvcih1KX0sdHIuY3JlYXRlRWxlbWVudCh0ci5TdXNwZW5zZSx7ZmFsbGJhY2s6bnVsbH0sbltzXSkpLGM9dC5nZXRFbGVtZW50QnlLZXkocyk7YyE9PW51bGwmJmkucHVzaChMeC5jcmVhdGVQb3J0YWwoYSxjLHMpKX1yZXR1cm4gaX0sW2Usbix0XSl9ZnVuY3Rpb24gaEEodCl7QnYoKCk9PkVDLm1lcmdlUmVnaXN0ZXIoZEEucmVnaXN0ZXJSaWNoVGV4dCh0KSx1QS5yZWdpc3RlckRyYWdvblN1cHBvcnQodCkpLFt0XSl9ZnVuY3Rpb24gbUEoe2NvbnRlbnQ6dH0pe3ZhcltlXT1TQy51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7ZT1mQShlKTtsZXQgbj1hQSgpO3JldHVybiBlP3R5cGVvZiB0PT0iZnVuY3Rpb24iP3Qobik6dDpudWxsfWxDLlJpY2hUZXh0UGx1Z2luPWZ1bmN0aW9uKHtjb250ZW50RWRpdGFibGU6dCxwbGFjZWhvbGRlcjplLEVycm9yQm91bmRhcnk6bn0pe2xldFtyXT1TQy51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIG49cEEocixuKSxoQShyKSx0ci5jcmVhdGVFbGVtZW50KHRyLkZyYWdtZW50LG51bGwsdCx0ci5jcmVhdGVFbGVtZW50KG1BLHtjb250ZW50OmV9KSxuKX07Y29uc3QgZ0E9bEM7dmFyIHZBPWdBLENDPXt9LHJpPVVpLHlBPU5yLGJDPWgseEE9RnQsaWE9X2U7ZnVuY3Rpb24gX0EodCl7YkMudXNlRWZmZWN0KCgpPT54QS5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJDb21tYW5kKHJpLklOU0VSVF9PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KHJpLmluc2VydExpc3QodCwibnVtYmVyIiksITApLGlhLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSx0LnJlZ2lzdGVyQ29tbWFuZChyaS5JTlNFUlRfVU5PUkRFUkVEX0xJU1RfQ09NTUFORCwoKT0+KHJpLmluc2VydExpc3QodCwiYnVsbGV0IiksITApLGlhLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSx0LnJlZ2lzdGVyQ29tbWFuZChyaS5SRU1PVkVfTElTVF9DT01NQU5ELCgpPT4ocmkucmVtb3ZlTGlzdCh0KSwhMCksaWEuQ09NTUFORF9QUklPUklUWV9MT1cpLHQucmVnaXN0ZXJDb21tYW5kKGlhLklOU0VSVF9QQVJBR1JBUEhfQ09NTUFORCwoKT0+ISFyaS4kaGFuZGxlTGlzdEluc2VydFBhcmFncmFwaCgpLGlhLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSksW3RdKX1DQy5MaXN0UGx1Z2luPWZ1bmN0aW9uKCl7bGV0W3RdPXlBLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gYkMudXNlRWZmZWN0KCgpPT57aWYoIXQuaGFzTm9kZXMoW3JpLkxpc3ROb2RlLHJpLkxpc3RJdGVtTm9kZV0pKXRocm93IEVycm9yKCJMaXN0UGx1Z2luOiBMaXN0Tm9kZSBhbmQvb3IgTGlzdEl0ZW1Ob2RlIG5vdCByZWdpc3RlcmVkIG9uIGVkaXRvciIpfSxbdF0pLF9BKHQpLG51bGx9O2NvbnN0IHdBPUNDO3ZhciBTQT13QSxrQz17fSwkaT17fSwkQz1GdCxXcj1fZTtsZXQgRUE9bmV3IFNldChbImh0dHA6IiwiaHR0cHM6IiwibWFpbHRvOiIsInNtczoiLCJ0ZWw6Il0pO2NsYXNzIGpzIGV4dGVuZHMgV3IuRWxlbWVudE5vZGV7c3RhdGljIGdldFR5cGUoKXtyZXR1cm4ibGluayJ9c3RhdGljIGNsb25lKGUpe3JldHVybiBuZXcganMoZS5fX3VybCx7cmVsOmUuX19yZWwsdGFyZ2V0OmUuX190YXJnZXQsdGl0bGU6ZS5fX3RpdGxlfSxlLl9fa2V5KX1jb25zdHJ1Y3RvcihlLG49e30scil7c3VwZXIocik7bGV0e3RhcmdldDppPW51bGwscmVsOm89bnVsbCx0aXRsZTpsPW51bGx9PW47dGhpcy5fX3VybD1lLHRoaXMuX190YXJnZXQ9aSx0aGlzLl9fcmVsPW8sdGhpcy5fX3RpdGxlPWx9Y3JlYXRlRE9NKGUpe2xldCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gbi5ocmVmPXRoaXMuc2FuaXRpemVVcmwodGhpcy5fX3VybCksdGhpcy5fX3RhcmdldCE9PW51bGwmJihuLnRhcmdldD10aGlzLl9fdGFyZ2V0KSx0aGlzLl9fcmVsIT09bnVsbCYmKG4ucmVsPXRoaXMuX19yZWwpLHRoaXMuX190aXRsZSE9PW51bGwmJihuLnRpdGxlPXRoaXMuX190aXRsZSksJEMuYWRkQ2xhc3NOYW1lc1RvRWxlbWVudChuLGUudGhlbWUubGluayksbn11cGRhdGVET00oZSxuKXtsZXQgcj10aGlzLl9fdXJsLGk9dGhpcy5fX3RhcmdldCxvPXRoaXMuX19yZWwsbD10aGlzLl9fdGl0bGU7cmV0dXJuIHIhPT1lLl9fdXJsJiYobi5ocmVmPXIpLGkhPT1lLl9fdGFyZ2V0JiYoaT9uLnRhcmdldD1pOm4ucmVtb3ZlQXR0cmlidXRlKCJ0YXJnZXQiKSksbyE9PWUuX19yZWwmJihvP24ucmVsPW86bi5yZW1vdmVBdHRyaWJ1dGUoInJlbCIpKSxsIT09ZS5fX3RpdGxlJiYobD9uLnRpdGxlPWw6bi5yZW1vdmVBdHRyaWJ1dGUoInRpdGxlIikpLCExfXN0YXRpYyBpbXBvcnRET00oKXtyZXR1cm57YTooKT0+KHtjb252ZXJzaW9uOkNBLHByaW9yaXR5OjF9KX19c3RhdGljIGltcG9ydEpTT04oZSl7bGV0IG49cGMoZS51cmwse3JlbDplLnJlbCx0YXJnZXQ6ZS50YXJnZXQsdGl0bGU6ZS50aXRsZX0pO3JldHVybiBuLnNldEZvcm1hdChlLmZvcm1hdCksbi5zZXRJbmRlbnQoZS5pbmRlbnQpLG4uc2V0RGlyZWN0aW9uKGUuZGlyZWN0aW9uKSxufXNhbml0aXplVXJsKGUpe3RyeXtsZXQgbj1uZXcgVVJMKGUpO2lmKCFFQS5oYXMobi5wcm90b2NvbCkpcmV0dXJuImFib3V0OmJsYW5rIn1jYXRjaHt9cmV0dXJuIGV9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCkscmVsOnRoaXMuZ2V0UmVsKCksdGFyZ2V0OnRoaXMuZ2V0VGFyZ2V0KCksdGl0bGU6dGhpcy5nZXRUaXRsZSgpLHR5cGU6ImxpbmsiLHVybDp0aGlzLmdldFVSTCgpLHZlcnNpb246MX19Z2V0VVJMKCl7cmV0dXJuIHRoaXMuZ2V0TGF0ZXN0KCkuX191cmx9c2V0VVJMKGUpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3VybD1lfWdldFRhcmdldCgpe3JldHVybiB0aGlzLmdldExhdGVzdCgpLl9fdGFyZ2V0fXNldFRhcmdldChlKXt0aGlzLmdldFdyaXRhYmxlKCkuX190YXJnZXQ9ZX1nZXRSZWwoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3JlbH1zZXRSZWwoZSl7dGhpcy5nZXRXcml0YWJsZSgpLl9fcmVsPWV9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5nZXRMYXRlc3QoKS5fX3RpdGxlfXNldFRpdGxlKGUpe3RoaXMuZ2V0V3JpdGFibGUoKS5fX3RpdGxlPWV9aW5zZXJ0TmV3QWZ0ZXIoZSxuPSEwKXtyZXR1cm4gZT10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcihlLG4pLFdyLiRpc0VsZW1lbnROb2RlKGUpPyhuPXBjKHRoaXMuX191cmwse3JlbDp0aGlzLl9fcmVsLHRhcmdldDp0aGlzLl9fdGFyZ2V0LHRpdGxlOnRoaXMuX190aXRsZX0pLGUuYXBwZW5kKG4pLG4pOm51bGx9Y2FuSW5zZXJ0VGV4dEJlZm9yZSgpe3JldHVybiExfWNhbkluc2VydFRleHRBZnRlcigpe3JldHVybiExfWNhbkJlRW1wdHkoKXtyZXR1cm4hMX1pc0lubGluZSgpe3JldHVybiEwfWV4dHJhY3RXaXRoQ2hpbGQoZSxuKXtpZighV3IuJGlzUmFuZ2VTZWxlY3Rpb24obikpcmV0dXJuITE7ZT1uLmFuY2hvci5nZXROb2RlKCk7bGV0IHI9bi5mb2N1cy5nZXROb2RlKCk7cmV0dXJuIHRoaXMuaXNQYXJlbnRPZihlKSYmdGhpcy5pc1BhcmVudE9mKHIpJiYwPG4uZ2V0VGV4dENvbnRlbnQoKS5sZW5ndGh9fWZ1bmN0aW9uIENBKHQpe2xldCBlPW51bGw7aWYoJEMuaXNIVE1MQW5jaG9yRWxlbWVudCh0KSl7bGV0IG49dC50ZXh0Q29udGVudDtuIT09bnVsbCYmbiE9PSIiJiYoZT1wYyh0LmdldEF0dHJpYnV0ZSgiaHJlZiIpfHwiIix7cmVsOnQuZ2V0QXR0cmlidXRlKCJyZWwiKSx0YXJnZXQ6dC5nZXRBdHRyaWJ1dGUoInRhcmdldCIpLHRpdGxlOnQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpfSkpfXJldHVybntub2RlOmV9fWZ1bmN0aW9uIHBjKHQsZSl7cmV0dXJuIFdyLiRhcHBseU5vZGVSZXBsYWNlbWVudChuZXcganModCxlKSl9ZnVuY3Rpb24gT28odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBqc31jbGFzcyBXYyBleHRlbmRzIGpze3N0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImF1dG9saW5rIn1zdGF0aWMgY2xvbmUoZSl7cmV0dXJuIG5ldyBXYyhlLl9fdXJsLHtyZWw6ZS5fX3JlbCx0YXJnZXQ6ZS5fX3RhcmdldCx0aXRsZTplLl9fdGl0bGV9LGUuX19rZXkpfXN0YXRpYyBpbXBvcnRKU09OKGUpe2xldCBuPUZtKGUudXJsLHtyZWw6ZS5yZWwsdGFyZ2V0OmUudGFyZ2V0LHRpdGxlOmUudGl0bGV9KTtyZXR1cm4gbi5zZXRGb3JtYXQoZS5mb3JtYXQpLG4uc2V0SW5kZW50KGUuaW5kZW50KSxuLnNldERpcmVjdGlvbihlLmRpcmVjdGlvbiksbn1zdGF0aWMgaW1wb3J0RE9NKCl7cmV0dXJuIG51bGx9ZXhwb3J0SlNPTigpe3JldHVybnsuLi5zdXBlci5leHBvcnRKU09OKCksdHlwZToiYXV0b2xpbmsiLHZlcnNpb246MX19aW5zZXJ0TmV3QWZ0ZXIoZSxuPSEwKXtyZXR1cm4gZT10aGlzLmdldFBhcmVudE9yVGhyb3coKS5pbnNlcnROZXdBZnRlcihlLG4pLFdyLiRpc0VsZW1lbnROb2RlKGUpPyhuPUZtKHRoaXMuX191cmwse3JlbDp0aGlzLl9yZWwsdGFyZ2V0OnRoaXMuX190YXJnZXQsdGl0bGU6dGhpcy5fX3RpdGxlfSksZS5hcHBlbmQobiksbik6bnVsbH19ZnVuY3Rpb24gRm0odCxlKXtyZXR1cm4gV3IuJGFwcGx5Tm9kZVJlcGxhY2VtZW50KG5ldyBXYyh0LGUpKX1sZXQgYkE9V3IuY3JlYXRlQ29tbWFuZCgiVE9HR0xFX0xJTktfQ09NTUFORCIpO2Z1bmN0aW9uIGtBKHQsZSl7Zm9yKDt0IT09bnVsbCYmKHQ9dC5nZXRQYXJlbnQoKSkhPT1udWxsJiYhZSh0KTspO3JldHVybiB0fSRpLiRjcmVhdGVBdXRvTGlua05vZGU9Rm07JGkuJGNyZWF0ZUxpbmtOb2RlPXBjOyRpLiRpc0F1dG9MaW5rTm9kZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFdjfTskaS4kaXNMaW5rTm9kZT1PbzskaS5BdXRvTGlua05vZGU9V2M7JGkuTGlua05vZGU9anM7JGkuVE9HR0xFX0xJTktfQ09NTUFORD1iQTskaS50b2dnbGVMaW5rPWZ1bmN0aW9uKHQsZT17fSl7bGV0e3RhcmdldDpuLHRpdGxlOnJ9PWUsaT1lLnJlbD09PXZvaWQgMD8ibm9yZWZlcnJlciI6ZS5yZWw7aWYoZT1Xci4kZ2V0U2VsZWN0aW9uKCksV3IuJGlzUmFuZ2VTZWxlY3Rpb24oZSkpaWYoZT1lLmV4dHJhY3QoKSx0PT09bnVsbCllLmZvckVhY2gobD0+e2lmKGw9bC5nZXRQYXJlbnQoKSxPbyhsKSl7bGV0IHM9bC5nZXRDaGlsZHJlbigpO2ZvcihsZXQgYT0wO2E8cy5sZW5ndGg7YSsrKWwuaW5zZXJ0QmVmb3JlKHNbYV0pO2wucmVtb3ZlKCl9fSk7ZWxzZXtpZihlLmxlbmd0aD09PTEpe3ZhciBvPWVbMF07aWYobz1PbyhvKT9vOmtBKG8sT28pLG8hPT1udWxsKXtvLnNldFVSTCh0KSxuIT09dm9pZCAwJiZvLnNldFRhcmdldChuKSxpIT09bnVsbCYmby5zZXRSZWwoaSksciE9PXZvaWQgMCYmby5zZXRUaXRsZShyKTtyZXR1cm59fWxldCBsPW51bGwscz1udWxsO2UuZm9yRWFjaChhPT57dmFyIGM9YS5nZXRQYXJlbnQoKTtpZihjIT09cyYmYyE9PW51bGwmJighV3IuJGlzRWxlbWVudE5vZGUoYSl8fGEuaXNJbmxpbmUoKSkpaWYoT28oYykpcz1jLGMuc2V0VVJMKHQpLG4hPT12b2lkIDAmJmMuc2V0VGFyZ2V0KG4pLGkhPT1udWxsJiZzLnNldFJlbChpKSxyIT09dm9pZCAwJiZzLnNldFRpdGxlKHIpO2Vsc2UgaWYoYy5pcyhsKXx8KGw9YyxzPXBjKHQse3JlbDppLHRhcmdldDpufSksT28oYyk/YS5nZXRQcmV2aW91c1NpYmxpbmcoKT09PW51bGw/Yy5pbnNlcnRCZWZvcmUocyk6Yy5pbnNlcnRBZnRlcihzKTphLmluc2VydEJlZm9yZShzKSksT28oYSkpe2lmKCFhLmlzKHMpKXtpZihzIT09bnVsbCl7Yz1hLmdldENoaWxkcmVuKCk7Zm9yKGxldCB1PTA7dTxjLmxlbmd0aDt1Kyspcy5hcHBlbmQoY1t1XSl9YS5yZW1vdmUoKX19ZWxzZSBzIT09bnVsbCYmcy5hcHBlbmQoYSl9KX19O2NvbnN0ICRBPSRpO3ZhciB0bD0kQSxDbD10bCxUQT1OcixOQT1GdCxibD1fZSxSQT1oO2tDLkxpbmtQbHVnaW49ZnVuY3Rpb24oe3ZhbGlkYXRlVXJsOnR9KXtsZXRbZV09VEEudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBSQS51c2VFZmZlY3QoKCk9PntpZighZS5oYXNOb2RlcyhbQ2wuTGlua05vZGVdKSl0aHJvdyBFcnJvcigiTGlua1BsdWdpbjogTGlua05vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuIE5BLm1lcmdlUmVnaXN0ZXIoZS5yZWdpc3RlckNvbW1hbmQoQ2wuVE9HR0xFX0xJTktfQ09NTUFORCxuPT57aWYobj09PW51bGwpcmV0dXJuIENsLnRvZ2dsZUxpbmsobiksITA7aWYodHlwZW9mIG49PSJzdHJpbmciKXJldHVybiB0PT09dm9pZCAwfHx0KG4pPyhDbC50b2dnbGVMaW5rKG4pLCEwKTohMTtsZXR7dXJsOnIsdGFyZ2V0OmkscmVsOm8sdGl0bGU6bH09bjtyZXR1cm4gQ2wudG9nZ2xlTGluayhyLHtyZWw6byx0YXJnZXQ6aSx0aXRsZTpsfSksITB9LGJsLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSx0IT09dm9pZCAwP2UucmVnaXN0ZXJDb21tYW5kKGJsLlBBU1RFX0NPTU1BTkQsbj0+e2xldCByPWJsLiRnZXRTZWxlY3Rpb24oKTtpZighYmwuJGlzUmFuZ2VTZWxlY3Rpb24ocil8fHIuaXNDb2xsYXBzZWQoKXx8IShuIGluc3RhbmNlb2YgQ2xpcGJvYXJkRXZlbnQpfHxuLmNsaXBib2FyZERhdGE9PW51bGwpcmV0dXJuITE7bGV0IGk9bi5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQiKTtyZXR1cm4gdChpKT9yLmdldE5vZGVzKCkuc29tZShvPT5ibC4kaXNFbGVtZW50Tm9kZShvKSk/ITE6KGUuZGlzcGF0Y2hDb21tYW5kKENsLlRPR0dMRV9MSU5LX0NPTU1BTkQsaSksbi5wcmV2ZW50RGVmYXVsdCgpLCEwKTohMX0sYmwuQ09NTUFORF9QUklPUklUWV9MT1cpOigpPT57fSl9LFtlLHRdKSxudWxsfTtjb25zdCBPQT1rQzt2YXIgUEE9T0E7ZnVuY3Rpb24gQUEoe2FyaWFBY3RpdmVEZXNjZW5kYW50OnQsYXJpYUF1dG9Db21wbGV0ZTplLGFyaWFDb250cm9sczpuLGFyaWFEZXNjcmliZWRCeTpyLGFyaWFFeHBhbmRlZDppLGFyaWFMYWJlbDpvLGFyaWFMYWJlbGxlZEJ5OmwsYXJpYU11bHRpbGluZTpzLGFyaWFPd25zOmEsYXJpYVJlcXVpcmVkOmMsYXV0b0NhcGl0YWxpemU6dSxjbGFzc05hbWU6ZCxpZDpmLHJvbGU6cD0idGV4dGJveCIsc3BlbGxDaGVjazpnPSEwLHN0eWxlOm0sdGFiSW5kZXg6dywiZGF0YS10ZXN0aWQiOnYsLi4ueH0pe2NvbnN0W19dPU5yLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKSxbUyxFXT1oLnVzZVN0YXRlKCExKSxrPWgudXNlQ2FsbGJhY2soQz0+e3ZhciBBO18uc2V0Um9vdEVsZW1lbnQoQyk7Y29uc3QgTj0oQT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmFsLXVpIikpPT1udWxsP3ZvaWQgMDpBLnNoYWRvd1Jvb3Q7aWYoTiYmImdldFNlbGVjdGlvbiJpbiBOKXtfLl93aW5kb3c9TjtyZXR1cm59fSxbX10pO3JldHVybiBoLnVzZUxheW91dEVmZmVjdCgoKT0+KEUoXy5pc0VkaXRhYmxlKCkpLF8ucmVnaXN0ZXJFZGl0YWJsZUxpc3RlbmVyKEM9PntFKEMpfSkpLFtfXSkseS5qc3goImRpdiIsey4uLngsImFyaWEtYWN0aXZlZGVzY2VuZGFudCI6Uz90OnZvaWQgMCwiYXJpYS1hdXRvY29tcGxldGUiOlM/ZToibm9uZSIsImFyaWEtY29udHJvbHMiOlM/bjp2b2lkIDAsImFyaWEtZGVzY3JpYmVkYnkiOnIsImFyaWEtZXhwYW5kZWQiOlMmJnA9PT0iY29tYm9ib3giPyEhaTp2b2lkIDAsImFyaWEtbGFiZWwiOm8sImFyaWEtbGFiZWxsZWRieSI6bCwiYXJpYS1tdWx0aWxpbmUiOnMsImFyaWEtb3ducyI6Uz9hOnZvaWQgMCwiYXJpYS1yZWFkb25seSI6Uz92b2lkIDA6ITAsImFyaWEtcmVxdWlyZWQiOmMsYXV0b0NhcGl0YWxpemU6dSxjbGFzc05hbWU6ZCxjb250ZW50RWRpdGFibGU6UywiZGF0YS10ZXN0aWQiOnYsaWQ6ZixyZWY6ayxyb2xlOnAsc3BlbGxDaGVjazpnLHN0eWxlOm0sdGFiSW5kZXg6d30pfWZ1bmN0aW9uIE1BKHtjbGFzc05hbWU6dH0pe3JldHVybiB5LmpzeChBQSx7Y2xhc3NOYW1lOnR9KX1jbGFzcyB6cyBleHRlbmRzIF9lLkRlY29yYXRvck5vZGV7Y29uc3RydWN0b3IoZSxuKXtzdXBlcihuKSx0aGlzLl9fc3JjPWUuc3JjLHRoaXMuX19hbHRUZXh0PWUuYWx0VGV4dCx0aGlzLl9fd2lkdGg9ZS53aWR0aCx0aGlzLl9faGVpZ2h0PWUuaGVpZ2h0fXN0YXRpYyBnZXRUeXBlKCl7cmV0dXJuImltYWdlIn1zdGF0aWMgY2xvbmUoZSl7cmV0dXJuIG5ldyB6cyh7c3JjOmUuX19zcmMsYWx0VGV4dDplLl9fYWx0VGV4dCx3aWR0aDplLl9fd2lkdGgsaGVpZ2h0OmUuX19oZWlnaHR9KX1leHBvcnRKU09OKCl7cmV0dXJue2FsdFRleHQ6dGhpcy5fX2FsdFRleHQsaGVpZ2h0OnRoaXMuX193aWR0aCxzcmM6dGhpcy5fX3NyYyx0eXBlOiJpbWFnZSIsdmVyc2lvbjoxLHdpZHRoOnRoaXMuX193aWR0aH19c3RhdGljIGltcG9ydEpTT04oZSl7cmV0dXJuIFRDKGUpfWNyZWF0ZURPTSgpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKX11cGRhdGVET00oKXtyZXR1cm4hMX1kZWNvcmF0ZSgpe3JldHVybiB5LmpzeChMQSx7c3JjOnRoaXMuX19zcmMsYWx0VGV4dDp0aGlzLl9fYWx0VGV4dCxlbXB0eTp0aGlzLl9fZW1wdHksaGVpZ2h0OnRoaXMuX19oZWlnaHQsbm9kZUtleTp0aGlzLmdldEtleSgpfSl9fWZ1bmN0aW9uIExBKHQpe3JldHVybiB5LmpzeCgiaW1nIix7c3JjOnQuc3JjfSl9ZnVuY3Rpb24gVEModCl7cmV0dXJuIG5ldyB6cyh0KX1mdW5jdGlvbiBEQSgpe2NvbnN0W3RdPU5yLnVzZUxleGljYWxDb21wb3NlckNvbnRleHQoKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pnt0LmZvY3VzKCl9LFt0XSksbnVsbH1jb25zdCBOQz1fZS5jcmVhdGVDb21tYW5kKCJJTlNFUlRfSU1BR0VfQ09NTUFORCIpO2Z1bmN0aW9uIElBKCl7Y29uc3RbdF09TnIudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2lmKCF0Lmhhc05vZGVzKFt6c10pKXRocm93IG5ldyBFcnJvcigiSW1hZ2VzUGx1Z2luOiBJbWFnZU5vZGUgbm90IHJlZ2lzdGVyZWQgb24gZWRpdG9yIik7cmV0dXJuIEZ0Lm1lcmdlUmVnaXN0ZXIodC5yZWdpc3RlckNvbW1hbmQoTkMsZT0+e2NvbnN0IG49VEMoZSk7cmV0dXJuIF9lLiRpbnNlcnROb2Rlcyhbbl0pLF9lLiRpc1Jvb3RPclNoYWRvd1Jvb3Qobi5nZXRQYXJlbnRPclRocm93KCkpJiZGdC4kd3JhcE5vZGVJbkVsZW1lbnQobixfZS4kY3JlYXRlUGFyYWdyYXBoTm9kZSkuc2VsZWN0RW5kKCksITB9LF9lLkNPTU1BTkRfUFJJT1JJVFlfRURJVE9SKSl9LFt0XSksbnVsbH1jb25zdCBqQT0oe2NsYXNzTmFtZTp0fSk9PnkuanN4cygic3ZnIix7aGVpZ2h0OjEyLHdpZHRoOjEyLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZTp0LGNoaWxkcmVuOlt5LmpzeCgicGF0aCIse2Q6Ik02IDRoOGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnoifSkseS5qc3goInBhdGgiLHtkOiJNNiAxMmg5YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2eiJ9KV19KSx6QT1qQSxGQT0oe2NsYXNzTmFtZTp0fSk9PnkuanN4cygic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgOSAxMCIsZmlsbDoibm9uZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6dCxjaGlsZHJlbjpbeS5qc3hzKCJnIix7Y2xpcFBhdGg6InVybCgjY2xpcDBfMTIyNV8xNjM4KSIsY2hpbGRyZW46W3kuanN4KCJyZWN0Iix7eToiMC41Iix3aWR0aDoiOSIsaGVpZ2h0OiI5In0pLHkuanN4KCJwYXRoIix7ZDoiTTAgN0w4LjUgNSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IifSkseS5qc3goImNpcmNsZSIse2N4OiIzIixjeToiMy41IixyOiIxIixmaWxsOiJjdXJyZW50Q29sb3IifSldfSkseS5qc3goInJlY3QiLHt4OiIwLjUiLHk6IjEiLHdpZHRoOiI4IixoZWlnaHQ6IjgiLHN0cm9rZToiY3VycmVudENvbG9yIn0pLHkuanN4KCJkZWZzIix7Y2hpbGRyZW46eS5qc3goImNsaXBQYXRoIix7aWQ6ImNsaXAwXzEyMjVfMTYzOCIsY2hpbGRyZW46eS5qc3goInJlY3QiLHt5OiIwLjUiLHdpZHRoOiI5IixoZWlnaHQ6IjkiLGZpbGw6IndoaXRlIn0pfSl9KV19KSxCQT1GQSxVQT0oe2NsYXNzTmFtZTp0fSk9PnkuanN4cygic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOnQsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOlt5LmpzeCgibGluZSIse3gxOiIxOSIseTE6IjQiLHgyOiIxMCIseTI6IjQifSkseS5qc3goImxpbmUiLHt4MToiMTQiLHkxOiIyMCIseDI6IjUiLHkyOiIyMCJ9KSx5LmpzeCgibGluZSIse3gxOiIxNSIseTE6IjQiLHgyOiI5Iix5MjoiMjAifSldfSksV0E9VUEsSEE9KHtjbGFzc05hbWU6dH0pPT55LmpzeCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix2aWV3Qm94OiIwIDAgMjQgMjQiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMSIsY2xhc3NOYW1lOnQsd2lkdGg6MTIsaGVpZ2h0OjEyLGNoaWxkcmVuOnkuanN4KCJwYXRoIix7ZmlsbFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0xMywxNSBMMTMsMjEgQzEzLDIxLjU1MjI4NDcgMTIuNTUyMjg0NywyMiAxMiwyMiBDMTEuNDQ3NzE1MywyMiAxMSwyMS41NTIyODQ3IDExLDIxIEwxMSwxNSBMMTMsMTUgWiBNMywxMyBDMi40NDc3MTUyNSwxMyAyLDEyLjU1MjI4NDcgMiwxMiBDMiwxMS40NDc3MTUzIDIuNDQ3NzE1MjUsMTEgMywxMSBMMjEsMTEgQzIxLjU1MjI4NDcsMTEgMjIsMTEuNDQ3NzE1MyAyMiwxMiBDMjIsMTIuNTUyMjg0NyAyMS41NTIyODQ3LDEzIDIxLDEzIEwzLDEzIFogTTE5LDIgQzE5LjU1MjI4NDcsMiAyMCwyLjQ0NzcxNTI1IDIwLDMgQzIwLDMuNTUyMjg0NzUgMTkuNTUyMjg0Nyw0IDE5LDQgTDEzLDQgTDEzLDkgTDExLDkgTDExLDQgTDUsNCBDNC40NDc3MTUyNSw0IDQsMy41NTIyODQ3NSA0LDMgQzQsMi40NDc3MTUyNSA0LjQ0NzcxNTI1LDIgNSwyIEwxOSwyIFoifSl9KSxWQT1IQSxLQT0oe3ZhcmlhbnQ6dD0icHJpbWFyeSIsb25DbGljazplLGNoaWxkcmVuOm4saWNvbjpyLGRpc2FibGVkOmk9ITF9KT0+eS5qc3goImJ1dHRvbiIse2Rpc2FibGVkOmksY2xhc3NOYW1lOkZuKCJmb250LXNhbnMgZm9udC1bMTJweF0gdHJhY2tpbmctWzAuMDRlbV0gcHktMSBweC0yIHJvdW5kZWQgd2hpdGVzcGFjZS1ub3dyYXAgZ3JvdXAgcmVsYXRpdmUgdGV4dC1wcmltYXJ5Iix7ImZvbnQtYm9sZCI6dD09PSJwcmltYXJ5IiwidGV4dC1maWxsIGRpc2FibGVkOmJnLWZpbGwgZGlzYWJsZWQ6dGV4dC1iYWNrZ3JvdW5kIjp0PT09InByaW1hcnkiLCJib3JkZXIgYm9yZGVyLXByaW1hcnkgdGV4dC1wcmltYXJ5IGhvdmVyOmJvcmRlci1oaWdobGlnaHQgaG92ZXI6dGV4dC1oaWdobGlnaHQgZGlzYWJsZWQ6YmctZmlsbCBkaXNhYmxlZDp0ZXh0LWJhY2tncm91bmQiOnQhPT0icHJpbWFyeSJ9KSxvbkNsaWNrOmUsY2hpbGRyZW46eS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiIsY2hpbGRyZW46W3ImJnIsbl19KX0pLFBvPUtBLFpBPSh7Y2xhc3NOYW1lOnR9KT0+eS5qc3hzKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAxMiAxMiIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjbGFzc05hbWU6dCxjaGlsZHJlbjpbeS5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0zLjcwNzMzIDEuMDAwMTVMOC43Nzg0IDYuMDcxMjFMOC4wNzEyOSA2Ljc3ODMyTDMuMDAwMjIgMS43MDcyNUwzLjcwNzMzIDEuMDAwMTVaIixmaWxsOiJjdXJyZW50Q29sb3IifSkseS5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik0zLjAwMDE1IDEwLjQ3MDlMOC4wNzEyMSA1LjM5OTgzTDguNzc4MzIgNi4xMDY5M0wzLjcwNzI1IDExLjE3OEwzLjAwMDE1IDEwLjQ3MDlaIixmaWxsOiJjdXJyZW50Q29sb3IifSldfSksR0E9WkEsUkM9aWUuY3JlYXRlQ29udGV4dCh7Z2V0IGFwaSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IHNlc3Npb24oKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCB0aGVtZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IHNldFRoZW1lKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfSxnZXQgZWRpdE1vZGUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCBzZXRFZGl0TW9kZSgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IGhpZ2hsaWdodCgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IHNldEhpZ2hsaWdodCgpe3Rocm93IEVycm9yKCJWYWxPdmVybGF5Q29udGV4dCBub3QgZm91bmQuIEVuc3VyZSBjb21wb25lbnRzIGFyZSB3cmFwcGVkIGJ5IFZhbE92ZXJsYXlQcm92aWRlciEiKX0sZ2V0IHNldFdpbmRvd1NpemUoKXt0aHJvdyBFcnJvcigiVmFsT3ZlcmxheUNvbnRleHQgbm90IGZvdW5kLiBFbnN1cmUgY29tcG9uZW50cyBhcmUgd3JhcHBlZCBieSBWYWxPdmVybGF5UHJvdmlkZXIhIil9LGdldCB3aW5kb3dTaXplKCl7dGhyb3cgRXJyb3IoIlZhbE92ZXJsYXlDb250ZXh0IG5vdCBmb3VuZC4gRW5zdXJlIGNvbXBvbmVudHMgYXJlIHdyYXBwZWQgYnkgVmFsT3ZlcmxheVByb3ZpZGVyISIpfX0pO2Z1bmN0aW9uIEhmKCl7cmV0dXJuIGllLnVzZUNvbnRleHQoUkMpfWNvbnN0IFlBPSh7b3B0aW9uczp0LG9uQ2hhbmdlOmUsbGFiZWw6bixpY29uOnJ9KT0+e2NvbnN0W2ksb109aC51c2VTdGF0ZSghMSksbD1oLnVzZVJlZihudWxsKSxbcyxhXT1oLnVzZVN0YXRlKDApLHt3aW5kb3dTaXplOmN9PUhmKCksdT0oKT0+e28oIWkpfSxkPShmLHApPT57YShwKSxlKGYpLG8oITEpfTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBmPXA9PntpJiZsLmN1cnJlbnQmJiFsLmN1cnJlbnQuY29udGFpbnMocC50YXJnZXQpJiZvKCExKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmKSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixmKX19LFtdKSx5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LVsxMnB4XSIscmVmOmwsY2hpbGRyZW46eS5qc3goUG8se29uQ2xpY2s6Zj0+e2YucHJldmVudERlZmF1bHQoKSx1KCl9LGljb246eS5qc3goR0Ese2NsYXNzTmFtZTpgcm90YXRlLVstOTBkZWddIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTE1MCBlYXNlLWluLW91dCAke2k/IiI6InJvdGF0ZS1bOTBkZWddIn1gfSksY2hpbGRyZW46eS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIixjaGlsZHJlbjpbeS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtcm93IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMSIsY2hpbGRyZW46W24sciYmcl19KSxpJiZ5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSAtdG9wLVs0cHhdIG92ZXJmbG93LXNjcm9sbCBzaGFkb3ctbGcgLWxlZnQtMiB0ZXh0LXByaW1hcnkgdy1maXQgei1vdmVybGF5IixzdHlsZTp7bWF4SGVpZ2h0OmM9PW51bGw/dm9pZCAwOmMuaW5uZXJIZWlnaHR9LGNoaWxkcmVuOnkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgIixjaGlsZHJlbjp0PT1udWxsP3ZvaWQgMDp0Lm1hcCgoZixwKT0+eS5qc3goImJ1dHRvbiIse29uQ2xpY2s6Zz0+e2cucHJldmVudERlZmF1bHQoKSxkKGYscCl9LGNsYXNzTmFtZTpgdGV4dC1sZWZ0IHB4LTIgcHktMSBob3Zlcjp0ZXh0LWhpZ2hsaWdodCAgJHtwPT09cyYmImZvbnQtYm9sZCB0cnVuY2F0ZSJ9YCxjaGlsZHJlbjpmfSxmKSl9KX0pXX0pfSl9KX0sWEE9WUEsSkE9bmV3IFRleHRFbmNvZGVyO2Z1bmN0aW9uIE9DKHQpe3JldHVybiBuZXcgUHJvbWlzZSgoZSxuKT0+e3ZhciBvO2NvbnN0IHI9KG89dC5jdXJyZW50VGFyZ2V0LmZpbGVzKT09bnVsbD92b2lkIDA6b1swXSxpPW5ldyBGaWxlUmVhZGVyO2kuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsKCk9Pntjb25zdCBsPWkucmVzdWx0O2lmKHR5cGVvZiBsPT0ic3RyaW5nIil7Y29uc3Qgcz1uZXcgSW1hZ2U7cy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGE9cm4uZ2V0U0hBMjU2SGFzaChKQS5lbmNvZGUobCkpO2lmKHMubmF0dXJhbFdpZHRoJiZzLm5hdHVyYWxIZWlnaHQpe2NvbnN0IGM9RmYobCk7ZSh7c3JjOmwsd2lkdGg6cy5uYXR1cmFsV2lkdGgsaGVpZ2h0OnMubmF0dXJhbEhlaWdodCxmaWxlbmFtZTpyPT1udWxsP3ZvaWQgMDpyLm5hbWUsc2hhMjU2OmEsbWltZVR5cGU6YyxmaWxlRXh0OmMmJkJmKGMpfSl9ZWxzZSBlKHtzcmM6bCxmaWxlbmFtZTpyPT1udWxsP3ZvaWQgMDpyLm5hbWUsc2hhMjU2OmF9KX0pLHMuc3JjPWx9ZWxzZSBuKGw/e21lc3NhZ2U6IlVuZXhwZWN0ZWQgaW1hZ2UgcmVzdWx0IHR5cGUiLHJlc3VsdDpsfTp7bWVzc2FnZToiRW1wdHkgcmVzdWx0In0pfSksciYmaS5yZWFkQXNEYXRhVVJMKHIpfSl9ZnVuY3Rpb24gUEModCl7Y29uc3QgZT10LmFuY2hvcixuPXQuZm9jdXMscj10LmFuY2hvci5nZXROb2RlKCksaT10LmZvY3VzLmdldE5vZGUoKTtyZXR1cm4gcj09PWk/cjp0LmlzQmFja3dhcmQoKT91by4kaXNBdE5vZGVFbmQobik/cjppOnVvLiRpc0F0Tm9kZUVuZChlKT9yOml9ZnVuY3Rpb24gUUEoKXtjb25zdFt0XT1Oci51c2VMZXhpY2FsQ29tcG9zZXJDb250ZXh0KCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT5GdC5tZXJnZVJlZ2lzdGVyKHQucmVnaXN0ZXJDb21tYW5kKF9lLkNMSUNLX0NPTU1BTkQsZT0+e2NvbnN0IG49X2UuJGdldFNlbGVjdGlvbigpO2lmKF9lLiRpc1JhbmdlU2VsZWN0aW9uKG4pKXtjb25zdCByPVBDKG4pLGk9RnQuJGZpbmRNYXRjaGluZ1BhcmVudChyLHRsLiRpc0xpbmtOb2RlKTtpZih0bC4kaXNMaW5rTm9kZShpKSYmKGUubWV0YUtleXx8ZS5jdHJsS2V5KSlyZXR1cm4gd2luZG93Lm9wZW4oaS5nZXRVUkwoKSwiX2JsYW5rIiksITB9cmV0dXJuITF9LF9lLkNPTU1BTkRfUFJJT1JJVFlfTE9XKSksW10pLG51bGx9dmFyIEFDPXtleHBvcnRzOnt9fSxxQT0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQiLGU0PXFBLHQ0PWU0O2Z1bmN0aW9uIE1DKCl7fWZ1bmN0aW9uIExDKCl7fUxDLnJlc2V0V2FybmluZ0NhY2hlPU1DO3ZhciBuND1mdW5jdGlvbigpe2Z1bmN0aW9uIHQocixpLG8sbCxzLGEpe2lmKGEhPT10NCl7dmFyIGM9bmV3IEVycm9yKCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7dGhyb3cgYy5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIixjfX10LmlzUmVxdWlyZWQ9dDtmdW5jdGlvbiBlKCl7cmV0dXJuIHR9dmFyIG49e2FycmF5OnQsYmlnaW50OnQsYm9vbDp0LGZ1bmM6dCxudW1iZXI6dCxvYmplY3Q6dCxzdHJpbmc6dCxzeW1ib2w6dCxhbnk6dCxhcnJheU9mOmUsZWxlbWVudDp0LGVsZW1lbnRUeXBlOnQsaW5zdGFuY2VPZjplLG5vZGU6dCxvYmplY3RPZjplLG9uZU9mOmUsb25lT2ZUeXBlOmUsc2hhcGU6ZSxleGFjdDplLGNoZWNrUHJvcFR5cGVzOkxDLHJlc2V0V2FybmluZ0NhY2hlOk1DfTtyZXR1cm4gbi5Qcm9wVHlwZXM9bixufTtBQy5leHBvcnRzPW40KCk7dmFyIHI0PUFDLmV4cG9ydHM7Y29uc3QgaXI9T2MocjQpO2Z1bmN0aW9uIEJtKCl7cmV0dXJuIEJtPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LEJtLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBpNCh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49bzQodCxlKSxyLGk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG89T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXI9b1tpXSwhKGUuaW5kZXhPZihyKT49MCkmJk9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYobltyXT10W3JdKX1yZXR1cm4gbn1mdW5jdGlvbiBvNCh0LGUpe2lmKHQ9PW51bGwpcmV0dXJue307dmFyIG49e30scj1PYmplY3Qua2V5cyh0KSxpLG87Zm9yKG89MDtvPHIubGVuZ3RoO28rKylpPXJbb10sIShlLmluZGV4T2YoaSk+PTApJiYobltpXT10W2ldKTtyZXR1cm4gbn12YXIgVXY9aC5mb3J3YXJkUmVmKGZ1bmN0aW9uKHQsZSl7dmFyIG49dC5jb2xvcixyPW49PT12b2lkIDA/ImN1cnJlbnRDb2xvciI6bixpPXQuc2l6ZSxvPWk9PT12b2lkIDA/MjQ6aSxsPWk0KHQsWyJjb2xvciIsInNpemUiXSk7cmV0dXJuIGllLmNyZWF0ZUVsZW1lbnQoInN2ZyIsQm0oe3JlZjplLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6byxoZWlnaHQ6byx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZTpyLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIn0sbCksaWUuY3JlYXRlRWxlbWVudCgicG9seWxpbmUiLHtwb2ludHM6IjIwIDYgOSAxNyA0IDEyIn0pKX0pO1V2LnByb3BUeXBlcz17Y29sb3I6aXIuc3RyaW5nLHNpemU6aXIub25lT2ZUeXBlKFtpci5zdHJpbmcsaXIubnVtYmVyXSl9O1V2LmRpc3BsYXlOYW1lPSJDaGVjayI7Y29uc3QgbDQ9VXY7ZnVuY3Rpb24gVW0oKXtyZXR1cm4gVW09T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sVW0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHM0KHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgbj1hNCh0LGUpLHIsaTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspcj1vW2ldLCEoZS5pbmRleE9mKHIpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQscikmJihuW3JdPXRbcl0pfXJldHVybiBufWZ1bmN0aW9uIGE0KHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgbj17fSxyPU9iamVjdC5rZXlzKHQpLGksbztmb3Iobz0wO288ci5sZW5ndGg7bysrKWk9cltvXSwhKGUuaW5kZXhPZihpKT49MCkmJihuW2ldPXRbaV0pO3JldHVybiBufXZhciBXdj1oLmZvcndhcmRSZWYoZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbG9yLHI9bj09PXZvaWQgMD8iY3VycmVudENvbG9yIjpuLGk9dC5zaXplLG89aT09PXZvaWQgMD8yNDppLGw9czQodCxbImNvbG9yIiwic2l6ZSJdKTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudCgic3ZnIixVbSh7cmVmOmUseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpvLGhlaWdodDpvLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOnIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxsKSxpZS5jcmVhdGVFbGVtZW50KCJwYXRoIix7ZDoiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzEifSksaWUuY3JlYXRlRWxlbWVudCgicGF0aCIse2Q6Ik0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MSJ9KSl9KTtXdi5wcm9wVHlwZXM9e2NvbG9yOmlyLnN0cmluZyxzaXplOmlyLm9uZU9mVHlwZShbaXIuc3RyaW5nLGlyLm51bWJlcl0pfTtXdi5kaXNwbGF5TmFtZT0iTGluayI7Y29uc3QgYzQ9V3Y7ZnVuY3Rpb24gV20oKXtyZXR1cm4gV209T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYodFtyXT1uW3JdKX1yZXR1cm4gdH0sV20uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHU0KHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgbj1kNCh0LGUpLHIsaTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspcj1vW2ldLCEoZS5pbmRleE9mKHIpPj0wKSYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQscikmJihuW3JdPXRbcl0pfXJldHVybiBufWZ1bmN0aW9uIGQ0KHQsZSl7aWYodD09bnVsbClyZXR1cm57fTt2YXIgbj17fSxyPU9iamVjdC5rZXlzKHQpLGksbztmb3Iobz0wO288ci5sZW5ndGg7bysrKWk9cltvXSwhKGUuaW5kZXhPZihpKT49MCkmJihuW2ldPXRbaV0pO3JldHVybiBufXZhciBIdj1oLmZvcndhcmRSZWYoZnVuY3Rpb24odCxlKXt2YXIgbj10LmNvbG9yLHI9bj09PXZvaWQgMD8iY3VycmVudENvbG9yIjpuLGk9dC5zaXplLG89aT09PXZvaWQgMD8yNDppLGw9dTQodCxbImNvbG9yIiwic2l6ZSJdKTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudCgic3ZnIixXbSh7cmVmOmUseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpvLGhlaWdodDpvLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOnIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQifSxsKSxpZS5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjE4Iix5MToiNiIseDI6IjYiLHkyOiIxOCJ9KSxpZS5jcmVhdGVFbGVtZW50KCJsaW5lIix7eDE6IjYiLHkxOiI2Iix4MjoiMTgiLHkyOiIxOCJ9KSl9KTtIdi5wcm9wVHlwZXM9e2NvbG9yOmlyLnN0cmluZyxzaXplOmlyLm9uZU9mVHlwZShbaXIuc3RyaW5nLGlyLm51bWJlcl0pfTtIdi5kaXNwbGF5TmFtZT0iWCI7Y29uc3QgZjQ9SHYscDQ9KHtmb250U2l6ZXM6dCxmb250c0ZhbWlsaWVzOmUsb25FZGl0b3I6bixjb2xvcnM6cn0pPT57Y29uc3RbaV09TnIudXNlTGV4aWNhbENvbXBvc2VyQ29udGV4dCgpO2gudXNlRWZmZWN0KCgpPT57biYmbihpKX0sW2ldKTtjb25zdFtvLGxdPWgudXNlU3RhdGUoaSksW3MsYV09aC51c2VTdGF0ZShudWxsKSxbYyx1XT1oLnVzZVN0YXRlKCExKSxbZCxmXT1oLnVzZVN0YXRlKCExKSxbcCxnXT1oLnVzZVN0YXRlKCExKSxbbSx3XT1oLnVzZVN0YXRlKCExKTtoLnVzZVN0YXRlKCIxNXB4IiksaC51c2VTdGF0ZSgiIzAwMCIpLGgudXNlU3RhdGUoIlNhbnMiKTtjb25zdFt2LHhdPWgudXNlU3RhdGUoInBhcmFncmFwaCIpO2gudXNlU3RhdGUoITEpLGgudXNlU3RhdGUoITEpLGgudXNlU3RhdGUoInVybCIpLGgudXNlU3RhdGUobnVsbCk7Y29uc3RbXyxTXT1oLnVzZVN0YXRlKG51bGwpLEU9VD0+e2kuZGlzcGF0Y2hDb21tYW5kKHRsLlRPR0dMRV9MSU5LX0NPTU1BTkQsVCl9LGs9e3BhcmFncmFwaDoiTm9ybWFsIixoMToiSGVhZGluZyAxIixoMjoiSGVhZGluZyAyIixoMzoiSGVhZGluZyAzIixoNDoiSGVhZGluZyA0IixoNToiSGVhZGluZyA1IixoNjoiSGVhZGluZyA2IixudW1iZXI6Ik51bWJlcmVkIExpc3QiLGJ1bGxldDoiQnVsbGV0ZWQgTGlzdCJ9LEM9e307Zm9yKGNvbnN0IFQgaW4gaylDW2tbVF1dPVQ7Y29uc3QgTj1oLnVzZUNhbGxiYWNrKCgpPT57Y29uc3QgVD1fZS4kZ2V0U2VsZWN0aW9uKCk7aWYoX2UuJGlzUmFuZ2VTZWxlY3Rpb24oVCkpe2NvbnN0IEQ9VC5hbmNob3IuZ2V0Tm9kZSgpO2xldCBMPUQuZ2V0S2V5KCk9PT0icm9vdCI/RDpGdC4kZmluZE1hdGNoaW5nUGFyZW50KEQsUD0+e2NvbnN0IGI9UC5nZXRQYXJlbnQoKTtyZXR1cm4gYiE9PW51bGwmJl9lLiRpc1Jvb3RPclNoYWRvd1Jvb3QoYil9KTtMPT09bnVsbCYmKEw9RC5nZXRUb3BMZXZlbEVsZW1lbnRPclRocm93KCkpO2NvbnN0IEs9UEMoVCksQj1GdC4kZmluZE1hdGNoaW5nUGFyZW50KEssdGwuJGlzTGlua05vZGUpO2lmKEIhPT1udWxsKXtjb25zdCBQPUIuZ2V0VVJMKCk7UyhQKX1lbHNlIFMobnVsbCk7Y29uc3QgWj1MLmdldEtleSgpLFI9by5nZXRFbGVtZW50QnlLZXkoWik7aWYodShULmhhc0Zvcm1hdCgiYm9sZCIpKSxmKFQuaGFzRm9ybWF0KCJpdGFsaWMiKSksZyhULmhhc0Zvcm1hdCgic3RyaWtldGhyb3VnaCIpKSx3KFQuaGFzRm9ybWF0KCJ1bmRlcmxpbmUiKSksUiE9PW51bGwpaWYoYShaKSxVaS4kaXNMaXN0Tm9kZShMKSl7Y29uc3QgUD1GdC4kZ2V0TmVhcmVzdE5vZGVPZlR5cGUoRCxVaS5MaXN0Tm9kZSksYj1QP1AuZ2V0TGlzdFR5cGUoKTpMLmdldExpc3RUeXBlKCk7eChiKX1lbHNle2NvbnN0IFA9SWEuJGlzSGVhZGluZ05vZGUoTCk/TC5nZXRUYWcoKTpMLmdldFR5cGUoKTtQIGluIGsmJngoUCl9fX0sW29dKTtoLnVzZUVmZmVjdCgoKT0+RnQubWVyZ2VSZWdpc3RlcihpLnJlZ2lzdGVyVXBkYXRlTGlzdGVuZXIoKHtlZGl0b3JTdGF0ZTpUfSk9PntULnJlYWQoKCk9PntOKCl9KX0pKSxbTixvLGldKSxoLnVzZUVmZmVjdCgoKT0+aS5yZWdpc3RlckNvbW1hbmQoX2UuU0VMRUNUSU9OX0NIQU5HRV9DT01NQU5ELChULEQpPT4oTigpLGwoRCksITEpLF9lLkNPTU1BTkRfUFJJT1JJVFlfQ1JJVElDQUwpLFtpLE5dKTtjb25zdCBBPVQ9PntbImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiJdLmluY2x1ZGVzKFQpP3YhPT1UJiZpLnVwZGF0ZSgoKT0+e2NvbnN0IEQ9X2UuJGdldFNlbGVjdGlvbigpO19lLiRpc1JhbmdlU2VsZWN0aW9uKEQpJiZ1by4kc2V0QmxvY2tzVHlwZShELCgpPT5JYS4kY3JlYXRlSGVhZGluZ05vZGUoVCkpfSk6VD09PSJwYXJhZ3JhcGgiJiZ2IT09InBhcmFncmFwaCI/aS51cGRhdGUoKCk9Pntjb25zdCBEPV9lLiRnZXRTZWxlY3Rpb24oKTsoX2UuJGlzUmFuZ2VTZWxlY3Rpb24oRCl8fF9lLkRFUFJFQ0FURURfJGlzR3JpZFNlbGVjdGlvbihEKSkmJnVvLiRzZXRCbG9ja3NUeXBlKEQsKCk9Pl9lLiRjcmVhdGVQYXJhZ3JhcGhOb2RlKCkpfSk6VD09PSJudW1iZXIiJiZ2IT09Im51bWJlciI/aS5kaXNwYXRjaENvbW1hbmQoVWkuSU5TRVJUX09SREVSRURfTElTVF9DT01NQU5ELHZvaWQgMCk6VD09PSJidWxsZXQiJiZ2IT09ImJ1bGxldCI/aS5kaXNwYXRjaENvbW1hbmQoVWkuSU5TRVJUX1VOT1JERVJFRF9MSVNUX0NPTU1BTkQsdm9pZCAwKTppLmRpc3BhdGNoQ29tbWFuZChVaS5SRU1PVkVfTElTVF9DT01NQU5ELHZvaWQgMCl9O3JldHVybiBoLnVzZUNhbGxiYWNrKCgpPT57aS51cGRhdGUoKCk9Pntjb25zdCBUPV9lLiRnZXRTZWxlY3Rpb24oKTtpZihfZS4kaXNSYW5nZVNlbGVjdGlvbihUKSl7Y29uc3QgRD1ULmFuY2hvcixMPVQuZm9jdXMsSz1ULmdldE5vZGVzKCk7aWYoRC5rZXk9PT1MLmtleSYmRC5vZmZzZXQ9PT1MLm9mZnNldClyZXR1cm47Sy5mb3JFYWNoKChCLFopPT57X2UuJGlzVGV4dE5vZGUoQik/KFo9PT0wJiZELm9mZnNldCE9PTAmJihCPUIuc3BsaXRUZXh0KEQub2Zmc2V0KVsxXXx8QiksWj09PUsubGVuZ3RoLTEmJihCPUIuc3BsaXRUZXh0KEwub2Zmc2V0KVswXXx8QiksQi5fX3N0eWxlIT09IiImJkIuc2V0U3R5bGUoIiIpLEIuX19mb3JtYXQhPT0wJiYoQi5zZXRGb3JtYXQoMCksRnQuJGdldE5lYXJlc3RCbG9ja0VsZW1lbnRBbmNlc3Rvck9yVGhyb3coQikuc2V0Rm9ybWF0KCIiKSkpOklhLiRpc0hlYWRpbmdOb2RlKEIpJiZCLnJlcGxhY2UoX2UuJGNyZWF0ZVBhcmFncmFwaE5vZGUoKSwhMCl9KX19KX0sW29dKSx5LmpzeHMoImRpdiIse2NsYXNzTmFtZToic3RpY2t5IHRvcC0wIGZsZXggZmxleC1jb2wgcHgtNCBweS0yIGJvcmRlciByb3VuZGVkLW1kIHJvdW5kZWQtYi1ub25lIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIixjaGlsZHJlbjpbeS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgZ2FwLTEiLGNoaWxkcmVuOlt5LmpzeChYQSx7b3B0aW9uczpPYmplY3QudmFsdWVzKGspLGxhYmVsOmtbdl0/P3YrIiAobm90IHN1cHBvcnRlZCkiLG9uQ2hhbmdlOlQ9PntBKENbVF0pfX0pLHkuanN4KFBvLHt2YXJpYW50OiJwcmltYXJ5IixvbkNsaWNrOlQ9PntULnByZXZlbnREZWZhdWx0KCksaS5kaXNwYXRjaENvbW1hbmQoX2UuRk9STUFUX1RFWFRfQ09NTUFORCwiYm9sZCIpfSxhY3RpdmU6YyxpY29uOnkuanN4KHpBLHtjbGFzc05hbWU6YCR7YyYmInN0cm9rZS1bM3B4XSJ9YH0pfSkseS5qc3goUG8se2FjdGl2ZTpwLG9uQ2xpY2s6VD0+e1QucHJldmVudERlZmF1bHQoKSxpLmRpc3BhdGNoQ29tbWFuZChfZS5GT1JNQVRfVEVYVF9DT01NQU5ELCJzdHJpa2V0aHJvdWdoIil9LGljb246eS5qc3goVkEse2NsYXNzTmFtZTpgJHtwJiYic3Ryb2tlLVsycHhdIn1gfSl9KSx5LmpzeChQbyx7YWN0aXZlOmQsb25DbGljazpUPT57VC5wcmV2ZW50RGVmYXVsdCgpLGkuZGlzcGF0Y2hDb21tYW5kKF9lLkZPUk1BVF9URVhUX0NPTU1BTkQsIml0YWxpYyIpfSxpY29uOnkuanN4KFdBLHtjbGFzc05hbWU6YCR7ZCYmInN0cm9rZS1bM3B4XSJ9YH0pfSkseS5qc3goUG8se2FjdGl2ZTpfIT09bnVsbCxvbkNsaWNrOlQ9PntULnByZXZlbnREZWZhdWx0KCksUygiIiksRSgiIil9LGljb246eS5qc3goYzQse3dpZHRoOjEyLGhlaWdodDoxMixjbGFzc05hbWU6YCR7XyE9PW51bGwmJiJzdHJva2UtWzNweF0ifWB9KX0pLHkuanN4cygibGFiZWwiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGN1cnNvci1wb2ludGVyIixjaGlsZHJlbjpbeS5qc3goQkEse30pLHkuanN4KCJpbnB1dCIse3R5cGU6ImZpbGUiLGhpZGRlbjohMCxvbkNoYW5nZTpUPT57VC5wcmV2ZW50RGVmYXVsdCgpLE9DKFQpLnRoZW4oRD0+e2kuZGlzcGF0Y2hDb21tYW5kKE5DLHsuLi5EfSl9KS5jYXRjaChEPT57Y29uc29sZS5lcnJvcigiRXJyb3IgcmVhZGluZyBpbWFnZSIsRCl9KX19KV19KV19KSxfIT09bnVsbCYmeS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1yb3cgcC0yIixjaGlsZHJlbjpbeS5qc3goImlucHV0Iix7dHlwZToidGV4dCIscGxhY2Vob2xkZXI6IkVudGVyIFVSTCIsY2xhc3NOYW1lOiJ3LTEvMyBweC0yIGJnLWJhY2tncm91bmQgdGV4dC1wcmltYXJ5Iix2YWx1ZTpfLG9uQ2hhbmdlOlQ9PntULnByZXZlbnREZWZhdWx0KCksUyhULnRhcmdldC52YWx1ZSl9fSkseS5qc3goUG8se3ZhcmlhbnQ6InByaW1hcnkiLG9uQ2xpY2s6VD0+e1QucHJldmVudERlZmF1bHQoKSxFKF98fG51bGwpfSxpY29uOnkuanN4KGw0LHtzaXplOjE0fSl9KSx5LmpzeChQbyx7dmFyaWFudDoicHJpbWFyeSIsb25DbGljazpUPT57VC5wcmV2ZW50RGVmYXVsdCgpLEUobnVsbCl9LGljb246eS5qc3goZjQse3NpemU6MTR9KX0pXX0pXX0pfSxoND1wNDtmdW5jdGlvbiBtNCh0KXtjb25zb2xlLmVycm9yKHQpfWNvbnN0IGc0PSh7cmljaHRleHQ6dCxvbkVkaXRvcjplfSk9Pntjb25zdCByPXtuYW1lc3BhY2U6InZhbCIsZWRpdG9yU3RhdGU6aT0+e2kuc2V0RWRpdG9yU3RhdGUoaS5wYXJzZUVkaXRvclN0YXRlKHtyb290OlZPKFdFKHQpKX0pKX0sbm9kZXM6W0lhLkhlYWRpbmdOb2RlLHpzLFVpLkxpc3ROb2RlLFVpLkxpc3RJdGVtTm9kZSx0bC5MaW5rTm9kZV0sdGhlbWU6e3RleHQ6e2JvbGQ6ImZvbnQtc2VtaWJvbGQiLHVuZGVybGluZToidW5kZXJsaW5lIixpdGFsaWM6Iml0YWxpYyIsc3RyaWtldGhyb3VnaDoibGluZS10aHJvdWdoIix1bmRlcmxpbmVTdHJpa2V0aHJvdWdoOiJ1bmRlcmxpbmUgbGluZS10aHJvdWdoIn0sbGlzdDp7bGlzdGl0ZW06Im1sLVsyMHB4XSIsb2w6Imxpc3QtZGVjaW1hbCIsdWw6Imxpc3QtZGlzYyJ9LGhlYWRpbmc6e2gxOiJ0ZXh0LTR4bCBmb250LWJvbGQiLGgyOiJ0ZXh0LTN4bCBmb250LWJvbGQiLGgzOiJ0ZXh0LTJ4bCBmb250LWJvbGQiLGg0OiJ0ZXh0LXhsIGZvbnQtYm9sZCIsaDU6InRleHQtbGcgZm9udC1ib2xkIixoNjoidGV4dC1tZCBmb250LWJvbGQifSxsaW5rOiJ0ZXh0LWhpZ2hsaWdodCB1bmRlcmxpbmUifSxvbkVycm9yOm00fTtyZXR1cm4geS5qc3hzKHZQLkxleGljYWxDb21wb3Nlcix7aW5pdGlhbENvbmZpZzpyLGNoaWxkcmVuOlt5LmpzeChEQSx7fSkseS5qc3goaDQse29uRWRpdG9yOmV9KSx5LmpzeCh2QS5SaWNoVGV4dFBsdWdpbix7Y29udGVudEVkaXRhYmxlOnkuanN4KCJkaXYiLHtjbGFzc05hbWU6InB4LTMgcHktMiB0ZXh0LXNtIGJvcmRlci1iIHJvdW5kZWQtbWQgcm91bmRlZC10LW5vbmUgYm9yZGVyLXggYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIixjaGlsZHJlbjp5LmpzeChNQSx7Y2xhc3NOYW1lOiJwLTQgb3V0bGluZS1ub25lIGJnLWZpbGwifSl9KSxwbGFjZWhvbGRlcjp5LmpzeCgicCIse2NsYXNzTmFtZToiIn0pLEVycm9yQm91bmRhcnk6Q1B9KSx5LmpzeChQQS5MaW5rUGx1Z2luLHt9KSx5LmpzeChRQSx7fSkseS5qc3goU0EuTGlzdFBsdWdpbix7fSkseS5qc3goSUEse30pLHkuanN4KEFQLkhpc3RvcnlQbHVnaW4se30pXX0pfSxWdj0icC0xIGJvcmRlciByb3VuZGVkLWZ1bGwgc2hhZG93IGJvcmRlci1hY2NlbnQiLEl4PSJ2YWxidWlsZDp1cmxCZWZvcmVOYXZpZ2F0aW9uIjtmdW5jdGlvbiB2NCh7YXBpOnQscGF0Y2hlczplLGRpcmVjdGlvbjpuLG9uQ2xpY2tQYXRjaGVzOnJ9KXtjb25zdHt0aGVtZTppLHNldFRoZW1lOm8sZWRpdE1vZGU6bCxzZXRFZGl0TW9kZTpzLHNlc3Npb246YX09SGYoKTtpZihhLnN0YXR1cz09PSJzdWNjZXNzIiYmYS5kYXRhLm1vZGU9PT0idW5hdXRob3JpemVkIilyZXR1cm4geS5qc3hzKGp4LHtkaXJlY3Rpb246bixocmVmOnQuZ2V0TG9naW5Vcmwod2luZG93LmxvY2F0aW9uLmhyZWYpLGNoaWxkcmVuOlt5LmpzeCgic3BhbiIse2NoaWxkcmVuOiJMb2dpbiJ9KSx5LmpzeChGMCx7c2l6ZToxOH0pXX0pO2lmKGEuc3RhdHVzPT09InN1Y2Nlc3MiJiYhYS5kYXRhLmVuYWJsZWQpcmV0dXJuIHkuanN4cyhqeCx7ZGlyZWN0aW9uOm4saHJlZjp0LmdldEVuYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46W3kuanN4KCJzcGFuIix7Y2hpbGRyZW46IkVuYWJsZSJ9KSx5LmpzeChGMCx7c2l6ZToxOH0pXX0pO2NvbnN0W2MsdV09aC51c2VTdGF0ZSgpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2xldCBkPTA7Zm9yKGNvbnN0IGYgaW4gZSlkKz1lW2ZdLmxlbmd0aDt1KGQpfSxbZV0pLHkuanN4cyhEQyx7ZGlyZWN0aW9uOm4sY2hpbGRyZW46W3kuanN4KEV1LHthY3RpdmU6bD09PSJob3ZlciJ8fGw9PT0id2luZG93IixvbkNsaWNrOigpPT57cyhkPT5kPT09ImhvdmVyInx8bD09PSJ3aW5kb3ciPyJvZmYiOiJob3ZlciIpfSxjaGlsZHJlbjp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46bD09PSJob3ZlciJ8fGw9PT0id2luZG93Ij95LmpzeCh4Uix7c2l6ZToxOH0pOnkuanN4KF9SLHtzaXplOjE4fSl9KX0pLHkuanN4KEV1LHtvbkNsaWNrOigpPT57byhpPT09ImRhcmsiPyJsaWdodCI6ImRhcmsiKX0sY2hpbGRyZW46eS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImgtWzI0cHhdIHctWzI0cHhdIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIixjaGlsZHJlbjpbaT09PSJkYXJrIiYmeS5qc3goRVIse3NpemU6MTV9KSxpPT09ImxpZ2h0IiYmeS5qc3goeVIse3NpemU6MTV9KV19KX0pLHkuanN4KEV1LHthY3RpdmU6bD09PSJmdWxsIixvbkNsaWNrOigpPT57aWYobCE9PSJmdWxsIilsb2NhbFN0b3JhZ2Uuc2V0SXRlbShJeCx3aW5kb3cubG9jYXRpb24uaHJlZiksd2luZG93LmxvY2F0aW9uLmhyZWY9dC5nZXRFZGl0VXJsKCk7ZWxzZSBpZihsPT09ImZ1bGwiKXtjb25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKEl4KTt3aW5kb3cubG9jYXRpb24uaHJlZj1kfHwiLyJ9fSxjaGlsZHJlbjp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46bD09PSJmdWxsIj95LmpzeCh2Uix7c2l6ZToxNX0pOnkuanN4KG1SLHtzaXplOjE1fSl9KX0pLGMhPT12b2lkIDAmJmEuc3RhdHVzPT09InN1Y2Nlc3MiJiZhLmRhdGEubW9kZT09PSJwcm94eSImJnkuanN4KEV1LHtvbkNsaWNrOigpPT57Yz4wJiZyKCl9LGNoaWxkcmVuOnkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSBoLVsyNHB4XSB3LVsyNHB4XSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlciIsY2hpbGRyZW46W3kuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIC1yaWdodC1bMTBweF0gLXRvcC1bMTBweF0gYm9yZGVyIGJvcmRlci1ib3JkZXIgcm91bmRlZC1mdWxsIHB4LTEgZm9udC1zYW5zIHRleHQteHMgYmctY2FyZCB0ZXh0LWFjY2VudCIsY2hpbGRyZW46Y30pLHkuanN4KFNSLHtzaXplOjE4fSldfSl9KSx5LmpzeCgiYSIse2NsYXNzTmFtZTpWdixocmVmOnQuZ2V0RGlzYWJsZVVybCh3aW5kb3cubG9jYXRpb24uaHJlZiksY2hpbGRyZW46eS5qc3goImRpdiIse2NsYXNzTmFtZToiaC1bMjRweF0gdy1bMjRweF0gZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXIiLGNoaWxkcmVuOnkuanN4KHdSLHtzaXplOjE4fSl9KX0pXX0pfWZ1bmN0aW9uIGp4KHtocmVmOnQsZGlyZWN0aW9uOmUsY2hpbGRyZW46bn0pe3JldHVybiB5LmpzeChEQyx7ZGlyZWN0aW9uOmUsYm9yZGVyOiExLGNoaWxkcmVuOnkuanN4KCJhIix7Y2xhc3NOYW1lOlZ2LGhyZWY6dCxjaGlsZHJlbjp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBweC0yIGdhcC15LTIiLGNoaWxkcmVuOm59KX0pfSl9ZnVuY3Rpb24gREMoe2NoaWxkcmVuOnQsZGlyZWN0aW9uOmUsYm9yZGVyOm49ITB9KXtyZXR1cm4geS5qc3goImRpdiIse2NsYXNzTmFtZTpGbigiZmxleCBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgaC1mdWxsIHB4LTIgcHktMiBmb250LXNhbnMgcm91bmRlZC1mdWxsIGdhcC0zIHRleHQtcHJpbWFyeSBib3JkZXItZmlsbCBiZy1ncmFkaWVudC10by1iciBmcm9tLWJhY2tncm91bmQvOTAgZnJvbS00MCUgdG8tYmFja2dyb3VuZCBiYWNrZHJvcC1ibHVyLWxnIGRyb3Atc2hhZG93LTJ4bCIseyJmbGV4LWNvbCBpdGVtcy1zdGFydCI6ZT09PSJ2ZXJ0aWNhbCIsImZsZXgtcm93IGl0ZW1zLWNlbnRlciI6ZT09PSJob3Jpem9udGFsIn0se2JvcmRlcjpufSksY2hpbGRyZW46dH0pfWZ1bmN0aW9uIEV1KHthY3RpdmU6dCxvbkNsaWNrOmUsY2hpbGRyZW46bn0pe3JldHVybiB5LmpzeCgiYnV0dG9uIix7Y2xhc3NOYW1lOkZuKFZ2LHsiYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQgZHJvcC1zaGFkb3ctWzBweF8wcHhfMTJweF9oc2wodmFyKC0tYWNjZW50KSldIjp0fSksb25DbGljazplLGNoaWxkcmVuOm59KX1mdW5jdGlvbiB5NCh0LGUpe2NvbnN0W24scl09aC51c2VTdGF0ZSh7fSksW2ksb109aC51c2VTdGF0ZSgwKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pnt0LnN0YXR1cz09PSJzdWNjZXNzIiYmdC5kYXRhLm1vZGU9PT0icHJveHkiJiZlLmdldFBhdGNoZXMoe30pLnRoZW4obD0+e2lmKEZvLmlzT2sobCkpe2NvbnN0IHM9e307Zm9yKGNvbnN0IGEgaW4gbC52YWx1ZSlzW2FdPWwudmFsdWVbYV0ubWFwKGM9PmMucGF0Y2hfaWQpO3Iocyl9ZWxzZSBjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgbG9hZCBwYXRjaGVzIixsLmVycm9yKX0pfSxbdCxpXSkse3BhdGNoZXM6bixzZXRQYXRjaFJlc2V0SWQ6b319ZnVuY3Rpb24geDQodD0iZGFyayIpe2NvbnN0W2Usbl09aC51c2VTdGF0ZSh0KTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFsLXRoZW1lIik9PT0ibGlnaHQiP24oImxpZ2h0Iik6bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZhbC10aGVtZSIpPT09ImRhcmsifHx3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiKS5tYXRjaGVzP24oImRhcmsiKTp3aW5kb3cubWF0Y2hNZWRpYSYmd2luZG93Lm1hdGNoTWVkaWEoIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIikubWF0Y2hlcyYmbigibGlnaHQiKTtjb25zdCByPWk9Pntsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidmFsLXRoZW1lIil8fG4oaS5tYXRjaGVzPyJkYXJrIjoibGlnaHQiKX07cmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyKSwoKT0+e3dpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIikucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixyKX19LFtdKSxbZSxyPT57bG9jYWxTdG9yYWdlLnNldEl0ZW0oInZhbC10aGVtZSIsciksbihyKX1dfXZhciBEZTsoZnVuY3Rpb24odCl7dC5hc3NlcnRFcXVhbD1pPT5pO2Z1bmN0aW9uIGUoaSl7fXQuYXNzZXJ0SXM9ZTtmdW5jdGlvbiBuKGkpe3Rocm93IG5ldyBFcnJvcn10LmFzc2VydE5ldmVyPW4sdC5hcnJheVRvRW51bT1pPT57Y29uc3Qgbz17fTtmb3IoY29uc3QgbCBvZiBpKW9bbF09bDtyZXR1cm4gb30sdC5nZXRWYWxpZEVudW1WYWx1ZXM9aT0+e2NvbnN0IG89dC5vYmplY3RLZXlzKGkpLmZpbHRlcihzPT50eXBlb2YgaVtpW3NdXSE9Im51bWJlciIpLGw9e307Zm9yKGNvbnN0IHMgb2YgbylsW3NdPWlbc107cmV0dXJuIHQub2JqZWN0VmFsdWVzKGwpfSx0Lm9iamVjdFZhbHVlcz1pPT50Lm9iamVjdEtleXMoaSkubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBpW29dfSksdC5vYmplY3RLZXlzPXR5cGVvZiBPYmplY3Qua2V5cz09ImZ1bmN0aW9uIj9pPT5PYmplY3Qua2V5cyhpKTppPT57Y29uc3Qgbz1bXTtmb3IoY29uc3QgbCBpbiBpKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpLGwpJiZvLnB1c2gobCk7cmV0dXJuIG99LHQuZmluZD0oaSxvKT0+e2Zvcihjb25zdCBsIG9mIGkpaWYobyhsKSlyZXR1cm4gbH0sdC5pc0ludGVnZXI9dHlwZW9mIE51bWJlci5pc0ludGVnZXI9PSJmdW5jdGlvbiI/aT0+TnVtYmVyLmlzSW50ZWdlcihpKTppPT50eXBlb2YgaT09Im51bWJlciImJmlzRmluaXRlKGkpJiZNYXRoLmZsb29yKGkpPT09aTtmdW5jdGlvbiByKGksbz0iIHwgIil7cmV0dXJuIGkubWFwKGw9PnR5cGVvZiBsPT0ic3RyaW5nIj9gJyR7bH0nYDpsKS5qb2luKG8pfXQuam9pblZhbHVlcz1yLHQuanNvblN0cmluZ2lmeVJlcGxhY2VyPShpLG8pPT50eXBlb2Ygbz09ImJpZ2ludCI/by50b1N0cmluZygpOm99KShEZXx8KERlPXt9KSk7dmFyIEhtOyhmdW5jdGlvbih0KXt0Lm1lcmdlU2hhcGVzPShlLG4pPT4oey4uLmUsLi4ubn0pfSkoSG18fChIbT17fSkpO2NvbnN0IFE9RGUuYXJyYXlUb0VudW0oWyJzdHJpbmciLCJuYW4iLCJudW1iZXIiLCJpbnRlZ2VyIiwiZmxvYXQiLCJib29sZWFuIiwiZGF0ZSIsImJpZ2ludCIsInN5bWJvbCIsImZ1bmN0aW9uIiwidW5kZWZpbmVkIiwibnVsbCIsImFycmF5Iiwib2JqZWN0IiwidW5rbm93biIsInByb21pc2UiLCJ2b2lkIiwibmV2ZXIiLCJtYXAiLCJzZXQiXSksV2k9dD0+e3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBRLnVuZGVmaW5lZDtjYXNlInN0cmluZyI6cmV0dXJuIFEuc3RyaW5nO2Nhc2UibnVtYmVyIjpyZXR1cm4gaXNOYU4odCk/US5uYW46US5udW1iZXI7Y2FzZSJib29sZWFuIjpyZXR1cm4gUS5ib29sZWFuO2Nhc2UiZnVuY3Rpb24iOnJldHVybiBRLmZ1bmN0aW9uO2Nhc2UiYmlnaW50IjpyZXR1cm4gUS5iaWdpbnQ7Y2FzZSJzeW1ib2wiOnJldHVybiBRLnN5bWJvbDtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/US5hcnJheTp0PT09bnVsbD9RLm51bGw6dC50aGVuJiZ0eXBlb2YgdC50aGVuPT0iZnVuY3Rpb24iJiZ0LmNhdGNoJiZ0eXBlb2YgdC5jYXRjaD09ImZ1bmN0aW9uIj9RLnByb21pc2U6dHlwZW9mIE1hcDwidSImJnQgaW5zdGFuY2VvZiBNYXA/US5tYXA6dHlwZW9mIFNldDwidSImJnQgaW5zdGFuY2VvZiBTZXQ/US5zZXQ6dHlwZW9mIERhdGU8InUiJiZ0IGluc3RhbmNlb2YgRGF0ZT9RLmRhdGU6US5vYmplY3Q7ZGVmYXVsdDpyZXR1cm4gUS51bmtub3dufX0sSD1EZS5hcnJheVRvRW51bShbImludmFsaWRfdHlwZSIsImludmFsaWRfbGl0ZXJhbCIsImN1c3RvbSIsImludmFsaWRfdW5pb24iLCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3IiLCJpbnZhbGlkX2VudW1fdmFsdWUiLCJ1bnJlY29nbml6ZWRfa2V5cyIsImludmFsaWRfYXJndW1lbnRzIiwiaW52YWxpZF9yZXR1cm5fdHlwZSIsImludmFsaWRfZGF0ZSIsImludmFsaWRfc3RyaW5nIiwidG9vX3NtYWxsIiwidG9vX2JpZyIsImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzIiwibm90X211bHRpcGxlX29mIiwibm90X2Zpbml0ZSJdKSxfND10PT5KU09OLnN0cmluZ2lmeSh0LG51bGwsMikucmVwbGFjZSgvIihbXiJdKykiOi9nLCIkMToiKTtjbGFzcyBDciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5pc3N1ZXM9W10sdGhpcy5hZGRJc3N1ZT1yPT57dGhpcy5pc3N1ZXM9Wy4uLnRoaXMuaXNzdWVzLHJdfSx0aGlzLmFkZElzc3Vlcz0ocj1bXSk9Pnt0aGlzLmlzc3Vlcz1bLi4udGhpcy5pc3N1ZXMsLi4ucl19O2NvbnN0IG49bmV3LnRhcmdldC5wcm90b3R5cGU7T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG4pOnRoaXMuX19wcm90b19fPW4sdGhpcy5uYW1lPSJab2RFcnJvciIsdGhpcy5pc3N1ZXM9ZX1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuaXNzdWVzfWZvcm1hdChlKXtjb25zdCBuPWV8fGZ1bmN0aW9uKG8pe3JldHVybiBvLm1lc3NhZ2V9LHI9e19lcnJvcnM6W119LGk9bz0+e2Zvcihjb25zdCBsIG9mIG8uaXNzdWVzKWlmKGwuY29kZT09PSJpbnZhbGlkX3VuaW9uIilsLnVuaW9uRXJyb3JzLm1hcChpKTtlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX3JldHVybl90eXBlIilpKGwucmV0dXJuVHlwZUVycm9yKTtlbHNlIGlmKGwuY29kZT09PSJpbnZhbGlkX2FyZ3VtZW50cyIpaShsLmFyZ3VtZW50c0Vycm9yKTtlbHNlIGlmKGwucGF0aC5sZW5ndGg9PT0wKXIuX2Vycm9ycy5wdXNoKG4obCkpO2Vsc2V7bGV0IHM9cixhPTA7Zm9yKDthPGwucGF0aC5sZW5ndGg7KXtjb25zdCBjPWwucGF0aFthXTthPT09bC5wYXRoLmxlbmd0aC0xPyhzW2NdPXNbY118fHtfZXJyb3JzOltdfSxzW2NdLl9lcnJvcnMucHVzaChuKGwpKSk6c1tjXT1zW2NdfHx7X2Vycm9yczpbXX0scz1zW2NdLGErK319fTtyZXR1cm4gaSh0aGlzKSxyfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubWVzc2FnZX1nZXQgbWVzc2FnZSgpe3JldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmlzc3VlcyxEZS5qc29uU3RyaW5naWZ5UmVwbGFjZXIsMil9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5pc3N1ZXMubGVuZ3RoPT09MH1mbGF0dGVuKGU9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LHI9W107Zm9yKGNvbnN0IGkgb2YgdGhpcy5pc3N1ZXMpaS5wYXRoLmxlbmd0aD4wPyhuW2kucGF0aFswXV09bltpLnBhdGhbMF1dfHxbXSxuW2kucGF0aFswXV0ucHVzaChlKGkpKSk6ci5wdXNoKGUoaSkpO3JldHVybntmb3JtRXJyb3JzOnIsZmllbGRFcnJvcnM6bn19Z2V0IGZvcm1FcnJvcnMoKXtyZXR1cm4gdGhpcy5mbGF0dGVuKCl9fUNyLmNyZWF0ZT10PT5uZXcgQ3IodCk7Y29uc3QgaGM9KHQsZSk9PntsZXQgbjtzd2l0Y2godC5jb2RlKXtjYXNlIEguaW52YWxpZF90eXBlOnQucmVjZWl2ZWQ9PT1RLnVuZGVmaW5lZD9uPSJSZXF1aXJlZCI6bj1gRXhwZWN0ZWQgJHt0LmV4cGVjdGVkfSwgcmVjZWl2ZWQgJHt0LnJlY2VpdmVkfWA7YnJlYWs7Y2FzZSBILmludmFsaWRfbGl0ZXJhbDpuPWBJbnZhbGlkIGxpdGVyYWwgdmFsdWUsIGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkodC5leHBlY3RlZCxEZS5qc29uU3RyaW5naWZ5UmVwbGFjZXIpfWA7YnJlYWs7Y2FzZSBILnVucmVjb2duaXplZF9rZXlzOm49YFVucmVjb2duaXplZCBrZXkocykgaW4gb2JqZWN0OiAke0RlLmpvaW5WYWx1ZXModC5rZXlzLCIsICIpfWA7YnJlYWs7Y2FzZSBILmludmFsaWRfdW5pb246bj0iSW52YWxpZCBpbnB1dCI7YnJlYWs7Y2FzZSBILmludmFsaWRfdW5pb25fZGlzY3JpbWluYXRvcjpuPWBJbnZhbGlkIGRpc2NyaW1pbmF0b3IgdmFsdWUuIEV4cGVjdGVkICR7RGUuam9pblZhbHVlcyh0Lm9wdGlvbnMpfWA7YnJlYWs7Y2FzZSBILmludmFsaWRfZW51bV92YWx1ZTpuPWBJbnZhbGlkIGVudW0gdmFsdWUuIEV4cGVjdGVkICR7RGUuam9pblZhbHVlcyh0Lm9wdGlvbnMpfSwgcmVjZWl2ZWQgJyR7dC5yZWNlaXZlZH0nYDticmVhaztjYXNlIEguaW52YWxpZF9hcmd1bWVudHM6bj0iSW52YWxpZCBmdW5jdGlvbiBhcmd1bWVudHMiO2JyZWFrO2Nhc2UgSC5pbnZhbGlkX3JldHVybl90eXBlOm49IkludmFsaWQgZnVuY3Rpb24gcmV0dXJuIHR5cGUiO2JyZWFrO2Nhc2UgSC5pbnZhbGlkX2RhdGU6bj0iSW52YWxpZCBkYXRlIjticmVhaztjYXNlIEguaW52YWxpZF9zdHJpbmc6dHlwZW9mIHQudmFsaWRhdGlvbj09Im9iamVjdCI/ImluY2x1ZGVzImluIHQudmFsaWRhdGlvbj8obj1gSW52YWxpZCBpbnB1dDogbXVzdCBpbmNsdWRlICIke3QudmFsaWRhdGlvbi5pbmNsdWRlc30iYCx0eXBlb2YgdC52YWxpZGF0aW9uLnBvc2l0aW9uPT0ibnVtYmVyIiYmKG49YCR7bn0gYXQgb25lIG9yIG1vcmUgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3QudmFsaWRhdGlvbi5wb3NpdGlvbn1gKSk6InN0YXJ0c1dpdGgiaW4gdC52YWxpZGF0aW9uP249YEludmFsaWQgaW5wdXQ6IG11c3Qgc3RhcnQgd2l0aCAiJHt0LnZhbGlkYXRpb24uc3RhcnRzV2l0aH0iYDoiZW5kc1dpdGgiaW4gdC52YWxpZGF0aW9uP249YEludmFsaWQgaW5wdXQ6IG11c3QgZW5kIHdpdGggIiR7dC52YWxpZGF0aW9uLmVuZHNXaXRofSJgOkRlLmFzc2VydE5ldmVyKHQudmFsaWRhdGlvbik6dC52YWxpZGF0aW9uIT09InJlZ2V4Ij9uPWBJbnZhbGlkICR7dC52YWxpZGF0aW9ufWA6bj0iSW52YWxpZCI7YnJlYWs7Y2FzZSBILnRvb19zbWFsbDp0LnR5cGU9PT0iYXJyYXkiP249YEFycmF5IG11c3QgY29udGFpbiAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJhdCBsZWFzdCI6Im1vcmUgdGhhbiJ9ICR7dC5taW5pbXVtfSBlbGVtZW50KHMpYDp0LnR5cGU9PT0ic3RyaW5nIj9uPWBTdHJpbmcgbXVzdCBjb250YWluICR7dC5leGFjdD8iZXhhY3RseSI6dC5pbmNsdXNpdmU/ImF0IGxlYXN0Ijoib3ZlciJ9ICR7dC5taW5pbXVtfSBjaGFyYWN0ZXIocylgOnQudHlwZT09PSJudW1iZXIiP249YE51bWJlciBtdXN0IGJlICR7dC5leGFjdD8iZXhhY3RseSBlcXVhbCB0byAiOnQuaW5jbHVzaXZlPyJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIjoiZ3JlYXRlciB0aGFuICJ9JHt0Lm1pbmltdW19YDp0LnR5cGU9PT0iZGF0ZSI/bj1gRGF0ZSBtdXN0IGJlICR7dC5leGFjdD8iZXhhY3RseSBlcXVhbCB0byAiOnQuaW5jbHVzaXZlPyJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIjoiZ3JlYXRlciB0aGFuICJ9JHtuZXcgRGF0ZShOdW1iZXIodC5taW5pbXVtKSl9YDpuPSJJbnZhbGlkIGlucHV0IjticmVhaztjYXNlIEgudG9vX2JpZzp0LnR5cGU9PT0iYXJyYXkiP249YEFycmF5IG11c3QgY29udGFpbiAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJhdCBtb3N0IjoibGVzcyB0aGFuIn0gJHt0Lm1heGltdW19IGVsZW1lbnQocylgOnQudHlwZT09PSJzdHJpbmciP249YFN0cmluZyBtdXN0IGNvbnRhaW4gJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8iYXQgbW9zdCI6InVuZGVyIn0gJHt0Lm1heGltdW19IGNoYXJhY3RlcihzKWA6dC50eXBlPT09Im51bWJlciI/bj1gTnVtYmVyIG11c3QgYmUgJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8ibGVzcyB0aGFuIG9yIGVxdWFsIHRvIjoibGVzcyB0aGFuIn0gJHt0Lm1heGltdW19YDp0LnR5cGU9PT0iYmlnaW50Ij9uPWBCaWdJbnQgbXVzdCBiZSAke3QuZXhhY3Q/ImV4YWN0bHkiOnQuaW5jbHVzaXZlPyJsZXNzIHRoYW4gb3IgZXF1YWwgdG8iOiJsZXNzIHRoYW4ifSAke3QubWF4aW11bX1gOnQudHlwZT09PSJkYXRlIj9uPWBEYXRlIG11c3QgYmUgJHt0LmV4YWN0PyJleGFjdGx5Ijp0LmluY2x1c2l2ZT8ic21hbGxlciB0aGFuIG9yIGVxdWFsIHRvIjoic21hbGxlciB0aGFuIn0gJHtuZXcgRGF0ZShOdW1iZXIodC5tYXhpbXVtKSl9YDpuPSJJbnZhbGlkIGlucHV0IjticmVhaztjYXNlIEguY3VzdG9tOm49IkludmFsaWQgaW5wdXQiO2JyZWFrO2Nhc2UgSC5pbnZhbGlkX2ludGVyc2VjdGlvbl90eXBlczpuPSJJbnRlcnNlY3Rpb24gcmVzdWx0cyBjb3VsZCBub3QgYmUgbWVyZ2VkIjticmVhaztjYXNlIEgubm90X211bHRpcGxlX29mOm49YE51bWJlciBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgJHt0Lm11bHRpcGxlT2Z9YDticmVhaztjYXNlIEgubm90X2Zpbml0ZTpuPSJOdW1iZXIgbXVzdCBiZSBmaW5pdGUiO2JyZWFrO2RlZmF1bHQ6bj1lLmRlZmF1bHRFcnJvcixEZS5hc3NlcnROZXZlcih0KX1yZXR1cm57bWVzc2FnZTpufX07bGV0IElDPWhjO2Z1bmN0aW9uIHc0KHQpe0lDPXR9ZnVuY3Rpb24gV2QoKXtyZXR1cm4gSUN9Y29uc3QgSGQ9dD0+e2NvbnN0e2RhdGE6ZSxwYXRoOm4sZXJyb3JNYXBzOnIsaXNzdWVEYXRhOml9PXQsbz1bLi4ubiwuLi5pLnBhdGh8fFtdXSxsPXsuLi5pLHBhdGg6b307bGV0IHM9IiI7Y29uc3QgYT1yLmZpbHRlcihjPT4hIWMpLnNsaWNlKCkucmV2ZXJzZSgpO2Zvcihjb25zdCBjIG9mIGEpcz1jKGwse2RhdGE6ZSxkZWZhdWx0RXJyb3I6c30pLm1lc3NhZ2U7cmV0dXJuey4uLmkscGF0aDpvLG1lc3NhZ2U6aS5tZXNzYWdlfHxzfX0sUzQ9W107ZnVuY3Rpb24gZWUodCxlKXtjb25zdCBuPUhkKHtpc3N1ZURhdGE6ZSxkYXRhOnQuZGF0YSxwYXRoOnQucGF0aCxlcnJvck1hcHM6W3QuY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCx0LnNjaGVtYUVycm9yTWFwLFdkKCksaGNdLmZpbHRlcihyPT4hIXIpfSk7dC5jb21tb24uaXNzdWVzLnB1c2gobil9Y2xhc3MgbG57Y29uc3RydWN0b3IoKXt0aGlzLnZhbHVlPSJ2YWxpZCJ9ZGlydHkoKXt0aGlzLnZhbHVlPT09InZhbGlkIiYmKHRoaXMudmFsdWU9ImRpcnR5Iil9YWJvcnQoKXt0aGlzLnZhbHVlIT09ImFib3J0ZWQiJiYodGhpcy52YWx1ZT0iYWJvcnRlZCIpfXN0YXRpYyBtZXJnZUFycmF5KGUsbil7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBuKXtpZihpLnN0YXR1cz09PSJhYm9ydGVkIilyZXR1cm4gdmU7aS5zdGF0dXM9PT0iZGlydHkiJiZlLmRpcnR5KCksci5wdXNoKGkudmFsdWUpfXJldHVybntzdGF0dXM6ZS52YWx1ZSx2YWx1ZTpyfX1zdGF0aWMgYXN5bmMgbWVyZ2VPYmplY3RBc3luYyhlLG4pe2NvbnN0IHI9W107Zm9yKGNvbnN0IGkgb2YgbilyLnB1c2goe2tleTphd2FpdCBpLmtleSx2YWx1ZTphd2FpdCBpLnZhbHVlfSk7cmV0dXJuIGxuLm1lcmdlT2JqZWN0U3luYyhlLHIpfXN0YXRpYyBtZXJnZU9iamVjdFN5bmMoZSxuKXtjb25zdCByPXt9O2Zvcihjb25zdCBpIG9mIG4pe2NvbnN0e2tleTpvLHZhbHVlOmx9PWk7aWYoby5zdGF0dXM9PT0iYWJvcnRlZCJ8fGwuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiB2ZTtvLnN0YXR1cz09PSJkaXJ0eSImJmUuZGlydHkoKSxsLnN0YXR1cz09PSJkaXJ0eSImJmUuZGlydHkoKSxvLnZhbHVlIT09Il9fcHJvdG9fXyImJih0eXBlb2YgbC52YWx1ZTwidSJ8fGkuYWx3YXlzU2V0KSYmKHJbby52YWx1ZV09bC52YWx1ZSl9cmV0dXJue3N0YXR1czplLnZhbHVlLHZhbHVlOnJ9fX1jb25zdCB2ZT1PYmplY3QuZnJlZXplKHtzdGF0dXM6ImFib3J0ZWQifSksakM9dD0+KHtzdGF0dXM6ImRpcnR5Iix2YWx1ZTp0fSksX249dD0+KHtzdGF0dXM6InZhbGlkIix2YWx1ZTp0fSksVm09dD0+dC5zdGF0dXM9PT0iYWJvcnRlZCIsS209dD0+dC5zdGF0dXM9PT0iZGlydHkiLG1jPXQ9PnQuc3RhdHVzPT09InZhbGlkIixWZD10PT50eXBlb2YgUHJvbWlzZTwidSImJnQgaW5zdGFuY2VvZiBQcm9taXNlO3ZhciB1ZTsoZnVuY3Rpb24odCl7dC5lcnJUb09iaj1lPT50eXBlb2YgZT09InN0cmluZyI/e21lc3NhZ2U6ZX06ZXx8e30sdC50b1N0cmluZz1lPT50eXBlb2YgZT09InN0cmluZyI/ZTplPT1udWxsP3ZvaWQgMDplLm1lc3NhZ2V9KSh1ZXx8KHVlPXt9KSk7Y2xhc3MgS3J7Y29uc3RydWN0b3IoZSxuLHIsaSl7dGhpcy5fY2FjaGVkUGF0aD1bXSx0aGlzLnBhcmVudD1lLHRoaXMuZGF0YT1uLHRoaXMuX3BhdGg9cix0aGlzLl9rZXk9aX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9jYWNoZWRQYXRoLmxlbmd0aHx8KHRoaXMuX2tleSBpbnN0YW5jZW9mIEFycmF5P3RoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLC4uLnRoaXMuX2tleSk6dGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsdGhpcy5fa2V5KSksdGhpcy5fY2FjaGVkUGF0aH19Y29uc3Qgeng9KHQsZSk9PntpZihtYyhlKSlyZXR1cm57c3VjY2VzczohMCxkYXRhOmUudmFsdWV9O2lmKCF0LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBmYWlsZWQgYnV0IG5vIGlzc3VlcyBkZXRlY3RlZC4iKTtyZXR1cm57c3VjY2VzczohMSxnZXQgZXJyb3IoKXtpZih0aGlzLl9lcnJvcilyZXR1cm4gdGhpcy5fZXJyb3I7Y29uc3Qgbj1uZXcgQ3IodC5jb21tb24uaXNzdWVzKTtyZXR1cm4gdGhpcy5fZXJyb3I9bix0aGlzLl9lcnJvcn19fTtmdW5jdGlvbiB3ZSh0KXtpZighdClyZXR1cm57fTtjb25zdHtlcnJvck1hcDplLGludmFsaWRfdHlwZV9lcnJvcjpuLHJlcXVpcmVkX2Vycm9yOnIsZGVzY3JpcHRpb246aX09dDtpZihlJiYobnx8cikpdGhyb3cgbmV3IEVycm9yKGBDYW4ndCB1c2UgImludmFsaWRfdHlwZV9lcnJvciIgb3IgInJlcXVpcmVkX2Vycm9yIiBpbiBjb25qdW5jdGlvbiB3aXRoIGN1c3RvbSBlcnJvciBtYXAuYCk7cmV0dXJuIGU/e2Vycm9yTWFwOmUsZGVzY3JpcHRpb246aX06e2Vycm9yTWFwOihsLHMpPT5sLmNvZGUhPT0iaW52YWxpZF90eXBlIj97bWVzc2FnZTpzLmRlZmF1bHRFcnJvcn06dHlwZW9mIHMuZGF0YT4idSI/e21lc3NhZ2U6cj8/cy5kZWZhdWx0RXJyb3J9OnttZXNzYWdlOm4/P3MuZGVmYXVsdEVycm9yfSxkZXNjcmlwdGlvbjppfX1jbGFzcyBDZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNwYT10aGlzLnNhZmVQYXJzZUFzeW5jLHRoaXMuX2RlZj1lLHRoaXMucGFyc2U9dGhpcy5wYXJzZS5iaW5kKHRoaXMpLHRoaXMuc2FmZVBhcnNlPXRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyksdGhpcy5wYXJzZUFzeW5jPXRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpLHRoaXMuc2FmZVBhcnNlQXN5bmM9dGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpLHRoaXMuc3BhPXRoaXMuc3BhLmJpbmQodGhpcyksdGhpcy5yZWZpbmU9dGhpcy5yZWZpbmUuYmluZCh0aGlzKSx0aGlzLnJlZmluZW1lbnQ9dGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyksdGhpcy5zdXBlclJlZmluZT10aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyksdGhpcy5vcHRpb25hbD10aGlzLm9wdGlvbmFsLmJpbmQodGhpcyksdGhpcy5udWxsYWJsZT10aGlzLm51bGxhYmxlLmJpbmQodGhpcyksdGhpcy5udWxsaXNoPXRoaXMubnVsbGlzaC5iaW5kKHRoaXMpLHRoaXMuYXJyYXk9dGhpcy5hcnJheS5iaW5kKHRoaXMpLHRoaXMucHJvbWlzZT10aGlzLnByb21pc2UuYmluZCh0aGlzKSx0aGlzLm9yPXRoaXMub3IuYmluZCh0aGlzKSx0aGlzLmFuZD10aGlzLmFuZC5iaW5kKHRoaXMpLHRoaXMudHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyksdGhpcy5icmFuZD10aGlzLmJyYW5kLmJpbmQodGhpcyksdGhpcy5kZWZhdWx0PXRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpLHRoaXMuY2F0Y2g9dGhpcy5jYXRjaC5iaW5kKHRoaXMpLHRoaXMuZGVzY3JpYmU9dGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpLHRoaXMucGlwZT10aGlzLnBpcGUuYmluZCh0aGlzKSx0aGlzLnJlYWRvbmx5PXRoaXMucmVhZG9ubHkuYmluZCh0aGlzKSx0aGlzLmlzTnVsbGFibGU9dGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyksdGhpcy5pc09wdGlvbmFsPXRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpfWdldCBkZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLl9kZWYuZGVzY3JpcHRpb259X2dldFR5cGUoZSl7cmV0dXJuIFdpKGUuZGF0YSl9X2dldE9yUmV0dXJuQ3R4KGUsbil7cmV0dXJuIG58fHtjb21tb246ZS5wYXJlbnQuY29tbW9uLGRhdGE6ZS5kYXRhLHBhcnNlZFR5cGU6V2koZS5kYXRhKSxzY2hlbWFFcnJvck1hcDp0aGlzLl9kZWYuZXJyb3JNYXAscGF0aDplLnBhdGgscGFyZW50OmUucGFyZW50fX1fcHJvY2Vzc0lucHV0UGFyYW1zKGUpe3JldHVybntzdGF0dXM6bmV3IGxuLGN0eDp7Y29tbW9uOmUucGFyZW50LmNvbW1vbixkYXRhOmUuZGF0YSxwYXJzZWRUeXBlOldpKGUuZGF0YSksc2NoZW1hRXJyb3JNYXA6dGhpcy5fZGVmLmVycm9yTWFwLHBhdGg6ZS5wYXRoLHBhcmVudDplLnBhcmVudH19fV9wYXJzZVN5bmMoZSl7Y29uc3Qgbj10aGlzLl9wYXJzZShlKTtpZihWZChuKSl0aHJvdyBuZXcgRXJyb3IoIlN5bmNocm9ub3VzIHBhcnNlIGVuY291bnRlcmVkIHByb21pc2UuIik7cmV0dXJuIG59X3BhcnNlQXN5bmMoZSl7Y29uc3Qgbj10aGlzLl9wYXJzZShlKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4pfXBhcnNlKGUsbil7Y29uc3Qgcj10aGlzLnNhZmVQYXJzZShlLG4pO2lmKHIuc3VjY2VzcylyZXR1cm4gci5kYXRhO3Rocm93IHIuZXJyb3J9c2FmZVBhcnNlKGUsbil7dmFyIHI7Y29uc3QgaT17Y29tbW9uOntpc3N1ZXM6W10sYXN5bmM6KHI9bj09bnVsbD92b2lkIDA6bi5hc3luYykhPT1udWxsJiZyIT09dm9pZCAwP3I6ITEsY29udGV4dHVhbEVycm9yTWFwOm49PW51bGw/dm9pZCAwOm4uZXJyb3JNYXB9LHBhdGg6KG49PW51bGw/dm9pZCAwOm4ucGF0aCl8fFtdLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXJlbnQ6bnVsbCxkYXRhOmUscGFyc2VkVHlwZTpXaShlKX0sbz10aGlzLl9wYXJzZVN5bmMoe2RhdGE6ZSxwYXRoOmkucGF0aCxwYXJlbnQ6aX0pO3JldHVybiB6eChpLG8pfWFzeW5jIHBhcnNlQXN5bmMoZSxuKXtjb25zdCByPWF3YWl0IHRoaXMuc2FmZVBhcnNlQXN5bmMoZSxuKTtpZihyLnN1Y2Nlc3MpcmV0dXJuIHIuZGF0YTt0aHJvdyByLmVycm9yfWFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsbil7Y29uc3Qgcj17Y29tbW9uOntpc3N1ZXM6W10sY29udGV4dHVhbEVycm9yTWFwOm49PW51bGw/dm9pZCAwOm4uZXJyb3JNYXAsYXN5bmM6ITB9LHBhdGg6KG49PW51bGw/dm9pZCAwOm4ucGF0aCl8fFtdLHNjaGVtYUVycm9yTWFwOnRoaXMuX2RlZi5lcnJvck1hcCxwYXJlbnQ6bnVsbCxkYXRhOmUscGFyc2VkVHlwZTpXaShlKX0saT10aGlzLl9wYXJzZSh7ZGF0YTplLHBhdGg6ci5wYXRoLHBhcmVudDpyfSksbz1hd2FpdChWZChpKT9pOlByb21pc2UucmVzb2x2ZShpKSk7cmV0dXJuIHp4KHIsbyl9cmVmaW5lKGUsbil7Y29uc3Qgcj1pPT50eXBlb2Ygbj09InN0cmluZyJ8fHR5cGVvZiBuPiJ1Ij97bWVzc2FnZTpufTp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uKGkpOm47cmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKGksbyk9Pntjb25zdCBsPWUoaSkscz0oKT0+by5hZGRJc3N1ZSh7Y29kZTpILmN1c3RvbSwuLi5yKGkpfSk7cmV0dXJuIHR5cGVvZiBQcm9taXNlPCJ1IiYmbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKGE9PmE/ITA6KHMoKSwhMSkpOmw/ITA6KHMoKSwhMSl9KX1yZWZpbmVtZW50KGUsbil7cmV0dXJuIHRoaXMuX3JlZmluZW1lbnQoKHIsaSk9PmUocik/ITA6KGkuYWRkSXNzdWUodHlwZW9mIG49PSJmdW5jdGlvbiI/bihyLGkpOm4pLCExKSl9X3JlZmluZW1lbnQoZSl7cmV0dXJuIG5ldyBUcih7c2NoZW1hOnRoaXMsdHlwZU5hbWU6ZGUuWm9kRWZmZWN0cyxlZmZlY3Q6e3R5cGU6InJlZmluZW1lbnQiLHJlZmluZW1lbnQ6ZX19KX1zdXBlclJlZmluZShlKXtyZXR1cm4gdGhpcy5fcmVmaW5lbWVudChlKX1vcHRpb25hbCgpe3JldHVybiBkaS5jcmVhdGUodGhpcyx0aGlzLl9kZWYpfW51bGxhYmxlKCl7cmV0dXJuIGlsLmNyZWF0ZSh0aGlzLHRoaXMuX2RlZil9bnVsbGlzaCgpe3JldHVybiB0aGlzLm51bGxhYmxlKCkub3B0aW9uYWwoKX1hcnJheSgpe3JldHVybiBici5jcmVhdGUodGhpcyx0aGlzLl9kZWYpfXByb21pc2UoKXtyZXR1cm4geHMuY3JlYXRlKHRoaXMsdGhpcy5fZGVmKX1vcihlKXtyZXR1cm4geGMuY3JlYXRlKFt0aGlzLGVdLHRoaXMuX2RlZil9YW5kKGUpe3JldHVybiBfYy5jcmVhdGUodGhpcyxlLHRoaXMuX2RlZil9dHJhbnNmb3JtKGUpe3JldHVybiBuZXcgVHIoey4uLndlKHRoaXMuX2RlZiksc2NoZW1hOnRoaXMsdHlwZU5hbWU6ZGUuWm9kRWZmZWN0cyxlZmZlY3Q6e3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOmV9fSl9ZGVmYXVsdChlKXtjb25zdCBuPXR5cGVvZiBlPT0iZnVuY3Rpb24iP2U6KCk9PmU7cmV0dXJuIG5ldyBiYyh7Li4ud2UodGhpcy5fZGVmKSxpbm5lclR5cGU6dGhpcyxkZWZhdWx0VmFsdWU6bix0eXBlTmFtZTpkZS5ab2REZWZhdWx0fSl9YnJhbmQoKXtyZXR1cm4gbmV3IEZDKHt0eXBlTmFtZTpkZS5ab2RCcmFuZGVkLHR5cGU6dGhpcywuLi53ZSh0aGlzLl9kZWYpfSl9Y2F0Y2goZSl7Y29uc3Qgbj10eXBlb2YgZT09ImZ1bmN0aW9uIj9lOigpPT5lO3JldHVybiBuZXcgWWQoey4uLndlKHRoaXMuX2RlZiksaW5uZXJUeXBlOnRoaXMsY2F0Y2hWYWx1ZTpuLHR5cGVOYW1lOmRlLlpvZENhdGNofSl9ZGVzY3JpYmUoZSl7Y29uc3Qgbj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiBuZXcgbih7Li4udGhpcy5fZGVmLGRlc2NyaXB0aW9uOmV9KX1waXBlKGUpe3JldHVybiBIYy5jcmVhdGUodGhpcyxlKX1yZWFkb25seSgpe3JldHVybiBKZC5jcmVhdGUodGhpcyl9aXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9aXNOdWxsYWJsZSgpe3JldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzfX1jb25zdCBFND0vXmNbXlxzLV17OCx9JC9pLEM0PS9eW2Etel1bYS16MC05XSokLyxiND0vXlswLTlBLUhKS01OUC1UVi1aXXsyNn0kLyxrND0vXlswLTlhLWZBLUZdezh9XGItWzAtOWEtZkEtRl17NH1cYi1bMC05YS1mQS1GXXs0fVxiLVswLTlhLWZBLUZdezR9XGItWzAtOWEtZkEtRl17MTJ9JC9pLCQ0PS9eKD8hXC4pKD8hLipcLlwuKShbQS1aMC05XystXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XC1dKlwuKStbQS1aXXsyLH0kL2ksVDQ9Il4oXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxwe0Vtb2ppX0NvbXBvbmVudH0pKyQiO2xldCBHcDtjb25zdCBOND0vXigoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpJC8sUjQ9L14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKSkkLyxPND10PT50LnByZWNpc2lvbj90Lm9mZnNldD9uZXcgUmVnRXhwKGBeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn1cXC5cXGR7JHt0LnByZWNpc2lvbn19KChbKy1dXFxkezJ9KDo/XFxkezJ9KT8pfFopJGApOm5ldyBSZWdFeHAoYF5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcLlxcZHske3QucHJlY2lzaW9ufX1aJGApOnQucHJlY2lzaW9uPT09MD90Lm9mZnNldD9uZXcgUmVnRXhwKCJeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oKFsrLV1cXGR7Mn0oOj9cXGR7Mn0pPyl8WikkIik6bmV3IFJlZ0V4cCgiXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9WiQiKTp0Lm9mZnNldD9uZXcgUmVnRXhwKCJeXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oXFwuXFxkKyk/KChbKy1dXFxkezJ9KDo/XFxkezJ9KT8pfFopJCIpOm5ldyBSZWdFeHAoIl5cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGQrKT9aJCIpO2Z1bmN0aW9uIFA0KHQsZSl7cmV0dXJuISEoKGU9PT0idjQifHwhZSkmJk40LnRlc3QodCl8fChlPT09InY2Inx8IWUpJiZSNC50ZXN0KHQpKX1jbGFzcyB3ciBleHRlbmRzIENle19wYXJzZShlKXtpZih0aGlzLl9kZWYuY29lcmNlJiYoZS5kYXRhPVN0cmluZyhlLmRhdGEpKSx0aGlzLl9nZXRUeXBlKGUpIT09US5zdHJpbmcpe2NvbnN0IG89dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIGVlKG8se2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6US5zdHJpbmcscmVjZWl2ZWQ6by5wYXJzZWRUeXBlfSksdmV9Y29uc3Qgcj1uZXcgbG47bGV0IGk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fZGVmLmNoZWNrcylpZihvLmtpbmQ9PT0ibWluIillLmRhdGEubGVuZ3RoPG8udmFsdWUmJihpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7Y29kZTpILnRvb19zbWFsbCxtaW5pbXVtOm8udmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITEsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoby5raW5kPT09Im1heCIpZS5kYXRhLmxlbmd0aD5vLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse2NvZGU6SC50b29fYmlnLG1heGltdW06by52YWx1ZSx0eXBlOiJzdHJpbmciLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0ibGVuZ3RoIil7Y29uc3QgbD1lLmRhdGEubGVuZ3RoPm8udmFsdWUscz1lLmRhdGEubGVuZ3RoPG8udmFsdWU7KGx8fHMpJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGw/ZWUoaSx7Y29kZTpILnRvb19iaWcsbWF4aW11bTpvLnZhbHVlLHR5cGU6InN0cmluZyIsaW5jbHVzaXZlOiEwLGV4YWN0OiEwLG1lc3NhZ2U6by5tZXNzYWdlfSk6cyYmZWUoaSx7Y29kZTpILnRvb19zbWFsbCxtaW5pbXVtOm8udmFsdWUsdHlwZToic3RyaW5nIixpbmNsdXNpdmU6ITAsZXhhY3Q6ITAsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpfWVsc2UgaWYoby5raW5kPT09ImVtYWlsIikkNC50ZXN0KGUuZGF0YSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7dmFsaWRhdGlvbjoiZW1haWwiLGNvZGU6SC5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0iZW1vamkiKUdwfHwoR3A9bmV3IFJlZ0V4cChUNCwidSIpKSxHcC50ZXN0KGUuZGF0YSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7dmFsaWRhdGlvbjoiZW1vamkiLGNvZGU6SC5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0idXVpZCIpazQudGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse3ZhbGlkYXRpb246InV1aWQiLGNvZGU6SC5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0iY3VpZCIpRTQudGVzdChlLmRhdGEpfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse3ZhbGlkYXRpb246ImN1aWQiLGNvZGU6SC5pbnZhbGlkX3N0cmluZyxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk7ZWxzZSBpZihvLmtpbmQ9PT0iY3VpZDIiKUM0LnRlc3QoZS5kYXRhKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxlZShpLHt2YWxpZGF0aW9uOiJjdWlkMiIsY29kZTpILmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJ1bGlkIiliNC50ZXN0KGUuZGF0YSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7dmFsaWRhdGlvbjoidWxpZCIsY29kZTpILmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTtlbHNlIGlmKG8ua2luZD09PSJ1cmwiKXRyeXtuZXcgVVJMKGUuZGF0YSl9Y2F0Y2h7aT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse3ZhbGlkYXRpb246InVybCIsY29kZTpILmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpfWVsc2Ugby5raW5kPT09InJlZ2V4Ij8oby5yZWdleC5sYXN0SW5kZXg9MCxvLnJlZ2V4LnRlc3QoZS5kYXRhKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxlZShpLHt2YWxpZGF0aW9uOiJyZWdleCIsY29kZTpILmludmFsaWRfc3RyaW5nLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKSk6by5raW5kPT09InRyaW0iP2UuZGF0YT1lLmRhdGEudHJpbSgpOm8ua2luZD09PSJpbmNsdWRlcyI/ZS5kYXRhLmluY2x1ZGVzKG8udmFsdWUsby5wb3NpdGlvbil8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7Y29kZTpILmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246e2luY2x1ZGVzOm8udmFsdWUscG9zaXRpb246by5wb3NpdGlvbn0sbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpOm8ua2luZD09PSJ0b0xvd2VyQ2FzZSI/ZS5kYXRhPWUuZGF0YS50b0xvd2VyQ2FzZSgpOm8ua2luZD09PSJ0b1VwcGVyQ2FzZSI/ZS5kYXRhPWUuZGF0YS50b1VwcGVyQ2FzZSgpOm8ua2luZD09PSJzdGFydHNXaXRoIj9lLmRhdGEuc3RhcnRzV2l0aChvLnZhbHVlKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxlZShpLHtjb2RlOkguaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjp7c3RhcnRzV2l0aDpvLnZhbHVlfSxtZXNzYWdlOm8ubWVzc2FnZX0pLHIuZGlydHkoKSk6by5raW5kPT09ImVuZHNXaXRoIj9lLmRhdGEuZW5kc1dpdGgoby52YWx1ZSl8fChpPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsaSksZWUoaSx7Y29kZTpILmludmFsaWRfc3RyaW5nLHZhbGlkYXRpb246e2VuZHNXaXRoOm8udmFsdWV9LG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTpvLmtpbmQ9PT0iZGF0ZXRpbWUiP080KG8pLnRlc3QoZS5kYXRhKXx8KGk9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxpKSxlZShpLHtjb2RlOkguaW52YWxpZF9zdHJpbmcsdmFsaWRhdGlvbjoiZGF0ZXRpbWUiLG1lc3NhZ2U6by5tZXNzYWdlfSksci5kaXJ0eSgpKTpvLmtpbmQ9PT0iaXAiP1A0KGUuZGF0YSxvLnZlcnNpb24pfHwoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse3ZhbGlkYXRpb246ImlwIixjb2RlOkguaW52YWxpZF9zdHJpbmcsbWVzc2FnZTpvLm1lc3NhZ2V9KSxyLmRpcnR5KCkpOkRlLmFzc2VydE5ldmVyKG8pO3JldHVybntzdGF0dXM6ci52YWx1ZSx2YWx1ZTplLmRhdGF9fV9yZWdleChlLG4scil7cmV0dXJuIHRoaXMucmVmaW5lbWVudChpPT5lLnRlc3QoaSkse3ZhbGlkYXRpb246bixjb2RlOkguaW52YWxpZF9zdHJpbmcsLi4udWUuZXJyVG9PYmoocil9KX1fYWRkQ2hlY2soZSl7cmV0dXJuIG5ldyB3cih7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyxlXX0pfWVtYWlsKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiZW1haWwiLC4uLnVlLmVyclRvT2JqKGUpfSl9dXJsKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoidXJsIiwuLi51ZS5lcnJUb09iaihlKX0pfWVtb2ppKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiZW1vamkiLC4uLnVlLmVyclRvT2JqKGUpfSl9dXVpZChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6InV1aWQiLC4uLnVlLmVyclRvT2JqKGUpfSl9Y3VpZChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImN1aWQiLC4uLnVlLmVyclRvT2JqKGUpfSl9Y3VpZDIoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJjdWlkMiIsLi4udWUuZXJyVG9PYmooZSl9KX11bGlkKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoidWxpZCIsLi4udWUuZXJyVG9PYmooZSl9KX1pcChlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImlwIiwuLi51ZS5lcnJUb09iaihlKX0pfWRhdGV0aW1lKGUpe3ZhciBuO3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/dGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImRhdGV0aW1lIixwcmVjaXNpb246bnVsbCxvZmZzZXQ6ITEsbWVzc2FnZTplfSk6dGhpcy5fYWRkQ2hlY2soe2tpbmQ6ImRhdGV0aW1lIixwcmVjaXNpb246dHlwZW9mKGU9PW51bGw/dm9pZCAwOmUucHJlY2lzaW9uKT4idSI/bnVsbDplPT1udWxsP3ZvaWQgMDplLnByZWNpc2lvbixvZmZzZXQ6KG49ZT09bnVsbD92b2lkIDA6ZS5vZmZzZXQpIT09bnVsbCYmbiE9PXZvaWQgMD9uOiExLC4uLnVlLmVyclRvT2JqKGU9PW51bGw/dm9pZCAwOmUubWVzc2FnZSl9KX1yZWdleChlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoicmVnZXgiLHJlZ2V4OmUsLi4udWUuZXJyVG9PYmoobil9KX1pbmNsdWRlcyhlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiaW5jbHVkZXMiLHZhbHVlOmUscG9zaXRpb246bj09bnVsbD92b2lkIDA6bi5wb3NpdGlvbiwuLi51ZS5lcnJUb09iaihuPT1udWxsP3ZvaWQgMDpuLm1lc3NhZ2UpfSl9c3RhcnRzV2l0aChlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoic3RhcnRzV2l0aCIsdmFsdWU6ZSwuLi51ZS5lcnJUb09iaihuKX0pfWVuZHNXaXRoKGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJlbmRzV2l0aCIsdmFsdWU6ZSwuLi51ZS5lcnJUb09iaihuKX0pfW1pbihlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWluIix2YWx1ZTplLC4uLnVlLmVyclRvT2JqKG4pfSl9bWF4KGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOmUsLi4udWUuZXJyVG9PYmoobil9KX1sZW5ndGgoZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Imxlbmd0aCIsdmFsdWU6ZSwuLi51ZS5lcnJUb09iaihuKX0pfW5vbmVtcHR5KGUpe3JldHVybiB0aGlzLm1pbigxLHVlLmVyclRvT2JqKGUpKX10cmltKCl7cmV0dXJuIG5ldyB3cih7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDoidHJpbSJ9XX0pfXRvTG93ZXJDYXNlKCl7cmV0dXJuIG5ldyB3cih7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDoidG9Mb3dlckNhc2UifV19KX10b1VwcGVyQ2FzZSgpe3JldHVybiBuZXcgd3Ioey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3Mse2tpbmQ6InRvVXBwZXJDYXNlIn1dfSl9Z2V0IGlzRGF0ZXRpbWUoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0iZGF0ZXRpbWUiKX1nZXQgaXNFbWFpbCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJlbWFpbCIpfWdldCBpc1VSTCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJ1cmwiKX1nZXQgaXNFbW9qaSgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJlbW9qaSIpfWdldCBpc1VVSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0idXVpZCIpfWdldCBpc0NVSUQoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0iY3VpZCIpfWdldCBpc0NVSUQyKCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09ImN1aWQyIil9Z2V0IGlzVUxJRCgpe3JldHVybiEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKGU9PmUua2luZD09PSJ1bGlkIil9Z2V0IGlzSVAoKXtyZXR1cm4hIXRoaXMuX2RlZi5jaGVja3MuZmluZChlPT5lLmtpbmQ9PT0iaXAiKX1nZXQgbWluTGVuZ3RoKCl7bGV0IGU9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtaW4iJiYoZT09PW51bGx8fG4udmFsdWU+ZSkmJihlPW4udmFsdWUpO3JldHVybiBlfWdldCBtYXhMZW5ndGgoKXtsZXQgZT1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1heCImJihlPT09bnVsbHx8bi52YWx1ZTxlKSYmKGU9bi52YWx1ZSk7cmV0dXJuIGV9fXdyLmNyZWF0ZT10PT57dmFyIGU7cmV0dXJuIG5ldyB3cih7Y2hlY2tzOltdLHR5cGVOYW1lOmRlLlpvZFN0cmluZyxjb2VyY2U6KGU9dD09bnVsbD92b2lkIDA6dC5jb2VyY2UpIT09bnVsbCYmZSE9PXZvaWQgMD9lOiExLC4uLndlKHQpfSl9O2Z1bmN0aW9uIEE0KHQsZSl7Y29uc3Qgbj0odC50b1N0cmluZygpLnNwbGl0KCIuIilbMV18fCIiKS5sZW5ndGgscj0oZS50b1N0cmluZygpLnNwbGl0KCIuIilbMV18fCIiKS5sZW5ndGgsaT1uPnI/bjpyLG89cGFyc2VJbnQodC50b0ZpeGVkKGkpLnJlcGxhY2UoIi4iLCIiKSksbD1wYXJzZUludChlLnRvRml4ZWQoaSkucmVwbGFjZSgiLiIsIiIpKTtyZXR1cm4gbyVsL01hdGgucG93KDEwLGkpfWNsYXNzIHBvIGV4dGVuZHMgQ2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWluPXRoaXMuZ3RlLHRoaXMubWF4PXRoaXMubHRlLHRoaXMuc3RlcD10aGlzLm11bHRpcGxlT2Z9X3BhcnNlKGUpe2lmKHRoaXMuX2RlZi5jb2VyY2UmJihlLmRhdGE9TnVtYmVyKGUuZGF0YSkpLHRoaXMuX2dldFR5cGUoZSkhPT1RLm51bWJlcil7Y29uc3Qgbz10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUobyx7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm51bWJlcixyZWNlaXZlZDpvLnBhcnNlZFR5cGV9KSx2ZX1sZXQgcjtjb25zdCBpPW5ldyBsbjtmb3IoY29uc3QgbyBvZiB0aGlzLl9kZWYuY2hlY2tzKW8ua2luZD09PSJpbnQiP0RlLmlzSW50ZWdlcihlLmRhdGEpfHwocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLGVlKHIse2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6ImludGVnZXIiLHJlY2VpdmVkOiJmbG9hdCIsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtaW4iPyhvLmluY2x1c2l2ZT9lLmRhdGE8by52YWx1ZTplLmRhdGE8PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLGVlKHIse2NvZGU6SC50b29fc21hbGwsbWluaW11bTpvLnZhbHVlLHR5cGU6Im51bWJlciIsaW5jbHVzaXZlOm8uaW5jbHVzaXZlLGV4YWN0OiExLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpvLmtpbmQ9PT0ibWF4Ij8oby5pbmNsdXNpdmU/ZS5kYXRhPm8udmFsdWU6ZS5kYXRhPj1vLnZhbHVlKSYmKHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxyKSxlZShyLHtjb2RlOkgudG9vX2JpZyxtYXhpbXVtOm8udmFsdWUsdHlwZToibnVtYmVyIixpbmNsdXNpdmU6by5pbmNsdXNpdmUsZXhhY3Q6ITEsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtdWx0aXBsZU9mIj9BNChlLmRhdGEsby52YWx1ZSkhPT0wJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLGVlKHIse2NvZGU6SC5ub3RfbXVsdGlwbGVfb2YsbXVsdGlwbGVPZjpvLnZhbHVlLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpvLmtpbmQ9PT0iZmluaXRlIj9OdW1iZXIuaXNGaW5pdGUoZS5kYXRhKXx8KHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSxyKSxlZShyLHtjb2RlOkgubm90X2Zpbml0ZSxtZXNzYWdlOm8ubWVzc2FnZX0pLGkuZGlydHkoKSk6RGUuYXNzZXJ0TmV2ZXIobyk7cmV0dXJue3N0YXR1czppLnZhbHVlLHZhbHVlOmUuZGF0YX19Z3RlKGUsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1pbiIsZSwhMCx1ZS50b1N0cmluZyhuKSl9Z3QoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIixlLCExLHVlLnRvU3RyaW5nKG4pKX1sdGUoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWF4IixlLCEwLHVlLnRvU3RyaW5nKG4pKX1sdChlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLGUsITEsdWUudG9TdHJpbmcobikpfXNldExpbWl0KGUsbixyLGkpe3JldHVybiBuZXcgcG8oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3Mse2tpbmQ6ZSx2YWx1ZTpuLGluY2x1c2l2ZTpyLG1lc3NhZ2U6dWUudG9TdHJpbmcoaSl9XX0pfV9hZGRDaGVjayhlKXtyZXR1cm4gbmV3IHBvKHsuLi50aGlzLl9kZWYsY2hlY2tzOlsuLi50aGlzLl9kZWYuY2hlY2tzLGVdfSl9aW50KGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoiaW50IixtZXNzYWdlOnVlLnRvU3RyaW5nKGUpfSl9cG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOjAsaW5jbHVzaXZlOiExLG1lc3NhZ2U6dWUudG9TdHJpbmcoZSl9KX1uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1heCIsdmFsdWU6MCxpbmNsdXNpdmU6ITEsbWVzc2FnZTp1ZS50b1N0cmluZyhlKX0pfW5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTowLGluY2x1c2l2ZTohMCxtZXNzYWdlOnVlLnRvU3RyaW5nKGUpfSl9bm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtaW4iLHZhbHVlOjAsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6dWUudG9TdHJpbmcoZSl9KX1tdWx0aXBsZU9mKGUsbil7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtdWx0aXBsZU9mIix2YWx1ZTplLG1lc3NhZ2U6dWUudG9TdHJpbmcobil9KX1maW5pdGUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJmaW5pdGUiLG1lc3NhZ2U6dWUudG9TdHJpbmcoZSl9KX1zYWZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWluIixpbmNsdXNpdmU6ITAsdmFsdWU6TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsbWVzc2FnZTp1ZS50b1N0cmluZyhlKX0pLl9hZGRDaGVjayh7a2luZDoibWF4IixpbmNsdXNpdmU6ITAsdmFsdWU6TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsbWVzc2FnZTp1ZS50b1N0cmluZyhlKX0pfWdldCBtaW5WYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWluIiYmKGU9PT1udWxsfHxuLnZhbHVlPmUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZX1nZXQgbWF4VmFsdWUoKXtsZXQgZT1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1heCImJihlPT09bnVsbHx8bi52YWx1ZTxlKSYmKGU9bi52YWx1ZSk7cmV0dXJuIGV9Z2V0IGlzSW50KCl7cmV0dXJuISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoZT0+ZS5raW5kPT09ImludCJ8fGUua2luZD09PSJtdWx0aXBsZU9mIiYmRGUuaXNJbnRlZ2VyKGUudmFsdWUpKX1nZXQgaXNGaW5pdGUoKXtsZXQgZT1udWxsLG49bnVsbDtmb3IoY29uc3QgciBvZiB0aGlzLl9kZWYuY2hlY2tzKXtpZihyLmtpbmQ9PT0iZmluaXRlInx8ci5raW5kPT09ImludCJ8fHIua2luZD09PSJtdWx0aXBsZU9mIilyZXR1cm4hMDtyLmtpbmQ9PT0ibWluIj8obj09PW51bGx8fHIudmFsdWU+bikmJihuPXIudmFsdWUpOnIua2luZD09PSJtYXgiJiYoZT09PW51bGx8fHIudmFsdWU8ZSkmJihlPXIudmFsdWUpfXJldHVybiBOdW1iZXIuaXNGaW5pdGUobikmJk51bWJlci5pc0Zpbml0ZShlKX19cG8uY3JlYXRlPXQ9Pm5ldyBwbyh7Y2hlY2tzOltdLHR5cGVOYW1lOmRlLlpvZE51bWJlcixjb2VyY2U6KHQ9PW51bGw/dm9pZCAwOnQuY29lcmNlKXx8ITEsLi4ud2UodCl9KTtjbGFzcyBobyBleHRlbmRzIENle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1pbj10aGlzLmd0ZSx0aGlzLm1heD10aGlzLmx0ZX1fcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT1CaWdJbnQoZS5kYXRhKSksdGhpcy5fZ2V0VHlwZShlKSE9PVEuYmlnaW50KXtjb25zdCBvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBlZShvLHtjb2RlOkguaW52YWxpZF90eXBlLGV4cGVjdGVkOlEuYmlnaW50LHJlY2VpdmVkOm8ucGFyc2VkVHlwZX0pLHZlfWxldCByO2NvbnN0IGk9bmV3IGxuO2Zvcihjb25zdCBvIG9mIHRoaXMuX2RlZi5jaGVja3Mpby5raW5kPT09Im1pbiI/KG8uaW5jbHVzaXZlP2UuZGF0YTxvLnZhbHVlOmUuZGF0YTw9by52YWx1ZSkmJihyPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUsciksZWUocix7Y29kZTpILnRvb19zbWFsbCx0eXBlOiJiaWdpbnQiLG1pbmltdW06by52YWx1ZSxpbmNsdXNpdmU6by5pbmNsdXNpdmUsbWVzc2FnZTpvLm1lc3NhZ2V9KSxpLmRpcnR5KCkpOm8ua2luZD09PSJtYXgiPyhvLmluY2x1c2l2ZT9lLmRhdGE+by52YWx1ZTplLmRhdGE+PW8udmFsdWUpJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLGVlKHIse2NvZGU6SC50b29fYmlnLHR5cGU6ImJpZ2ludCIsbWF4aW11bTpvLnZhbHVlLGluY2x1c2l2ZTpvLmluY2x1c2l2ZSxtZXNzYWdlOm8ubWVzc2FnZX0pLGkuZGlydHkoKSk6by5raW5kPT09Im11bHRpcGxlT2YiP2UuZGF0YSVvLnZhbHVlIT09QmlnSW50KDApJiYocj10aGlzLl9nZXRPclJldHVybkN0eChlLHIpLGVlKHIse2NvZGU6SC5ub3RfbXVsdGlwbGVfb2YsbXVsdGlwbGVPZjpvLnZhbHVlLG1lc3NhZ2U6by5tZXNzYWdlfSksaS5kaXJ0eSgpKTpEZS5hc3NlcnROZXZlcihvKTtyZXR1cm57c3RhdHVzOmkudmFsdWUsdmFsdWU6ZS5kYXRhfX1ndGUoZSxuKXtyZXR1cm4gdGhpcy5zZXRMaW1pdCgibWluIixlLCEwLHVlLnRvU3RyaW5nKG4pKX1ndChlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtaW4iLGUsITEsdWUudG9TdHJpbmcobikpfWx0ZShlLG4pe3JldHVybiB0aGlzLnNldExpbWl0KCJtYXgiLGUsITAsdWUudG9TdHJpbmcobikpfWx0KGUsbil7cmV0dXJuIHRoaXMuc2V0TGltaXQoIm1heCIsZSwhMSx1ZS50b1N0cmluZyhuKSl9c2V0TGltaXQoZSxuLHIsaSl7cmV0dXJuIG5ldyBobyh7Li4udGhpcy5fZGVmLGNoZWNrczpbLi4udGhpcy5fZGVmLmNoZWNrcyx7a2luZDplLHZhbHVlOm4saW5jbHVzaXZlOnIsbWVzc2FnZTp1ZS50b1N0cmluZyhpKX1dfSl9X2FkZENoZWNrKGUpe3JldHVybiBuZXcgaG8oey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3MsZV19KX1wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6QmlnSW50KDApLGluY2x1c2l2ZTohMSxtZXNzYWdlOnVlLnRvU3RyaW5nKGUpfSl9bmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuX2FkZENoZWNrKHtraW5kOiJtYXgiLHZhbHVlOkJpZ0ludCgwKSxpbmNsdXNpdmU6ITEsbWVzc2FnZTp1ZS50b1N0cmluZyhlKX0pfW5vbnBvc2l0aXZlKGUpe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTpCaWdJbnQoMCksaW5jbHVzaXZlOiEwLG1lc3NhZ2U6dWUudG9TdHJpbmcoZSl9KX1ub25uZWdhdGl2ZShlKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6QmlnSW50KDApLGluY2x1c2l2ZTohMCxtZXNzYWdlOnVlLnRvU3RyaW5nKGUpfSl9bXVsdGlwbGVPZihlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibXVsdGlwbGVPZiIsdmFsdWU6ZSxtZXNzYWdlOnVlLnRvU3RyaW5nKG4pfSl9Z2V0IG1pblZhbHVlKCl7bGV0IGU9bnVsbDtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYuY2hlY2tzKW4ua2luZD09PSJtaW4iJiYoZT09PW51bGx8fG4udmFsdWU+ZSkmJihlPW4udmFsdWUpO3JldHVybiBlfWdldCBtYXhWYWx1ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWF4IiYmKGU9PT1udWxsfHxuLnZhbHVlPGUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZX19aG8uY3JlYXRlPXQ9Pnt2YXIgZTtyZXR1cm4gbmV3IGhvKHtjaGVja3M6W10sdHlwZU5hbWU6ZGUuWm9kQmlnSW50LGNvZXJjZTooZT10PT1udWxsP3ZvaWQgMDp0LmNvZXJjZSkhPT1udWxsJiZlIT09dm9pZCAwP2U6ITEsLi4ud2UodCl9KX07Y2xhc3MgZ2MgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT0hIWUuZGF0YSksdGhpcy5fZ2V0VHlwZShlKSE9PVEuYm9vbGVhbil7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLmJvb2xlYW4scmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksdmV9cmV0dXJuIF9uKGUuZGF0YSl9fWdjLmNyZWF0ZT10PT5uZXcgZ2Moe3R5cGVOYW1lOmRlLlpvZEJvb2xlYW4sY29lcmNlOih0PT1udWxsP3ZvaWQgMDp0LmNvZXJjZSl8fCExLC4uLndlKHQpfSk7Y2xhc3MgbmwgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZGVmLmNvZXJjZSYmKGUuZGF0YT1uZXcgRGF0ZShlLmRhdGEpKSx0aGlzLl9nZXRUeXBlKGUpIT09US5kYXRlKXtjb25zdCBvPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBlZShvLHtjb2RlOkguaW52YWxpZF90eXBlLGV4cGVjdGVkOlEuZGF0ZSxyZWNlaXZlZDpvLnBhcnNlZFR5cGV9KSx2ZX1pZihpc05hTihlLmRhdGEuZ2V0VGltZSgpKSl7Y29uc3Qgbz10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUobyx7Y29kZTpILmludmFsaWRfZGF0ZX0pLHZlfWNvbnN0IHI9bmV3IGxuO2xldCBpO2Zvcihjb25zdCBvIG9mIHRoaXMuX2RlZi5jaGVja3Mpby5raW5kPT09Im1pbiI/ZS5kYXRhLmdldFRpbWUoKTxvLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse2NvZGU6SC50b29fc21hbGwsbWVzc2FnZTpvLm1lc3NhZ2UsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1pbmltdW06by52YWx1ZSx0eXBlOiJkYXRlIn0pLHIuZGlydHkoKSk6by5raW5kPT09Im1heCI/ZS5kYXRhLmdldFRpbWUoKT5vLnZhbHVlJiYoaT10aGlzLl9nZXRPclJldHVybkN0eChlLGkpLGVlKGkse2NvZGU6SC50b29fYmlnLG1lc3NhZ2U6by5tZXNzYWdlLGluY2x1c2l2ZTohMCxleGFjdDohMSxtYXhpbXVtOm8udmFsdWUsdHlwZToiZGF0ZSJ9KSxyLmRpcnR5KCkpOkRlLmFzc2VydE5ldmVyKG8pO3JldHVybntzdGF0dXM6ci52YWx1ZSx2YWx1ZTpuZXcgRGF0ZShlLmRhdGEuZ2V0VGltZSgpKX19X2FkZENoZWNrKGUpe3JldHVybiBuZXcgbmwoey4uLnRoaXMuX2RlZixjaGVja3M6Wy4uLnRoaXMuX2RlZi5jaGVja3MsZV19KX1taW4oZSxuKXtyZXR1cm4gdGhpcy5fYWRkQ2hlY2soe2tpbmQ6Im1pbiIsdmFsdWU6ZS5nZXRUaW1lKCksbWVzc2FnZTp1ZS50b1N0cmluZyhuKX0pfW1heChlLG4pe3JldHVybiB0aGlzLl9hZGRDaGVjayh7a2luZDoibWF4Iix2YWx1ZTplLmdldFRpbWUoKSxtZXNzYWdlOnVlLnRvU3RyaW5nKG4pfSl9Z2V0IG1pbkRhdGUoKXtsZXQgZT1udWxsO2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi5jaGVja3Mpbi5raW5kPT09Im1pbiImJihlPT09bnVsbHx8bi52YWx1ZT5lKSYmKGU9bi52YWx1ZSk7cmV0dXJuIGUhPW51bGw/bmV3IERhdGUoZSk6bnVsbH1nZXQgbWF4RGF0ZSgpe2xldCBlPW51bGw7Zm9yKGNvbnN0IG4gb2YgdGhpcy5fZGVmLmNoZWNrcyluLmtpbmQ9PT0ibWF4IiYmKGU9PT1udWxsfHxuLnZhbHVlPGUpJiYoZT1uLnZhbHVlKTtyZXR1cm4gZSE9bnVsbD9uZXcgRGF0ZShlKTpudWxsfX1ubC5jcmVhdGU9dD0+bmV3IG5sKHtjaGVja3M6W10sY29lcmNlOih0PT1udWxsP3ZvaWQgMDp0LmNvZXJjZSl8fCExLHR5cGVOYW1lOmRlLlpvZERhdGUsLi4ud2UodCl9KTtjbGFzcyBLZCBleHRlbmRzIENle19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09US5zeW1ib2wpe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIGVlKHIse2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6US5zeW1ib2wscmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksdmV9cmV0dXJuIF9uKGUuZGF0YSl9fUtkLmNyZWF0ZT10PT5uZXcgS2Qoe3R5cGVOYW1lOmRlLlpvZFN5bWJvbCwuLi53ZSh0KX0pO2NsYXNzIHZjIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2dldFR5cGUoZSkhPT1RLnVuZGVmaW5lZCl7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLnVuZGVmaW5lZCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZX1yZXR1cm4gX24oZS5kYXRhKX19dmMuY3JlYXRlPXQ9Pm5ldyB2Yyh7dHlwZU5hbWU6ZGUuWm9kVW5kZWZpbmVkLC4uLndlKHQpfSk7Y2xhc3MgeWMgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodGhpcy5fZ2V0VHlwZShlKSE9PVEubnVsbCl7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm51bGwscmVjZWl2ZWQ6ci5wYXJzZWRUeXBlfSksdmV9cmV0dXJuIF9uKGUuZGF0YSl9fXljLmNyZWF0ZT10PT5uZXcgeWMoe3R5cGVOYW1lOmRlLlpvZE51bGwsLi4ud2UodCl9KTtjbGFzcyB5cyBleHRlbmRzIENle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9hbnk9ITB9X3BhcnNlKGUpe3JldHVybiBfbihlLmRhdGEpfX15cy5jcmVhdGU9dD0+bmV3IHlzKHt0eXBlTmFtZTpkZS5ab2RBbnksLi4ud2UodCl9KTtjbGFzcyBIbyBleHRlbmRzIENle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl91bmtub3duPSEwfV9wYXJzZShlKXtyZXR1cm4gX24oZS5kYXRhKX19SG8uY3JlYXRlPXQ9Pm5ldyBIbyh7dHlwZU5hbWU6ZGUuWm9kVW5rbm93biwuLi53ZSh0KX0pO2NsYXNzIGdpIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0IG49dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIGVlKG4se2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6US5uZXZlcixyZWNlaXZlZDpuLnBhcnNlZFR5cGV9KSx2ZX19Z2kuY3JlYXRlPXQ9Pm5ldyBnaSh7dHlwZU5hbWU6ZGUuWm9kTmV2ZXIsLi4ud2UodCl9KTtjbGFzcyBaZCBleHRlbmRzIENle19wYXJzZShlKXtpZih0aGlzLl9nZXRUeXBlKGUpIT09US51bmRlZmluZWQpe2NvbnN0IHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7cmV0dXJuIGVlKHIse2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6US52b2lkLHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlfXJldHVybiBfbihlLmRhdGEpfX1aZC5jcmVhdGU9dD0+bmV3IFpkKHt0eXBlTmFtZTpkZS5ab2RWb2lkLC4uLndlKHQpfSk7Y2xhc3MgYnIgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3R7Y3R4Om4sc3RhdHVzOnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxpPXRoaXMuX2RlZjtpZihuLnBhcnNlZFR5cGUhPT1RLmFycmF5KXJldHVybiBlZShuLHtjb2RlOkguaW52YWxpZF90eXBlLGV4cGVjdGVkOlEuYXJyYXkscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmU7aWYoaS5leGFjdExlbmd0aCE9PW51bGwpe2NvbnN0IGw9bi5kYXRhLmxlbmd0aD5pLmV4YWN0TGVuZ3RoLnZhbHVlLHM9bi5kYXRhLmxlbmd0aDxpLmV4YWN0TGVuZ3RoLnZhbHVlOyhsfHxzKSYmKGVlKG4se2NvZGU6bD9ILnRvb19iaWc6SC50b29fc21hbGwsbWluaW11bTpzP2kuZXhhY3RMZW5ndGgudmFsdWU6dm9pZCAwLG1heGltdW06bD9pLmV4YWN0TGVuZ3RoLnZhbHVlOnZvaWQgMCx0eXBlOiJhcnJheSIsaW5jbHVzaXZlOiEwLGV4YWN0OiEwLG1lc3NhZ2U6aS5leGFjdExlbmd0aC5tZXNzYWdlfSksci5kaXJ0eSgpKX1pZihpLm1pbkxlbmd0aCE9PW51bGwmJm4uZGF0YS5sZW5ndGg8aS5taW5MZW5ndGgudmFsdWUmJihlZShuLHtjb2RlOkgudG9vX3NtYWxsLG1pbmltdW06aS5taW5MZW5ndGgudmFsdWUsdHlwZToiYXJyYXkiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOmkubWluTGVuZ3RoLm1lc3NhZ2V9KSxyLmRpcnR5KCkpLGkubWF4TGVuZ3RoIT09bnVsbCYmbi5kYXRhLmxlbmd0aD5pLm1heExlbmd0aC52YWx1ZSYmKGVlKG4se2NvZGU6SC50b29fYmlnLG1heGltdW06aS5tYXhMZW5ndGgudmFsdWUsdHlwZToiYXJyYXkiLGluY2x1c2l2ZTohMCxleGFjdDohMSxtZXNzYWdlOmkubWF4TGVuZ3RoLm1lc3NhZ2V9KSxyLmRpcnR5KCkpLG4uY29tbW9uLmFzeW5jKXJldHVybiBQcm9taXNlLmFsbChbLi4ubi5kYXRhXS5tYXAoKGwscyk9PmkudHlwZS5fcGFyc2VBc3luYyhuZXcgS3IobixsLG4ucGF0aCxzKSkpKS50aGVuKGw9PmxuLm1lcmdlQXJyYXkocixsKSk7Y29uc3Qgbz1bLi4ubi5kYXRhXS5tYXAoKGwscyk9PmkudHlwZS5fcGFyc2VTeW5jKG5ldyBLcihuLGwsbi5wYXRoLHMpKSk7cmV0dXJuIGxuLm1lcmdlQXJyYXkocixvKX1nZXQgZWxlbWVudCgpe3JldHVybiB0aGlzLl9kZWYudHlwZX1taW4oZSxuKXtyZXR1cm4gbmV3IGJyKHsuLi50aGlzLl9kZWYsbWluTGVuZ3RoOnt2YWx1ZTplLG1lc3NhZ2U6dWUudG9TdHJpbmcobil9fSl9bWF4KGUsbil7cmV0dXJuIG5ldyBicih7Li4udGhpcy5fZGVmLG1heExlbmd0aDp7dmFsdWU6ZSxtZXNzYWdlOnVlLnRvU3RyaW5nKG4pfX0pfWxlbmd0aChlLG4pe3JldHVybiBuZXcgYnIoey4uLnRoaXMuX2RlZixleGFjdExlbmd0aDp7dmFsdWU6ZSxtZXNzYWdlOnVlLnRvU3RyaW5nKG4pfX0pfW5vbmVtcHR5KGUpe3JldHVybiB0aGlzLm1pbigxLGUpfX1ici5jcmVhdGU9KHQsZSk9Pm5ldyBicih7dHlwZTp0LG1pbkxlbmd0aDpudWxsLG1heExlbmd0aDpudWxsLGV4YWN0TGVuZ3RoOm51bGwsdHlwZU5hbWU6ZGUuWm9kQXJyYXksLi4ud2UoZSl9KTtmdW5jdGlvbiBSbCh0KXtpZih0IGluc3RhbmNlb2YgdXQpe2NvbnN0IGU9e307Zm9yKGNvbnN0IG4gaW4gdC5zaGFwZSl7Y29uc3Qgcj10LnNoYXBlW25dO2Vbbl09ZGkuY3JlYXRlKFJsKHIpKX1yZXR1cm4gbmV3IHV0KHsuLi50Ll9kZWYsc2hhcGU6KCk9PmV9KX1lbHNlIHJldHVybiB0IGluc3RhbmNlb2YgYnI/bmV3IGJyKHsuLi50Ll9kZWYsdHlwZTpSbCh0LmVsZW1lbnQpfSk6dCBpbnN0YW5jZW9mIGRpP2RpLmNyZWF0ZShSbCh0LnVud3JhcCgpKSk6dCBpbnN0YW5jZW9mIGlsP2lsLmNyZWF0ZShSbCh0LnVud3JhcCgpKSk6dCBpbnN0YW5jZW9mIFpyP1pyLmNyZWF0ZSh0Lml0ZW1zLm1hcChlPT5SbChlKSkpOnR9Y2xhc3MgdXQgZXh0ZW5kcyBDZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fY2FjaGVkPW51bGwsdGhpcy5ub25zdHJpY3Q9dGhpcy5wYXNzdGhyb3VnaCx0aGlzLmF1Z21lbnQ9dGhpcy5leHRlbmR9X2dldENhY2hlZCgpe2lmKHRoaXMuX2NhY2hlZCE9PW51bGwpcmV0dXJuIHRoaXMuX2NhY2hlZDtjb25zdCBlPXRoaXMuX2RlZi5zaGFwZSgpLG49RGUub2JqZWN0S2V5cyhlKTtyZXR1cm4gdGhpcy5fY2FjaGVkPXtzaGFwZTplLGtleXM6bn19X3BhcnNlKGUpe2lmKHRoaXMuX2dldFR5cGUoZSkhPT1RLm9iamVjdCl7Y29uc3QgYz10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUoYyx7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm9iamVjdCxyZWNlaXZlZDpjLnBhcnNlZFR5cGV9KSx2ZX1jb25zdHtzdGF0dXM6cixjdHg6aX09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHtzaGFwZTpvLGtleXM6bH09dGhpcy5fZ2V0Q2FjaGVkKCkscz1bXTtpZighKHRoaXMuX2RlZi5jYXRjaGFsbCBpbnN0YW5jZW9mIGdpJiZ0aGlzLl9kZWYudW5rbm93bktleXM9PT0ic3RyaXAiKSlmb3IoY29uc3QgYyBpbiBpLmRhdGEpbC5pbmNsdWRlcyhjKXx8cy5wdXNoKGMpO2NvbnN0IGE9W107Zm9yKGNvbnN0IGMgb2YgbCl7Y29uc3QgdT1vW2NdLGQ9aS5kYXRhW2NdO2EucHVzaCh7a2V5OntzdGF0dXM6InZhbGlkIix2YWx1ZTpjfSx2YWx1ZTp1Ll9wYXJzZShuZXcgS3IoaSxkLGkucGF0aCxjKSksYWx3YXlzU2V0OmMgaW4gaS5kYXRhfSl9aWYodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgZ2kpe2NvbnN0IGM9dGhpcy5fZGVmLnVua25vd25LZXlzO2lmKGM9PT0icGFzc3Rocm91Z2giKWZvcihjb25zdCB1IG9mIHMpYS5wdXNoKHtrZXk6e3N0YXR1czoidmFsaWQiLHZhbHVlOnV9LHZhbHVlOntzdGF0dXM6InZhbGlkIix2YWx1ZTppLmRhdGFbdV19fSk7ZWxzZSBpZihjPT09InN0cmljdCIpcy5sZW5ndGg+MCYmKGVlKGkse2NvZGU6SC51bnJlY29nbml6ZWRfa2V5cyxrZXlzOnN9KSxyLmRpcnR5KCkpO2Vsc2UgaWYoYyE9PSJzdHJpcCIpdGhyb3cgbmV3IEVycm9yKCJJbnRlcm5hbCBab2RPYmplY3QgZXJyb3I6IGludmFsaWQgdW5rbm93bktleXMgdmFsdWUuIil9ZWxzZXtjb25zdCBjPXRoaXMuX2RlZi5jYXRjaGFsbDtmb3IoY29uc3QgdSBvZiBzKXtjb25zdCBkPWkuZGF0YVt1XTthLnB1c2goe2tleTp7c3RhdHVzOiJ2YWxpZCIsdmFsdWU6dX0sdmFsdWU6Yy5fcGFyc2UobmV3IEtyKGksZCxpLnBhdGgsdSkpLGFsd2F5c1NldDp1IGluIGkuZGF0YX0pfX1yZXR1cm4gaS5jb21tb24uYXN5bmM/UHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYygpPT57Y29uc3QgYz1bXTtmb3IoY29uc3QgdSBvZiBhKXtjb25zdCBkPWF3YWl0IHUua2V5O2MucHVzaCh7a2V5OmQsdmFsdWU6YXdhaXQgdS52YWx1ZSxhbHdheXNTZXQ6dS5hbHdheXNTZXR9KX1yZXR1cm4gY30pLnRoZW4oYz0+bG4ubWVyZ2VPYmplY3RTeW5jKHIsYykpOmxuLm1lcmdlT2JqZWN0U3luYyhyLGEpfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9kZWYuc2hhcGUoKX1zdHJpY3QoZSl7cmV0dXJuIHVlLmVyclRvT2JqLG5ldyB1dCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpY3QiLC4uLmUhPT12b2lkIDA/e2Vycm9yTWFwOihuLHIpPT57dmFyIGksbyxsLHM7Y29uc3QgYT0obD0obz0oaT10aGlzLl9kZWYpLmVycm9yTWFwKT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8uY2FsbChpLG4scikubWVzc2FnZSkhPT1udWxsJiZsIT09dm9pZCAwP2w6ci5kZWZhdWx0RXJyb3I7cmV0dXJuIG4uY29kZT09PSJ1bnJlY29nbml6ZWRfa2V5cyI/e21lc3NhZ2U6KHM9dWUuZXJyVG9PYmooZSkubWVzc2FnZSkhPT1udWxsJiZzIT09dm9pZCAwP3M6YX06e21lc3NhZ2U6YX19fTp7fX0pfXN0cmlwKCl7cmV0dXJuIG5ldyB1dCh7Li4udGhpcy5fZGVmLHVua25vd25LZXlzOiJzdHJpcCJ9KX1wYXNzdGhyb3VnaCgpe3JldHVybiBuZXcgdXQoey4uLnRoaXMuX2RlZix1bmtub3duS2V5czoicGFzc3Rocm91Z2gifSl9ZXh0ZW5kKGUpe3JldHVybiBuZXcgdXQoey4uLnRoaXMuX2RlZixzaGFwZTooKT0+KHsuLi50aGlzLl9kZWYuc2hhcGUoKSwuLi5lfSl9KX1tZXJnZShlKXtyZXR1cm4gbmV3IHV0KHt1bmtub3duS2V5czplLl9kZWYudW5rbm93bktleXMsY2F0Y2hhbGw6ZS5fZGVmLmNhdGNoYWxsLHNoYXBlOigpPT4oey4uLnRoaXMuX2RlZi5zaGFwZSgpLC4uLmUuX2RlZi5zaGFwZSgpfSksdHlwZU5hbWU6ZGUuWm9kT2JqZWN0fSl9c2V0S2V5KGUsbil7cmV0dXJuIHRoaXMuYXVnbWVudCh7W2VdOm59KX1jYXRjaGFsbChlKXtyZXR1cm4gbmV3IHV0KHsuLi50aGlzLl9kZWYsY2F0Y2hhbGw6ZX0pfXBpY2soZSl7Y29uc3Qgbj17fTtyZXR1cm4gRGUub2JqZWN0S2V5cyhlKS5mb3JFYWNoKHI9PntlW3JdJiZ0aGlzLnNoYXBlW3JdJiYobltyXT10aGlzLnNoYXBlW3JdKX0pLG5ldyB1dCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9b21pdChlKXtjb25zdCBuPXt9O3JldHVybiBEZS5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2gocj0+e2Vbcl18fChuW3JdPXRoaXMuc2hhcGVbcl0pfSksbmV3IHV0KHsuLi50aGlzLl9kZWYsc2hhcGU6KCk9Pm59KX1kZWVwUGFydGlhbCgpe3JldHVybiBSbCh0aGlzKX1wYXJ0aWFsKGUpe2NvbnN0IG49e307cmV0dXJuIERlLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaChyPT57Y29uc3QgaT10aGlzLnNoYXBlW3JdO2UmJiFlW3JdP25bcl09aTpuW3JdPWkub3B0aW9uYWwoKX0pLG5ldyB1dCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9cmVxdWlyZWQoZSl7Y29uc3Qgbj17fTtyZXR1cm4gRGUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKS5mb3JFYWNoKHI9PntpZihlJiYhZVtyXSluW3JdPXRoaXMuc2hhcGVbcl07ZWxzZXtsZXQgbz10aGlzLnNoYXBlW3JdO2Zvcig7byBpbnN0YW5jZW9mIGRpOylvPW8uX2RlZi5pbm5lclR5cGU7bltyXT1vfX0pLG5ldyB1dCh7Li4udGhpcy5fZGVmLHNoYXBlOigpPT5ufSl9a2V5b2YoKXtyZXR1cm4gekMoRGUub2JqZWN0S2V5cyh0aGlzLnNoYXBlKSl9fXV0LmNyZWF0ZT0odCxlKT0+bmV3IHV0KHtzaGFwZTooKT0+dCx1bmtub3duS2V5czoic3RyaXAiLGNhdGNoYWxsOmdpLmNyZWF0ZSgpLHR5cGVOYW1lOmRlLlpvZE9iamVjdCwuLi53ZShlKX0pO3V0LnN0cmljdENyZWF0ZT0odCxlKT0+bmV3IHV0KHtzaGFwZTooKT0+dCx1bmtub3duS2V5czoic3RyaWN0IixjYXRjaGFsbDpnaS5jcmVhdGUoKSx0eXBlTmFtZTpkZS5ab2RPYmplY3QsLi4ud2UoZSl9KTt1dC5sYXp5Y3JlYXRlPSh0LGUpPT5uZXcgdXQoe3NoYXBlOnQsdW5rbm93bktleXM6InN0cmlwIixjYXRjaGFsbDpnaS5jcmVhdGUoKSx0eXBlTmFtZTpkZS5ab2RPYmplY3QsLi4ud2UoZSl9KTtjbGFzcyB4YyBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9dGhpcy5fZGVmLm9wdGlvbnM7ZnVuY3Rpb24gaShvKXtmb3IoY29uc3QgcyBvZiBvKWlmKHMucmVzdWx0LnN0YXR1cz09PSJ2YWxpZCIpcmV0dXJuIHMucmVzdWx0O2Zvcihjb25zdCBzIG9mIG8paWYocy5yZXN1bHQuc3RhdHVzPT09ImRpcnR5IilyZXR1cm4gbi5jb21tb24uaXNzdWVzLnB1c2goLi4ucy5jdHguY29tbW9uLmlzc3Vlcykscy5yZXN1bHQ7Y29uc3QgbD1vLm1hcChzPT5uZXcgQ3Iocy5jdHguY29tbW9uLmlzc3VlcykpO3JldHVybiBlZShuLHtjb2RlOkguaW52YWxpZF91bmlvbix1bmlvbkVycm9yczpsfSksdmV9aWYobi5jb21tb24uYXN5bmMpcmV0dXJuIFByb21pc2UuYWxsKHIubWFwKGFzeW5jIG89Pntjb25zdCBsPXsuLi5uLGNvbW1vbjp7Li4ubi5jb21tb24saXNzdWVzOltdfSxwYXJlbnQ6bnVsbH07cmV0dXJue3Jlc3VsdDphd2FpdCBvLl9wYXJzZUFzeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bH0pLGN0eDpsfX0pKS50aGVuKGkpO3tsZXQgbztjb25zdCBsPVtdO2Zvcihjb25zdCBhIG9mIHIpe2NvbnN0IGM9ey4uLm4sY29tbW9uOnsuLi5uLmNvbW1vbixpc3N1ZXM6W119LHBhcmVudDpudWxsfSx1PWEuX3BhcnNlU3luYyh7ZGF0YTpuLmRhdGEscGF0aDpuLnBhdGgscGFyZW50OmN9KTtpZih1LnN0YXR1cz09PSJ2YWxpZCIpcmV0dXJuIHU7dS5zdGF0dXM9PT0iZGlydHkiJiYhbyYmKG89e3Jlc3VsdDp1LGN0eDpjfSksYy5jb21tb24uaXNzdWVzLmxlbmd0aCYmbC5wdXNoKGMuY29tbW9uLmlzc3Vlcyl9aWYobylyZXR1cm4gbi5jb21tb24uaXNzdWVzLnB1c2goLi4uby5jdHguY29tbW9uLmlzc3Vlcyksby5yZXN1bHQ7Y29uc3Qgcz1sLm1hcChhPT5uZXcgQ3IoYSkpO3JldHVybiBlZShuLHtjb2RlOkguaW52YWxpZF91bmlvbix1bmlvbkVycm9yczpzfSksdmV9fWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zfX14Yy5jcmVhdGU9KHQsZSk9Pm5ldyB4Yyh7b3B0aW9uczp0LHR5cGVOYW1lOmRlLlpvZFVuaW9uLC4uLndlKGUpfSk7Y29uc3QgWnU9dD0+dCBpbnN0YW5jZW9mIFNjP1p1KHQuc2NoZW1hKTp0IGluc3RhbmNlb2YgVHI/WnUodC5pbm5lclR5cGUoKSk6dCBpbnN0YW5jZW9mIEVjP1t0LnZhbHVlXTp0IGluc3RhbmNlb2YgbW8/dC5vcHRpb25zOnQgaW5zdGFuY2VvZiBDYz9PYmplY3Qua2V5cyh0LmVudW0pOnQgaW5zdGFuY2VvZiBiYz9adSh0Ll9kZWYuaW5uZXJUeXBlKTp0IGluc3RhbmNlb2YgdmM/W3ZvaWQgMF06dCBpbnN0YW5jZW9mIHljP1tudWxsXTpudWxsO2NsYXNzIFZmIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYobi5wYXJzZWRUeXBlIT09US5vYmplY3QpcmV0dXJuIGVlKG4se2NvZGU6SC5pbnZhbGlkX3R5cGUsZXhwZWN0ZWQ6US5vYmplY3QscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmU7Y29uc3Qgcj10aGlzLmRpc2NyaW1pbmF0b3IsaT1uLmRhdGFbcl0sbz10aGlzLm9wdGlvbnNNYXAuZ2V0KGkpO3JldHVybiBvP24uY29tbW9uLmFzeW5jP28uX3BhcnNlQXN5bmMoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSk6by5fcGFyc2VTeW5jKHtkYXRhOm4uZGF0YSxwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pOihlZShuLHtjb2RlOkguaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yLG9wdGlvbnM6QXJyYXkuZnJvbSh0aGlzLm9wdGlvbnNNYXAua2V5cygpKSxwYXRoOltyXX0pLHZlKX1nZXQgZGlzY3JpbWluYXRvcigpe3JldHVybiB0aGlzLl9kZWYuZGlzY3JpbWluYXRvcn1nZXQgb3B0aW9ucygpe3JldHVybiB0aGlzLl9kZWYub3B0aW9uc31nZXQgb3B0aW9uc01hcCgpe3JldHVybiB0aGlzLl9kZWYub3B0aW9uc01hcH1zdGF0aWMgY3JlYXRlKGUsbixyKXtjb25zdCBpPW5ldyBNYXA7Zm9yKGNvbnN0IG8gb2Ygbil7Y29uc3QgbD1adShvLnNoYXBlW2VdKTtpZighbCl0aHJvdyBuZXcgRXJyb3IoYEEgZGlzY3JpbWluYXRvciB2YWx1ZSBmb3Iga2V5IFxgJHtlfVxgIGNvdWxkIG5vdCBiZSBleHRyYWN0ZWQgZnJvbSBhbGwgc2NoZW1hIG9wdGlvbnNgKTtmb3IoY29uc3QgcyBvZiBsKXtpZihpLmhhcyhzKSl0aHJvdyBuZXcgRXJyb3IoYERpc2NyaW1pbmF0b3IgcHJvcGVydHkgJHtTdHJpbmcoZSl9IGhhcyBkdXBsaWNhdGUgdmFsdWUgJHtTdHJpbmcocyl9YCk7aS5zZXQocyxvKX19cmV0dXJuIG5ldyBWZih7dHlwZU5hbWU6ZGUuWm9kRGlzY3JpbWluYXRlZFVuaW9uLGRpc2NyaW1pbmF0b3I6ZSxvcHRpb25zOm4sb3B0aW9uc01hcDppLC4uLndlKHIpfSl9fWZ1bmN0aW9uIFptKHQsZSl7Y29uc3Qgbj1XaSh0KSxyPVdpKGUpO2lmKHQ9PT1lKXJldHVybnt2YWxpZDohMCxkYXRhOnR9O2lmKG49PT1RLm9iamVjdCYmcj09PVEub2JqZWN0KXtjb25zdCBpPURlLm9iamVjdEtleXMoZSksbz1EZS5vYmplY3RLZXlzKHQpLmZpbHRlcihzPT5pLmluZGV4T2YocykhPT0tMSksbD17Li4udCwuLi5lfTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBhPVptKHRbc10sZVtzXSk7aWYoIWEudmFsaWQpcmV0dXJue3ZhbGlkOiExfTtsW3NdPWEuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpsfX1lbHNlIGlmKG49PT1RLmFycmF5JiZyPT09US5hcnJheSl7aWYodC5sZW5ndGghPT1lLmxlbmd0aClyZXR1cm57dmFsaWQ6ITF9O2NvbnN0IGk9W107Zm9yKGxldCBvPTA7bzx0Lmxlbmd0aDtvKyspe2NvbnN0IGw9dFtvXSxzPWVbb10sYT1abShsLHMpO2lmKCFhLnZhbGlkKXJldHVybnt2YWxpZDohMX07aS5wdXNoKGEuZGF0YSl9cmV0dXJue3ZhbGlkOiEwLGRhdGE6aX19ZWxzZSByZXR1cm4gbj09PVEuZGF0ZSYmcj09PVEuZGF0ZSYmK3Q9PStlP3t2YWxpZDohMCxkYXRhOnR9Ont2YWxpZDohMX19Y2xhc3MgX2MgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKSxpPShvLGwpPT57aWYoVm0obyl8fFZtKGwpKXJldHVybiB2ZTtjb25zdCBzPVptKG8udmFsdWUsbC52YWx1ZSk7cmV0dXJuIHMudmFsaWQ/KChLbShvKXx8S20obCkpJiZuLmRpcnR5KCkse3N0YXR1czpuLnZhbHVlLHZhbHVlOnMuZGF0YX0pOihlZShyLHtjb2RlOkguaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXN9KSx2ZSl9O3JldHVybiByLmNvbW1vbi5hc3luYz9Qcm9taXNlLmFsbChbdGhpcy5fZGVmLmxlZnQuX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSksdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZUFzeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pXSkudGhlbigoW28sbF0pPT5pKG8sbCkpOmkodGhpcy5fZGVmLmxlZnQuX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KSx0aGlzLl9kZWYucmlnaHQuX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KSl9fV9jLmNyZWF0ZT0odCxlLG4pPT5uZXcgX2Moe2xlZnQ6dCxyaWdodDplLHR5cGVOYW1lOmRlLlpvZEludGVyc2VjdGlvbiwuLi53ZShuKX0pO2NsYXNzIFpyIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0e3N0YXR1czpuLGN0eDpyfT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7aWYoci5wYXJzZWRUeXBlIT09US5hcnJheSlyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLmFycmF5LHJlY2VpdmVkOnIucGFyc2VkVHlwZX0pLHZlO2lmKHIuZGF0YS5sZW5ndGg8dGhpcy5fZGVmLml0ZW1zLmxlbmd0aClyZXR1cm4gZWUocix7Y29kZTpILnRvb19zbWFsbCxtaW5pbXVtOnRoaXMuX2RlZi5pdGVtcy5sZW5ndGgsaW5jbHVzaXZlOiEwLGV4YWN0OiExLHR5cGU6ImFycmF5In0pLHZlOyF0aGlzLl9kZWYucmVzdCYmci5kYXRhLmxlbmd0aD50aGlzLl9kZWYuaXRlbXMubGVuZ3RoJiYoZWUocix7Y29kZTpILnRvb19iaWcsbWF4aW11bTp0aGlzLl9kZWYuaXRlbXMubGVuZ3RoLGluY2x1c2l2ZTohMCxleGFjdDohMSx0eXBlOiJhcnJheSJ9KSxuLmRpcnR5KCkpO2NvbnN0IG89Wy4uLnIuZGF0YV0ubWFwKChsLHMpPT57Y29uc3QgYT10aGlzLl9kZWYuaXRlbXNbc118fHRoaXMuX2RlZi5yZXN0O3JldHVybiBhP2EuX3BhcnNlKG5ldyBLcihyLGwsci5wYXRoLHMpKTpudWxsfSkuZmlsdGVyKGw9PiEhbCk7cmV0dXJuIHIuY29tbW9uLmFzeW5jP1Byb21pc2UuYWxsKG8pLnRoZW4obD0+bG4ubWVyZ2VBcnJheShuLGwpKTpsbi5tZXJnZUFycmF5KG4sbyl9Z2V0IGl0ZW1zKCl7cmV0dXJuIHRoaXMuX2RlZi5pdGVtc31yZXN0KGUpe3JldHVybiBuZXcgWnIoey4uLnRoaXMuX2RlZixyZXN0OmV9KX19WnIuY3JlYXRlPSh0LGUpPT57aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gei50dXBsZShbIC4uLiBdKSIpO3JldHVybiBuZXcgWnIoe2l0ZW1zOnQsdHlwZU5hbWU6ZGUuWm9kVHVwbGUscmVzdDpudWxsLC4uLndlKGUpfSl9O2NsYXNzIHdjIGV4dGVuZHMgQ2V7Z2V0IGtleVNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYua2V5VHlwZX1nZXQgdmFsdWVTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZX1fcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihyLnBhcnNlZFR5cGUhPT1RLm9iamVjdClyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm9iamVjdCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZTtjb25zdCBpPVtdLG89dGhpcy5fZGVmLmtleVR5cGUsbD10aGlzLl9kZWYudmFsdWVUeXBlO2Zvcihjb25zdCBzIGluIHIuZGF0YSlpLnB1c2goe2tleTpvLl9wYXJzZShuZXcgS3IocixzLHIucGF0aCxzKSksdmFsdWU6bC5fcGFyc2UobmV3IEtyKHIsci5kYXRhW3NdLHIucGF0aCxzKSl9KTtyZXR1cm4gci5jb21tb24uYXN5bmM/bG4ubWVyZ2VPYmplY3RBc3luYyhuLGkpOmxuLm1lcmdlT2JqZWN0U3luYyhuLGkpfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGV9c3RhdGljIGNyZWF0ZShlLG4scil7cmV0dXJuIG4gaW5zdGFuY2VvZiBDZT9uZXcgd2Moe2tleVR5cGU6ZSx2YWx1ZVR5cGU6bix0eXBlTmFtZTpkZS5ab2RSZWNvcmQsLi4ud2Uocil9KTpuZXcgd2Moe2tleVR5cGU6d3IuY3JlYXRlKCksdmFsdWVUeXBlOmUsdHlwZU5hbWU6ZGUuWm9kUmVjb3JkLC4uLndlKG4pfSl9fWNsYXNzIEdkIGV4dGVuZHMgQ2V7Z2V0IGtleVNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYua2V5VHlwZX1nZXQgdmFsdWVTY2hlbWEoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlVHlwZX1fcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihyLnBhcnNlZFR5cGUhPT1RLm1hcClyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm1hcCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZTtjb25zdCBpPXRoaXMuX2RlZi5rZXlUeXBlLG89dGhpcy5fZGVmLnZhbHVlVHlwZSxsPVsuLi5yLmRhdGEuZW50cmllcygpXS5tYXAoKFtzLGFdLGMpPT4oe2tleTppLl9wYXJzZShuZXcgS3IocixzLHIucGF0aCxbYywia2V5Il0pKSx2YWx1ZTpvLl9wYXJzZShuZXcgS3IocixhLHIucGF0aCxbYywidmFsdWUiXSkpfSkpO2lmKHIuY29tbW9uLmFzeW5jKXtjb25zdCBzPW5ldyBNYXA7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oYXN5bmMoKT0+e2Zvcihjb25zdCBhIG9mIGwpe2NvbnN0IGM9YXdhaXQgYS5rZXksdT1hd2FpdCBhLnZhbHVlO2lmKGMuc3RhdHVzPT09ImFib3J0ZWQifHx1LnN0YXR1cz09PSJhYm9ydGVkIilyZXR1cm4gdmU7KGMuc3RhdHVzPT09ImRpcnR5Inx8dS5zdGF0dXM9PT0iZGlydHkiKSYmbi5kaXJ0eSgpLHMuc2V0KGMudmFsdWUsdS52YWx1ZSl9cmV0dXJue3N0YXR1czpuLnZhbHVlLHZhbHVlOnN9fSl9ZWxzZXtjb25zdCBzPW5ldyBNYXA7Zm9yKGNvbnN0IGEgb2YgbCl7Y29uc3QgYz1hLmtleSx1PWEudmFsdWU7aWYoYy5zdGF0dXM9PT0iYWJvcnRlZCJ8fHUuc3RhdHVzPT09ImFib3J0ZWQiKXJldHVybiB2ZTsoYy5zdGF0dXM9PT0iZGlydHkifHx1LnN0YXR1cz09PSJkaXJ0eSIpJiZuLmRpcnR5KCkscy5zZXQoYy52YWx1ZSx1LnZhbHVlKX1yZXR1cm57c3RhdHVzOm4udmFsdWUsdmFsdWU6c319fX1HZC5jcmVhdGU9KHQsZSxuKT0+bmV3IEdkKHt2YWx1ZVR5cGU6ZSxrZXlUeXBlOnQsdHlwZU5hbWU6ZGUuWm9kTWFwLC4uLndlKG4pfSk7Y2xhc3MgcmwgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihyLnBhcnNlZFR5cGUhPT1RLnNldClyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLnNldCxyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZTtjb25zdCBpPXRoaXMuX2RlZjtpLm1pblNpemUhPT1udWxsJiZyLmRhdGEuc2l6ZTxpLm1pblNpemUudmFsdWUmJihlZShyLHtjb2RlOkgudG9vX3NtYWxsLG1pbmltdW06aS5taW5TaXplLnZhbHVlLHR5cGU6InNldCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6aS5taW5TaXplLm1lc3NhZ2V9KSxuLmRpcnR5KCkpLGkubWF4U2l6ZSE9PW51bGwmJnIuZGF0YS5zaXplPmkubWF4U2l6ZS52YWx1ZSYmKGVlKHIse2NvZGU6SC50b29fYmlnLG1heGltdW06aS5tYXhTaXplLnZhbHVlLHR5cGU6InNldCIsaW5jbHVzaXZlOiEwLGV4YWN0OiExLG1lc3NhZ2U6aS5tYXhTaXplLm1lc3NhZ2V9KSxuLmRpcnR5KCkpO2NvbnN0IG89dGhpcy5fZGVmLnZhbHVlVHlwZTtmdW5jdGlvbiBsKGEpe2NvbnN0IGM9bmV3IFNldDtmb3IoY29uc3QgdSBvZiBhKXtpZih1LnN0YXR1cz09PSJhYm9ydGVkIilyZXR1cm4gdmU7dS5zdGF0dXM9PT0iZGlydHkiJiZuLmRpcnR5KCksYy5hZGQodS52YWx1ZSl9cmV0dXJue3N0YXR1czpuLnZhbHVlLHZhbHVlOmN9fWNvbnN0IHM9Wy4uLnIuZGF0YS52YWx1ZXMoKV0ubWFwKChhLGMpPT5vLl9wYXJzZShuZXcgS3IocixhLHIucGF0aCxjKSkpO3JldHVybiByLmNvbW1vbi5hc3luYz9Qcm9taXNlLmFsbChzKS50aGVuKGE9PmwoYSkpOmwocyl9bWluKGUsbil7cmV0dXJuIG5ldyBybCh7Li4udGhpcy5fZGVmLG1pblNpemU6e3ZhbHVlOmUsbWVzc2FnZTp1ZS50b1N0cmluZyhuKX19KX1tYXgoZSxuKXtyZXR1cm4gbmV3IHJsKHsuLi50aGlzLl9kZWYsbWF4U2l6ZTp7dmFsdWU6ZSxtZXNzYWdlOnVlLnRvU3RyaW5nKG4pfX0pfXNpemUoZSxuKXtyZXR1cm4gdGhpcy5taW4oZSxuKS5tYXgoZSxuKX1ub25lbXB0eShlKXtyZXR1cm4gdGhpcy5taW4oMSxlKX19cmwuY3JlYXRlPSh0LGUpPT5uZXcgcmwoe3ZhbHVlVHlwZTp0LG1pblNpemU6bnVsbCxtYXhTaXplOm51bGwsdHlwZU5hbWU6ZGUuWm9kU2V0LC4uLndlKGUpfSk7Y2xhc3MgcnMgZXh0ZW5kcyBDZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy52YWxpZGF0ZT10aGlzLmltcGxlbWVudH1fcGFyc2UoZSl7Y29uc3R7Y3R4Om59PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihuLnBhcnNlZFR5cGUhPT1RLmZ1bmN0aW9uKXJldHVybiBlZShuLHtjb2RlOkguaW52YWxpZF90eXBlLGV4cGVjdGVkOlEuZnVuY3Rpb24scmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmU7ZnVuY3Rpb24gcihzLGEpe3JldHVybiBIZCh7ZGF0YTpzLHBhdGg6bi5wYXRoLGVycm9yTWFwczpbbi5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLG4uc2NoZW1hRXJyb3JNYXAsV2QoKSxoY10uZmlsdGVyKGM9PiEhYyksaXNzdWVEYXRhOntjb2RlOkguaW52YWxpZF9hcmd1bWVudHMsYXJndW1lbnRzRXJyb3I6YX19KX1mdW5jdGlvbiBpKHMsYSl7cmV0dXJuIEhkKHtkYXRhOnMscGF0aDpuLnBhdGgsZXJyb3JNYXBzOltuLmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAsbi5zY2hlbWFFcnJvck1hcCxXZCgpLGhjXS5maWx0ZXIoYz0+ISFjKSxpc3N1ZURhdGE6e2NvZGU6SC5pbnZhbGlkX3JldHVybl90eXBlLHJldHVyblR5cGVFcnJvcjphfX0pfWNvbnN0IG89e2Vycm9yTWFwOm4uY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcH0sbD1uLmRhdGE7aWYodGhpcy5fZGVmLnJldHVybnMgaW5zdGFuY2VvZiB4cyl7Y29uc3Qgcz10aGlzO3JldHVybiBfbihhc3luYyBmdW5jdGlvbiguLi5hKXtjb25zdCBjPW5ldyBDcihbXSksdT1hd2FpdCBzLl9kZWYuYXJncy5wYXJzZUFzeW5jKGEsbykuY2F0Y2gocD0+e3Rocm93IGMuYWRkSXNzdWUocihhLHApKSxjfSksZD1hd2FpdCBSZWZsZWN0LmFwcGx5KGwsdGhpcyx1KTtyZXR1cm4gYXdhaXQgcy5fZGVmLnJldHVybnMuX2RlZi50eXBlLnBhcnNlQXN5bmMoZCxvKS5jYXRjaChwPT57dGhyb3cgYy5hZGRJc3N1ZShpKGQscCkpLGN9KX0pfWVsc2V7Y29uc3Qgcz10aGlzO3JldHVybiBfbihmdW5jdGlvbiguLi5hKXtjb25zdCBjPXMuX2RlZi5hcmdzLnNhZmVQYXJzZShhLG8pO2lmKCFjLnN1Y2Nlc3MpdGhyb3cgbmV3IENyKFtyKGEsYy5lcnJvcildKTtjb25zdCB1PVJlZmxlY3QuYXBwbHkobCx0aGlzLGMuZGF0YSksZD1zLl9kZWYucmV0dXJucy5zYWZlUGFyc2UodSxvKTtpZighZC5zdWNjZXNzKXRocm93IG5ldyBDcihbaSh1LGQuZXJyb3IpXSk7cmV0dXJuIGQuZGF0YX0pfX1wYXJhbWV0ZXJzKCl7cmV0dXJuIHRoaXMuX2RlZi5hcmdzfXJldHVyblR5cGUoKXtyZXR1cm4gdGhpcy5fZGVmLnJldHVybnN9YXJncyguLi5lKXtyZXR1cm4gbmV3IHJzKHsuLi50aGlzLl9kZWYsYXJnczpaci5jcmVhdGUoZSkucmVzdChIby5jcmVhdGUoKSl9KX1yZXR1cm5zKGUpe3JldHVybiBuZXcgcnMoey4uLnRoaXMuX2RlZixyZXR1cm5zOmV9KX1pbXBsZW1lbnQoZSl7cmV0dXJuIHRoaXMucGFyc2UoZSl9c3RyaWN0SW1wbGVtZW50KGUpe3JldHVybiB0aGlzLnBhcnNlKGUpfXN0YXRpYyBjcmVhdGUoZSxuLHIpe3JldHVybiBuZXcgcnMoe2FyZ3M6ZXx8WnIuY3JlYXRlKFtdKS5yZXN0KEhvLmNyZWF0ZSgpKSxyZXR1cm5zOm58fEhvLmNyZWF0ZSgpLHR5cGVOYW1lOmRlLlpvZEZ1bmN0aW9uLC4uLndlKHIpfSl9fWNsYXNzIFNjIGV4dGVuZHMgQ2V7Z2V0IHNjaGVtYSgpe3JldHVybiB0aGlzLl9kZWYuZ2V0dGVyKCl9X3BhcnNlKGUpe2NvbnN0e2N0eDpufT10aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoZSk7cmV0dXJuIHRoaXMuX2RlZi5nZXR0ZXIoKS5fcGFyc2Uoe2RhdGE6bi5kYXRhLHBhdGg6bi5wYXRoLHBhcmVudDpufSl9fVNjLmNyZWF0ZT0odCxlKT0+bmV3IFNjKHtnZXR0ZXI6dCx0eXBlTmFtZTpkZS5ab2RMYXp5LC4uLndlKGUpfSk7Y2xhc3MgRWMgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYoZS5kYXRhIT09dGhpcy5fZGVmLnZhbHVlKXtjb25zdCBuPXRoaXMuX2dldE9yUmV0dXJuQ3R4KGUpO3JldHVybiBlZShuLHtyZWNlaXZlZDpuLmRhdGEsY29kZTpILmludmFsaWRfbGl0ZXJhbCxleHBlY3RlZDp0aGlzLl9kZWYudmFsdWV9KSx2ZX1yZXR1cm57c3RhdHVzOiJ2YWxpZCIsdmFsdWU6ZS5kYXRhfX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fZGVmLnZhbHVlfX1FYy5jcmVhdGU9KHQsZSk9Pm5ldyBFYyh7dmFsdWU6dCx0eXBlTmFtZTpkZS5ab2RMaXRlcmFsLC4uLndlKGUpfSk7ZnVuY3Rpb24gekModCxlKXtyZXR1cm4gbmV3IG1vKHt2YWx1ZXM6dCx0eXBlTmFtZTpkZS5ab2RFbnVtLC4uLndlKGUpfSl9Y2xhc3MgbW8gZXh0ZW5kcyBDZXtfcGFyc2UoZSl7aWYodHlwZW9mIGUuZGF0YSE9InN0cmluZyIpe2NvbnN0IG49dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSkscj10aGlzLl9kZWYudmFsdWVzO3JldHVybiBlZShuLHtleHBlY3RlZDpEZS5qb2luVmFsdWVzKHIpLHJlY2VpdmVkOm4ucGFyc2VkVHlwZSxjb2RlOkguaW52YWxpZF90eXBlfSksdmV9aWYodGhpcy5fZGVmLnZhbHVlcy5pbmRleE9mKGUuZGF0YSk9PT0tMSl7Y29uc3Qgbj10aGlzLl9nZXRPclJldHVybkN0eChlKSxyPXRoaXMuX2RlZi52YWx1ZXM7cmV0dXJuIGVlKG4se3JlY2VpdmVkOm4uZGF0YSxjb2RlOkguaW52YWxpZF9lbnVtX3ZhbHVlLG9wdGlvbnM6cn0pLHZlfXJldHVybiBfbihlLmRhdGEpfWdldCBvcHRpb25zKCl7cmV0dXJuIHRoaXMuX2RlZi52YWx1ZXN9Z2V0IGVudW0oKXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi52YWx1ZXMpZVtuXT1uO3JldHVybiBlfWdldCBWYWx1ZXMoKXtjb25zdCBlPXt9O2Zvcihjb25zdCBuIG9mIHRoaXMuX2RlZi52YWx1ZXMpZVtuXT1uO3JldHVybiBlfWdldCBFbnVtKCl7Y29uc3QgZT17fTtmb3IoY29uc3QgbiBvZiB0aGlzLl9kZWYudmFsdWVzKWVbbl09bjtyZXR1cm4gZX1leHRyYWN0KGUpe3JldHVybiBtby5jcmVhdGUoZSl9ZXhjbHVkZShlKXtyZXR1cm4gbW8uY3JlYXRlKHRoaXMub3B0aW9ucy5maWx0ZXIobj0+IWUuaW5jbHVkZXMobikpKX19bW8uY3JlYXRlPXpDO2NsYXNzIENjIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0IG49RGUuZ2V0VmFsaWRFbnVtVmFsdWVzKHRoaXMuX2RlZi52YWx1ZXMpLHI9dGhpcy5fZ2V0T3JSZXR1cm5DdHgoZSk7aWYoci5wYXJzZWRUeXBlIT09US5zdHJpbmcmJnIucGFyc2VkVHlwZSE9PVEubnVtYmVyKXtjb25zdCBpPURlLm9iamVjdFZhbHVlcyhuKTtyZXR1cm4gZWUocix7ZXhwZWN0ZWQ6RGUuam9pblZhbHVlcyhpKSxyZWNlaXZlZDpyLnBhcnNlZFR5cGUsY29kZTpILmludmFsaWRfdHlwZX0pLHZlfWlmKG4uaW5kZXhPZihlLmRhdGEpPT09LTEpe2NvbnN0IGk9RGUub2JqZWN0VmFsdWVzKG4pO3JldHVybiBlZShyLHtyZWNlaXZlZDpyLmRhdGEsY29kZTpILmludmFsaWRfZW51bV92YWx1ZSxvcHRpb25zOml9KSx2ZX1yZXR1cm4gX24oZS5kYXRhKX1nZXQgZW51bSgpe3JldHVybiB0aGlzLl9kZWYudmFsdWVzfX1DYy5jcmVhdGU9KHQsZSk9Pm5ldyBDYyh7dmFsdWVzOnQsdHlwZU5hbWU6ZGUuWm9kTmF0aXZlRW51bSwuLi53ZShlKX0pO2NsYXNzIHhzIGV4dGVuZHMgQ2V7dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi50eXBlfV9wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2lmKG4ucGFyc2VkVHlwZSE9PVEucHJvbWlzZSYmbi5jb21tb24uYXN5bmM9PT0hMSlyZXR1cm4gZWUobix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLnByb21pc2UscmVjZWl2ZWQ6bi5wYXJzZWRUeXBlfSksdmU7Y29uc3Qgcj1uLnBhcnNlZFR5cGU9PT1RLnByb21pc2U/bi5kYXRhOlByb21pc2UucmVzb2x2ZShuLmRhdGEpO3JldHVybiBfbihyLnRoZW4oaT0+dGhpcy5fZGVmLnR5cGUucGFyc2VBc3luYyhpLHtwYXRoOm4ucGF0aCxlcnJvck1hcDpuLmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXB9KSkpfX14cy5jcmVhdGU9KHQsZSk9Pm5ldyB4cyh7dHlwZTp0LHR5cGVOYW1lOmRlLlpvZFByb21pc2UsLi4ud2UoZSl9KTtjbGFzcyBUciBleHRlbmRzIENle2lubmVyVHlwZSgpe3JldHVybiB0aGlzLl9kZWYuc2NoZW1hfXNvdXJjZVR5cGUoKXtyZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fZGVmLnR5cGVOYW1lPT09ZGUuWm9kRWZmZWN0cz90aGlzLl9kZWYuc2NoZW1hLnNvdXJjZVR5cGUoKTp0aGlzLl9kZWYuc2NoZW1hfV9wYXJzZShlKXtjb25zdHtzdGF0dXM6bixjdHg6cn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLGk9dGhpcy5fZGVmLmVmZmVjdHx8bnVsbCxvPXthZGRJc3N1ZTpsPT57ZWUocixsKSxsLmZhdGFsP24uYWJvcnQoKTpuLmRpcnR5KCl9LGdldCBwYXRoKCl7cmV0dXJuIHIucGF0aH19O2lmKG8uYWRkSXNzdWU9by5hZGRJc3N1ZS5iaW5kKG8pLGkudHlwZT09PSJwcmVwcm9jZXNzIil7Y29uc3QgbD1pLnRyYW5zZm9ybShyLmRhdGEsbyk7cmV0dXJuIHIuY29tbW9uLmlzc3Vlcy5sZW5ndGg/e3N0YXR1czoiZGlydHkiLHZhbHVlOnIuZGF0YX06ci5jb21tb24uYXN5bmM/UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4ocz0+dGhpcy5fZGVmLnNjaGVtYS5fcGFyc2VBc3luYyh7ZGF0YTpzLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkpOnRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpsLHBhdGg6ci5wYXRoLHBhcmVudDpyfSl9aWYoaS50eXBlPT09InJlZmluZW1lbnQiKXtjb25zdCBsPXM9Pntjb25zdCBhPWkucmVmaW5lbWVudChzLG8pO2lmKHIuY29tbW9uLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoYSk7aWYoYSBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IEVycm9yKCJBc3luYyByZWZpbmVtZW50IGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLiIpO3JldHVybiBzfTtpZihyLmNvbW1vbi5hc3luYz09PSExKXtjb25zdCBzPXRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7ZGF0YTpyLmRhdGEscGF0aDpyLnBhdGgscGFyZW50OnJ9KTtyZXR1cm4gcy5zdGF0dXM9PT0iYWJvcnRlZCI/dmU6KHMuc3RhdHVzPT09ImRpcnR5IiYmbi5kaXJ0eSgpLGwocy52YWx1ZSkse3N0YXR1czpuLnZhbHVlLHZhbHVlOnMudmFsdWV9KX1lbHNlIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZUFzeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pLnRoZW4ocz0+cy5zdGF0dXM9PT0iYWJvcnRlZCI/dmU6KHMuc3RhdHVzPT09ImRpcnR5IiYmbi5kaXJ0eSgpLGwocy52YWx1ZSkudGhlbigoKT0+KHtzdGF0dXM6bi52YWx1ZSx2YWx1ZTpzLnZhbHVlfSkpKSl9aWYoaS50eXBlPT09InRyYW5zZm9ybSIpaWYoci5jb21tb24uYXN5bmM9PT0hMSl7Y29uc3QgbD10aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSk7aWYoIW1jKGwpKXJldHVybiBsO2NvbnN0IHM9aS50cmFuc2Zvcm0obC52YWx1ZSxvKTtpZihzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jaHJvbm91cyB0cmFuc2Zvcm0gZW5jb3VudGVyZWQgZHVyaW5nIHN5bmNocm9ub3VzIHBhcnNlIG9wZXJhdGlvbi4gVXNlIC5wYXJzZUFzeW5jIGluc3RlYWQuIik7cmV0dXJue3N0YXR1czpuLnZhbHVlLHZhbHVlOnN9fWVsc2UgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe2RhdGE6ci5kYXRhLHBhdGg6ci5wYXRoLHBhcmVudDpyfSkudGhlbihsPT5tYyhsKT9Qcm9taXNlLnJlc29sdmUoaS50cmFuc2Zvcm0obC52YWx1ZSxvKSkudGhlbihzPT4oe3N0YXR1czpuLnZhbHVlLHZhbHVlOnN9KSk6bCk7RGUuYXNzZXJ0TmV2ZXIoaSl9fVRyLmNyZWF0ZT0odCxlLG4pPT5uZXcgVHIoe3NjaGVtYTp0LHR5cGVOYW1lOmRlLlpvZEVmZmVjdHMsZWZmZWN0OmUsLi4ud2Uobil9KTtUci5jcmVhdGVXaXRoUHJlcHJvY2Vzcz0odCxlLG4pPT5uZXcgVHIoe3NjaGVtYTplLGVmZmVjdDp7dHlwZToicHJlcHJvY2VzcyIsdHJhbnNmb3JtOnR9LHR5cGVOYW1lOmRlLlpvZEVmZmVjdHMsLi4ud2Uobil9KTtjbGFzcyBkaSBleHRlbmRzIENle19wYXJzZShlKXtyZXR1cm4gdGhpcy5fZ2V0VHlwZShlKT09PVEudW5kZWZpbmVkP19uKHZvaWQgMCk6dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoZSl9dW53cmFwKCl7cmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGV9fWRpLmNyZWF0ZT0odCxlKT0+bmV3IGRpKHtpbm5lclR5cGU6dCx0eXBlTmFtZTpkZS5ab2RPcHRpb25hbCwuLi53ZShlKX0pO2NsYXNzIGlsIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe3JldHVybiB0aGlzLl9nZXRUeXBlKGUpPT09US5udWxsP19uKG51bGwpOnRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKGUpfXVud3JhcCgpe3JldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlfX1pbC5jcmVhdGU9KHQsZSk9Pm5ldyBpbCh7aW5uZXJUeXBlOnQsdHlwZU5hbWU6ZGUuWm9kTnVsbGFibGUsLi4ud2UoZSl9KTtjbGFzcyBiYyBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpO2xldCByPW4uZGF0YTtyZXR1cm4gbi5wYXJzZWRUeXBlPT09US51bmRlZmluZWQmJihyPXRoaXMuX2RlZi5kZWZhdWx0VmFsdWUoKSksdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe2RhdGE6cixwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pfXJlbW92ZURlZmF1bHQoKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19YmMuY3JlYXRlPSh0LGUpPT5uZXcgYmMoe2lubmVyVHlwZTp0LHR5cGVOYW1lOmRlLlpvZERlZmF1bHQsZGVmYXVsdFZhbHVlOnR5cGVvZiBlLmRlZmF1bHQ9PSJmdW5jdGlvbiI/ZS5kZWZhdWx0OigpPT5lLmRlZmF1bHQsLi4ud2UoZSl9KTtjbGFzcyBZZCBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9ey4uLm4sY29tbW9uOnsuLi5uLmNvbW1vbixpc3N1ZXM6W119fSxpPXRoaXMuX2RlZi5pbm5lclR5cGUuX3BhcnNlKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6ey4uLnJ9fSk7cmV0dXJuIFZkKGkpP2kudGhlbihvPT4oe3N0YXR1czoidmFsaWQiLHZhbHVlOm8uc3RhdHVzPT09InZhbGlkIj9vLnZhbHVlOnRoaXMuX2RlZi5jYXRjaFZhbHVlKHtnZXQgZXJyb3IoKXtyZXR1cm4gbmV3IENyKHIuY29tbW9uLmlzc3Vlcyl9LGlucHV0OnIuZGF0YX0pfSkpOntzdGF0dXM6InZhbGlkIix2YWx1ZTppLnN0YXR1cz09PSJ2YWxpZCI/aS52YWx1ZTp0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7Z2V0IGVycm9yKCl7cmV0dXJuIG5ldyBDcihyLmNvbW1vbi5pc3N1ZXMpfSxpbnB1dDpyLmRhdGF9KX19cmVtb3ZlQ2F0Y2goKXtyZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZX19WWQuY3JlYXRlPSh0LGUpPT5uZXcgWWQoe2lubmVyVHlwZTp0LHR5cGVOYW1lOmRlLlpvZENhdGNoLGNhdGNoVmFsdWU6dHlwZW9mIGUuY2F0Y2g9PSJmdW5jdGlvbiI/ZS5jYXRjaDooKT0+ZS5jYXRjaCwuLi53ZShlKX0pO2NsYXNzIFhkIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2lmKHRoaXMuX2dldFR5cGUoZSkhPT1RLm5hbil7Y29uc3Qgcj10aGlzLl9nZXRPclJldHVybkN0eChlKTtyZXR1cm4gZWUocix7Y29kZTpILmludmFsaWRfdHlwZSxleHBlY3RlZDpRLm5hbixyZWNlaXZlZDpyLnBhcnNlZFR5cGV9KSx2ZX1yZXR1cm57c3RhdHVzOiJ2YWxpZCIsdmFsdWU6ZS5kYXRhfX19WGQuY3JlYXRlPXQ9Pm5ldyBYZCh7dHlwZU5hbWU6ZGUuWm9kTmFOLC4uLndlKHQpfSk7Y29uc3QgTTQ9U3ltYm9sKCJ6b2RfYnJhbmQiKTtjbGFzcyBGQyBleHRlbmRzIENle19wYXJzZShlKXtjb25zdHtjdHg6bn09dGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGUpLHI9bi5kYXRhO3JldHVybiB0aGlzLl9kZWYudHlwZS5fcGFyc2Uoe2RhdGE6cixwYXRoOm4ucGF0aCxwYXJlbnQ6bn0pfXVud3JhcCgpe3JldHVybiB0aGlzLl9kZWYudHlwZX19Y2xhc3MgSGMgZXh0ZW5kcyBDZXtfcGFyc2UoZSl7Y29uc3R7c3RhdHVzOm4sY3R4OnJ9PXRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhlKTtpZihyLmNvbW1vbi5hc3luYylyZXR1cm4oYXN5bmMoKT0+e2NvbnN0IG89YXdhaXQgdGhpcy5fZGVmLmluLl9wYXJzZUFzeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pO3JldHVybiBvLnN0YXR1cz09PSJhYm9ydGVkIj92ZTpvLnN0YXR1cz09PSJkaXJ0eSI/KG4uZGlydHkoKSxqQyhvLnZhbHVlKSk6dGhpcy5fZGVmLm91dC5fcGFyc2VBc3luYyh7ZGF0YTpvLnZhbHVlLHBhdGg6ci5wYXRoLHBhcmVudDpyfSl9KSgpO3tjb25zdCBpPXRoaXMuX2RlZi5pbi5fcGFyc2VTeW5jKHtkYXRhOnIuZGF0YSxwYXRoOnIucGF0aCxwYXJlbnQ6cn0pO3JldHVybiBpLnN0YXR1cz09PSJhYm9ydGVkIj92ZTppLnN0YXR1cz09PSJkaXJ0eSI/KG4uZGlydHkoKSx7c3RhdHVzOiJkaXJ0eSIsdmFsdWU6aS52YWx1ZX0pOnRoaXMuX2RlZi5vdXQuX3BhcnNlU3luYyh7ZGF0YTppLnZhbHVlLHBhdGg6ci5wYXRoLHBhcmVudDpyfSl9fXN0YXRpYyBjcmVhdGUoZSxuKXtyZXR1cm4gbmV3IEhjKHtpbjplLG91dDpuLHR5cGVOYW1lOmRlLlpvZFBpcGVsaW5lfSl9fWNsYXNzIEpkIGV4dGVuZHMgQ2V7X3BhcnNlKGUpe2NvbnN0IG49dGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoZSk7cmV0dXJuIG1jKG4pJiYobi52YWx1ZT1PYmplY3QuZnJlZXplKG4udmFsdWUpKSxufX1KZC5jcmVhdGU9KHQsZSk9Pm5ldyBKZCh7aW5uZXJUeXBlOnQsdHlwZU5hbWU6ZGUuWm9kUmVhZG9ubHksLi4ud2UoZSl9KTtjb25zdCBCQz0odCxlPXt9LG4pPT50P3lzLmNyZWF0ZSgpLnN1cGVyUmVmaW5lKChyLGkpPT57dmFyIG8sbDtpZighdChyKSl7Y29uc3Qgcz10eXBlb2YgZT09ImZ1bmN0aW9uIj9lKHIpOnR5cGVvZiBlPT0ic3RyaW5nIj97bWVzc2FnZTplfTplLGE9KGw9KG89cy5mYXRhbCkhPT1udWxsJiZvIT09dm9pZCAwP286bikhPT1udWxsJiZsIT09dm9pZCAwP2w6ITAsYz10eXBlb2Ygcz09InN0cmluZyI/e21lc3NhZ2U6c306cztpLmFkZElzc3VlKHtjb2RlOiJjdXN0b20iLC4uLmMsZmF0YWw6YX0pfX0pOnlzLmNyZWF0ZSgpLEw0PXtvYmplY3Q6dXQubGF6eWNyZWF0ZX07dmFyIGRlOyhmdW5jdGlvbih0KXt0LlpvZFN0cmluZz0iWm9kU3RyaW5nIix0LlpvZE51bWJlcj0iWm9kTnVtYmVyIix0LlpvZE5hTj0iWm9kTmFOIix0LlpvZEJpZ0ludD0iWm9kQmlnSW50Iix0LlpvZEJvb2xlYW49IlpvZEJvb2xlYW4iLHQuWm9kRGF0ZT0iWm9kRGF0ZSIsdC5ab2RTeW1ib2w9IlpvZFN5bWJvbCIsdC5ab2RVbmRlZmluZWQ9IlpvZFVuZGVmaW5lZCIsdC5ab2ROdWxsPSJab2ROdWxsIix0LlpvZEFueT0iWm9kQW55Iix0LlpvZFVua25vd249IlpvZFVua25vd24iLHQuWm9kTmV2ZXI9IlpvZE5ldmVyIix0LlpvZFZvaWQ9IlpvZFZvaWQiLHQuWm9kQXJyYXk9IlpvZEFycmF5Iix0LlpvZE9iamVjdD0iWm9kT2JqZWN0Iix0LlpvZFVuaW9uPSJab2RVbmlvbiIsdC5ab2REaXNjcmltaW5hdGVkVW5pb249IlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsdC5ab2RJbnRlcnNlY3Rpb249IlpvZEludGVyc2VjdGlvbiIsdC5ab2RUdXBsZT0iWm9kVHVwbGUiLHQuWm9kUmVjb3JkPSJab2RSZWNvcmQiLHQuWm9kTWFwPSJab2RNYXAiLHQuWm9kU2V0PSJab2RTZXQiLHQuWm9kRnVuY3Rpb249IlpvZEZ1bmN0aW9uIix0LlpvZExhenk9IlpvZExhenkiLHQuWm9kTGl0ZXJhbD0iWm9kTGl0ZXJhbCIsdC5ab2RFbnVtPSJab2RFbnVtIix0LlpvZEVmZmVjdHM9IlpvZEVmZmVjdHMiLHQuWm9kTmF0aXZlRW51bT0iWm9kTmF0aXZlRW51bSIsdC5ab2RPcHRpb25hbD0iWm9kT3B0aW9uYWwiLHQuWm9kTnVsbGFibGU9IlpvZE51bGxhYmxlIix0LlpvZERlZmF1bHQ9IlpvZERlZmF1bHQiLHQuWm9kQ2F0Y2g9IlpvZENhdGNoIix0LlpvZFByb21pc2U9IlpvZFByb21pc2UiLHQuWm9kQnJhbmRlZD0iWm9kQnJhbmRlZCIsdC5ab2RQaXBlbGluZT0iWm9kUGlwZWxpbmUiLHQuWm9kUmVhZG9ubHk9IlpvZFJlYWRvbmx5In0pKGRlfHwoZGU9e30pKTtjb25zdCBEND0odCxlPXttZXNzYWdlOmBJbnB1dCBub3QgaW5zdGFuY2Ugb2YgJHt0Lm5hbWV9YH0pPT5CQyhuPT5uIGluc3RhbmNlb2YgdCxlKSxVQz13ci5jcmVhdGUsV0M9cG8uY3JlYXRlLEk0PVhkLmNyZWF0ZSxqND1oby5jcmVhdGUsSEM9Z2MuY3JlYXRlLHo0PW5sLmNyZWF0ZSxGND1LZC5jcmVhdGUsQjQ9dmMuY3JlYXRlLFU0PXljLmNyZWF0ZSxXND15cy5jcmVhdGUsSDQ9SG8uY3JlYXRlLFY0PWdpLmNyZWF0ZSxLND1aZC5jcmVhdGUsWjQ9YnIuY3JlYXRlLEc0PXV0LmNyZWF0ZSxZND11dC5zdHJpY3RDcmVhdGUsWDQ9eGMuY3JlYXRlLEo0PVZmLmNyZWF0ZSxRND1fYy5jcmVhdGUscTQ9WnIuY3JlYXRlLGVNPXdjLmNyZWF0ZSx0TT1HZC5jcmVhdGUsbk09cmwuY3JlYXRlLHJNPXJzLmNyZWF0ZSxpTT1TYy5jcmVhdGUsb009RWMuY3JlYXRlLGxNPW1vLmNyZWF0ZSxzTT1DYy5jcmVhdGUsYU09eHMuY3JlYXRlLEZ4PVRyLmNyZWF0ZSxjTT1kaS5jcmVhdGUsdU09aWwuY3JlYXRlLGRNPVRyLmNyZWF0ZVdpdGhQcmVwcm9jZXNzLGZNPUhjLmNyZWF0ZSxwTT0oKT0+VUMoKS5vcHRpb25hbCgpLGhNPSgpPT5XQygpLm9wdGlvbmFsKCksbU09KCk9PkhDKCkub3B0aW9uYWwoKSxnTT17c3RyaW5nOnQ9PndyLmNyZWF0ZSh7Li4udCxjb2VyY2U6ITB9KSxudW1iZXI6dD0+cG8uY3JlYXRlKHsuLi50LGNvZXJjZTohMH0pLGJvb2xlYW46dD0+Z2MuY3JlYXRlKHsuLi50LGNvZXJjZTohMH0pLGJpZ2ludDp0PT5oby5jcmVhdGUoey4uLnQsY29lcmNlOiEwfSksZGF0ZTp0PT5ubC5jcmVhdGUoey4uLnQsY29lcmNlOiEwfSl9LHZNPXZlO3ZhciBrbj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxkZWZhdWx0RXJyb3JNYXA6aGMsc2V0RXJyb3JNYXA6dzQsZ2V0RXJyb3JNYXA6V2QsbWFrZUlzc3VlOkhkLEVNUFRZX1BBVEg6UzQsYWRkSXNzdWVUb0NvbnRleHQ6ZWUsUGFyc2VTdGF0dXM6bG4sSU5WQUxJRDp2ZSxESVJUWTpqQyxPSzpfbixpc0Fib3J0ZWQ6Vm0saXNEaXJ0eTpLbSxpc1ZhbGlkOm1jLGlzQXN5bmM6VmQsZ2V0IHV0aWwoKXtyZXR1cm4gRGV9LGdldCBvYmplY3RVdGlsKCl7cmV0dXJuIEhtfSxab2RQYXJzZWRUeXBlOlEsZ2V0UGFyc2VkVHlwZTpXaSxab2RUeXBlOkNlLFpvZFN0cmluZzp3cixab2ROdW1iZXI6cG8sWm9kQmlnSW50OmhvLFpvZEJvb2xlYW46Z2MsWm9kRGF0ZTpubCxab2RTeW1ib2w6S2QsWm9kVW5kZWZpbmVkOnZjLFpvZE51bGw6eWMsWm9kQW55OnlzLFpvZFVua25vd246SG8sWm9kTmV2ZXI6Z2ksWm9kVm9pZDpaZCxab2RBcnJheTpicixab2RPYmplY3Q6dXQsWm9kVW5pb246eGMsWm9kRGlzY3JpbWluYXRlZFVuaW9uOlZmLFpvZEludGVyc2VjdGlvbjpfYyxab2RUdXBsZTpacixab2RSZWNvcmQ6d2MsWm9kTWFwOkdkLFpvZFNldDpybCxab2RGdW5jdGlvbjpycyxab2RMYXp5OlNjLFpvZExpdGVyYWw6RWMsWm9kRW51bTptbyxab2ROYXRpdmVFbnVtOkNjLFpvZFByb21pc2U6eHMsWm9kRWZmZWN0czpUcixab2RUcmFuc2Zvcm1lcjpUcixab2RPcHRpb25hbDpkaSxab2ROdWxsYWJsZTppbCxab2REZWZhdWx0OmJjLFpvZENhdGNoOllkLFpvZE5hTjpYZCxCUkFORDpNNCxab2RCcmFuZGVkOkZDLFpvZFBpcGVsaW5lOkhjLFpvZFJlYWRvbmx5OkpkLGN1c3RvbTpCQyxTY2hlbWE6Q2UsWm9kU2NoZW1hOkNlLGxhdGU6TDQsZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBkZX0sY29lcmNlOmdNLGFueTpXNCxhcnJheTpaNCxiaWdpbnQ6ajQsYm9vbGVhbjpIQyxkYXRlOno0LGRpc2NyaW1pbmF0ZWRVbmlvbjpKNCxlZmZlY3Q6RngsZW51bTpsTSxmdW5jdGlvbjpyTSxpbnN0YW5jZW9mOkQ0LGludGVyc2VjdGlvbjpRNCxsYXp5OmlNLGxpdGVyYWw6b00sbWFwOnRNLG5hbjpJNCxuYXRpdmVFbnVtOnNNLG5ldmVyOlY0LG51bGw6VTQsbnVsbGFibGU6dU0sbnVtYmVyOldDLG9iamVjdDpHNCxvYm9vbGVhbjptTSxvbnVtYmVyOmhNLG9wdGlvbmFsOmNNLG9zdHJpbmc6cE0scGlwZWxpbmU6Zk0scHJlcHJvY2VzczpkTSxwcm9taXNlOmFNLHJlY29yZDplTSxzZXQ6bk0sc3RyaWN0T2JqZWN0Olk0LHN0cmluZzpVQyxzeW1ib2w6RjQsdHJhbnNmb3JtZXI6RngsdHVwbGU6cTQsdW5kZWZpbmVkOkI0LHVuaW9uOlg0LHVua25vd246SDQsdm9pZDpLNCxORVZFUjp2TSxab2RJc3N1ZUNvZGU6SCxxdW90ZWxlc3NKc29uOl80LFpvZEVycm9yOkNyfSk7Y29uc3QgeU09a24udW5pb24oW2tuLm9iamVjdCh7aWQ6a24uc3RyaW5nKCksbW9kZTprbi5saXRlcmFsKCJwcm94eSIpLGZ1bGxfbmFtZTprbi5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKCksdXNlcm5hbWU6a24uc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLGF2YXRhcl91cmw6a24uc3RyaW5nKCkudXJsKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpLGVuYWJsZWQ6a24uYm9vbGVhbigpfSksa24ub2JqZWN0KHttb2RlOmtuLmxpdGVyYWwoImxvY2FsIiksZW5hYmxlZDprbi5ib29sZWFuKCkub3B0aW9uYWwoKX0pLGtuLm9iamVjdCh7bW9kZTprbi5saXRlcmFsKCJ1bmF1dGhvcml6ZWQiKSxlbmFibGVkOmtuLmJvb2xlYW4oKS5vcHRpb25hbCgpfSldKTtmdW5jdGlvbiB4TSh0KXtjb25zdFtlLG5dPWgudXNlU3RhdGUoe3N0YXR1czoibm90LWFza2VkIn0pLFtyLGldPWgudXNlU3RhdGUoMCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57bih7c3RhdHVzOiJsb2FkaW5nIn0pLHQuZ2V0U2Vzc2lvbigpLnRoZW4oYXN5bmMgbz0+e3RyeXtpZihGby5pc09rKG8pKXtjb25zdCBsPW8udmFsdWU7bih7c3RhdHVzOiJzdWNjZXNzIixkYXRhOnlNLnBhcnNlKGwpfSl9ZWxzZSBvLmVycm9yLnN0YXR1c0NvZGU9PT00MDE/KGNvbnNvbGUuZXJyb3IoIlVuYXV0aG9yaXplZCIsby5lcnJvciksbih7c3RhdHVzOiJzdWNjZXNzIixkYXRhOnttb2RlOiJ1bmF1dGhvcml6ZWQifX0pKTpyPDM/c2V0VGltZW91dCgoKT0+e2kocisxKX0sMjAwKnIpOm4oe3N0YXR1czoiZXJyb3IiLGVycm9yOiJDb3VsZCBub3QgZmV0Y2ggc2Vzc2lvbiJ9KX1jYXRjaChsKXtjb25zb2xlLmVycm9yKCJDb3VsZCBub3QgYXV0aG9yaXplOiIsbCksbih7c3RhdHVzOiJlcnJvciIsZXJyb3I6IkdvdCBhbiBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IHNlc3Npb24ifSl9fSl9LFtyXSksZX1jb25zdCBCeD10PT50eXBlb2YgdD09ImJvb2xlYW4iPyIiLmNvbmNhdCh0KTp0PT09MD8iMCI6dCxVeD13UyxfTT0odCxlKT0+bj0+e3ZhciByO2lmKChlPT1udWxsP3ZvaWQgMDplLnZhcmlhbnRzKT09bnVsbClyZXR1cm4gVXgodCxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzLG49PW51bGw/dm9pZCAwOm4uY2xhc3NOYW1lKTtjb25zdHt2YXJpYW50czppLGRlZmF1bHRWYXJpYW50czpvfT1lLGw9T2JqZWN0LmtleXMoaSkubWFwKGM9Pntjb25zdCB1PW49PW51bGw/dm9pZCAwOm5bY10sZD1vPT1udWxsP3ZvaWQgMDpvW2NdO2lmKHU9PT1udWxsKXJldHVybiBudWxsO2NvbnN0IGY9QngodSl8fEJ4KGQpO3JldHVybiBpW2NdW2ZdfSkscz1uJiZPYmplY3QuZW50cmllcyhuKS5yZWR1Y2UoKGMsdSk9PntsZXRbZCxmXT11O3JldHVybiBmPT09dm9pZCAwfHwoY1tkXT1mKSxjfSx7fSksYT1lPT1udWxsfHwocj1lLmNvbXBvdW5kVmFyaWFudHMpPT09bnVsbHx8cj09PXZvaWQgMD92b2lkIDA6ci5yZWR1Y2UoKGMsdSk9PntsZXR7Y2xhc3M6ZCxjbGFzc05hbWU6ZiwuLi5wfT11O3JldHVybiBPYmplY3QuZW50cmllcyhwKS5ldmVyeShnPT57bGV0W20sd109ZztyZXR1cm4gQXJyYXkuaXNBcnJheSh3KT93LmluY2x1ZGVzKHsuLi5vLC4uLnN9W21dKTp7Li4ubywuLi5zfVttXT09PXd9KT9bLi4uYyxkLGZdOmN9LFtdKTtyZXR1cm4gVXgodCxsLGEsbj09bnVsbD92b2lkIDA6bi5jbGFzcyxuPT1udWxsP3ZvaWQgMDpuLmNsYXNzTmFtZSl9LHdNPV9NKCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCIse3ZhcmlhbnRzOnt2YXJpYW50OntkZWZhdWx0OiJiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkvOTAiLGRlc3RydWN0aXZlOiJiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTAiLG91dGxpbmU6ImJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCIsc2Vjb25kYXJ5OiJiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAiLGdob3N0OiJob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCIsbGluazoidGV4dC1wcmltYXJ5IHVuZGVybGluZS1vZmZzZXQtNCBob3Zlcjp1bmRlcmxpbmUifSxzaXplOntkZWZhdWx0OiJoLTEwIHB4LTQgcHktMiIsc206ImgtOSByb3VuZGVkLW1kIHB4LTMiLGxnOiJoLTExIHJvdW5kZWQtbWQgcHgtOCIsaWNvbjoiaC0xMCB3LTEwIn19LGRlZmF1bHRWYXJpYW50czp7dmFyaWFudDoiZGVmYXVsdCIsc2l6ZToiZGVmYXVsdCJ9fSksUWQ9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsdmFyaWFudDplLHNpemU6bixhc0NoaWxkOnI9ITEsLi4uaX0sbyk9Pntjb25zdCBsPXI/aHM6ImJ1dHRvbiI7cmV0dXJuIHkuanN4KGwse2NsYXNzTmFtZTp4dCh3TSh7dmFyaWFudDplLHNpemU6bixjbGFzc05hbWU6dH0pKSxyZWY6bywuLi5pfSl9KTtRZC5kaXNwbGF5TmFtZT0iQnV0dG9uIjtmdW5jdGlvbiBWQyh0KXtjb25zdCBlPXQrIkNvbGxlY3Rpb25Qcm92aWRlciIsW24scl09Y2woZSksW2ksb109bihlLHtjb2xsZWN0aW9uUmVmOntjdXJyZW50Om51bGx9LGl0ZW1NYXA6bmV3IE1hcH0pLGw9cD0+e2NvbnN0e3Njb3BlOmcsY2hpbGRyZW46bX09cCx3PWllLnVzZVJlZihudWxsKSx2PWllLnVzZVJlZihuZXcgTWFwKS5jdXJyZW50O3JldHVybiBpZS5jcmVhdGVFbGVtZW50KGkse3Njb3BlOmcsaXRlbU1hcDp2LGNvbGxlY3Rpb25SZWY6d30sbSl9LHM9dCsiQ29sbGVjdGlvblNsb3QiLGE9aWUuZm9yd2FyZFJlZigocCxnKT0+e2NvbnN0e3Njb3BlOm0sY2hpbGRyZW46d309cCx2PW8ocyxtKSx4PXN0KGcsdi5jb2xsZWN0aW9uUmVmKTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudChocyx7cmVmOnh9LHcpfSksYz10KyJDb2xsZWN0aW9uSXRlbVNsb3QiLHU9ImRhdGEtcmFkaXgtY29sbGVjdGlvbi1pdGVtIixkPWllLmZvcndhcmRSZWYoKHAsZyk9Pntjb25zdHtzY29wZTptLGNoaWxkcmVuOncsLi4udn09cCx4PWllLnVzZVJlZihudWxsKSxfPXN0KGcseCksUz1vKGMsbSk7cmV0dXJuIGllLnVzZUVmZmVjdCgoKT0+KFMuaXRlbU1hcC5zZXQoeCx7cmVmOngsLi4udn0pLCgpPT52b2lkIFMuaXRlbU1hcC5kZWxldGUoeCkpKSxpZS5jcmVhdGVFbGVtZW50KGhzLHtbdV06IiIscmVmOl99LHcpfSk7ZnVuY3Rpb24gZihwKXtjb25zdCBnPW8odCsiQ29sbGVjdGlvbkNvbnN1bWVyIixwKTtyZXR1cm4gaWUudXNlQ2FsbGJhY2soKCk9Pntjb25zdCB3PWcuY29sbGVjdGlvblJlZi5jdXJyZW50O2lmKCF3KXJldHVybltdO2NvbnN0IHY9QXJyYXkuZnJvbSh3LnF1ZXJ5U2VsZWN0b3JBbGwoYFske3V9XWApKTtyZXR1cm4gQXJyYXkuZnJvbShnLml0ZW1NYXAudmFsdWVzKCkpLnNvcnQoKFMsRSk9PnYuaW5kZXhPZihTLnJlZi5jdXJyZW50KS12LmluZGV4T2YoRS5yZWYuY3VycmVudCkpfSxbZy5jb2xsZWN0aW9uUmVmLGcuaXRlbU1hcF0pfXJldHVyblt7UHJvdmlkZXI6bCxTbG90OmEsSXRlbVNsb3Q6ZH0sZixyXX1mdW5jdGlvbiBfcyh7cHJvcDp0LGRlZmF1bHRQcm9wOmUsb25DaGFuZ2U6bj0oKT0+e319KXtjb25zdFtyLGldPVNNKHtkZWZhdWx0UHJvcDplLG9uQ2hhbmdlOm59KSxvPXQhPT12b2lkIDAsbD1vP3Q6cixzPWVuKG4pLGE9aC51c2VDYWxsYmFjayhjPT57aWYobyl7Y29uc3QgZD10eXBlb2YgYz09ImZ1bmN0aW9uIj9jKHQpOmM7ZCE9PXQmJnMoZCl9ZWxzZSBpKGMpfSxbbyx0LGksc10pO3JldHVybltsLGFdfWZ1bmN0aW9uIFNNKHtkZWZhdWx0UHJvcDp0LG9uQ2hhbmdlOmV9KXtjb25zdCBuPWgudXNlU3RhdGUodCksW3JdPW4saT1oLnVzZVJlZihyKSxvPWVuKGUpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2kuY3VycmVudCE9PXImJihvKHIpLGkuY3VycmVudD1yKX0sW3IsaSxvXSksbn1jb25zdCBFTT1IMS51c2VJZHx8KCgpPT57fSk7bGV0IENNPTA7ZnVuY3Rpb24gS2YodCl7Y29uc3RbZSxuXT1oLnVzZVN0YXRlKEVNKCkpO3JldHVybiBIbigoKT0+e3R8fG4ocj0+cj8/U3RyaW5nKENNKyspKX0sW3RdKSx0fHwoZT9gcmFkaXgtJHtlfWA6IiIpfWNvbnN0IEtDPSJDb2xsYXBzaWJsZSIsW2JNLFpDXT1jbChLQyksW2tNLEt2XT1iTShLQyksJE09aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4sb3BlbjpyLGRlZmF1bHRPcGVuOmksZGlzYWJsZWQ6byxvbk9wZW5DaGFuZ2U6bCwuLi5zfT10LFthPSExLGNdPV9zKHtwcm9wOnIsZGVmYXVsdFByb3A6aSxvbkNoYW5nZTpsfSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChrTSx7c2NvcGU6bixkaXNhYmxlZDpvLGNvbnRlbnRJZDpLZigpLG9wZW46YSxvbk9wZW5Ub2dnbGU6aC51c2VDYWxsYmFjaygoKT0+Yyh1PT4hdSksW2NdKX0saC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImRhdGEtc3RhdGUiOlp2KGEpLCJkYXRhLWRpc2FibGVkIjpvPyIiOnZvaWQgMH0scyx7cmVmOmV9KSkpfSksVE09IkNvbGxhcHNpYmxlVHJpZ2dlciIsTk09aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4sLi4ucn09dCxpPUt2KFRNLG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoS2UuYnV0dG9uLG9lKHt0eXBlOiJidXR0b24iLCJhcmlhLWNvbnRyb2xzIjppLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6aS5vcGVufHwhMSwiZGF0YS1zdGF0ZSI6WnYoaS5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6aS5kaXNhYmxlZD8iIjp2b2lkIDAsZGlzYWJsZWQ6aS5kaXNhYmxlZH0scix7cmVmOmUsb25DbGljazpudCh0Lm9uQ2xpY2ssaS5vbk9wZW5Ub2dnbGUpfSkpfSksR0M9IkNvbGxhcHNpYmxlQ29udGVudCIsUk09aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7Zm9yY2VNb3VudDpuLC4uLnJ9PXQsaT1LdihHQyx0Ll9fc2NvcGVDb2xsYXBzaWJsZSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudCgkcyx7cHJlc2VudDpufHxpLm9wZW59LCh7cHJlc2VudDpvfSk9PmguY3JlYXRlRWxlbWVudChPTSxvZSh7fSxyLHtyZWY6ZSxwcmVzZW50Om99KSkpfSksT009aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUNvbGxhcHNpYmxlOm4scHJlc2VudDpyLGNoaWxkcmVuOmksLi4ub309dCxsPUt2KEdDLG4pLFtzLGFdPWgudXNlU3RhdGUociksYz1oLnVzZVJlZihudWxsKSx1PXN0KGUsYyksZD1oLnVzZVJlZigwKSxmPWQuY3VycmVudCxwPWgudXNlUmVmKDApLGc9cC5jdXJyZW50LG09bC5vcGVufHxzLHc9aC51c2VSZWYobSksdj1oLnVzZVJlZigpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHg9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT53LmN1cnJlbnQ9ITEpO3JldHVybigpPT5jYW5jZWxBbmltYXRpb25GcmFtZSh4KX0sW10pLEhuKCgpPT57Y29uc3QgeD1jLmN1cnJlbnQ7aWYoeCl7di5jdXJyZW50PXYuY3VycmVudHx8e3RyYW5zaXRpb25EdXJhdGlvbjp4LnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbixhbmltYXRpb25OYW1lOnguc3R5bGUuYW5pbWF0aW9uTmFtZX0seC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249IjBzIix4LnN0eWxlLmFuaW1hdGlvbk5hbWU9Im5vbmUiO2NvbnN0IF89eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLmN1cnJlbnQ9Xy5oZWlnaHQscC5jdXJyZW50PV8ud2lkdGgsdy5jdXJyZW50fHwoeC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb249di5jdXJyZW50LnRyYW5zaXRpb25EdXJhdGlvbix4LnN0eWxlLmFuaW1hdGlvbk5hbWU9di5jdXJyZW50LmFuaW1hdGlvbk5hbWUpLGEocil9fSxbbC5vcGVuLHJdKSxoLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHsiZGF0YS1zdGF0ZSI6WnYobC5vcGVuKSwiZGF0YS1kaXNhYmxlZCI6bC5kaXNhYmxlZD8iIjp2b2lkIDAsaWQ6bC5jb250ZW50SWQsaGlkZGVuOiFtfSxvLHtyZWY6dSxzdHlsZTp7Ii0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC1oZWlnaHQiOmY/YCR7Zn1weGA6dm9pZCAwLCItLXJhZGl4LWNvbGxhcHNpYmxlLWNvbnRlbnQtd2lkdGgiOmc/YCR7Z31weGA6dm9pZCAwLC4uLnQuc3R5bGV9fSksbSYmaSl9KTtmdW5jdGlvbiBadih0KXtyZXR1cm4gdD8ib3BlbiI6ImNsb3NlZCJ9Y29uc3QgUE09JE0sQU09Tk0sTU09Uk0sRW89IkFjY29yZGlvbiIsTE09WyJIb21lIiwiRW5kIiwiQXJyb3dEb3duIiwiQXJyb3dVcCIsIkFycm93TGVmdCIsIkFycm93UmlnaHQiXSxbR3YsRE0sSU1dPVZDKEVvKSxbWmYsakldPWNsKEVvLFtJTSxaQ10pLFl2PVpDKCksWUM9aWUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3R5cGU6biwuLi5yfT10LGk9cixvPXI7cmV0dXJuIGllLmNyZWF0ZUVsZW1lbnQoR3YuUHJvdmlkZXIse3Njb3BlOnQuX19zY29wZUFjY29yZGlvbn0sbj09PSJtdWx0aXBsZSI/aWUuY3JlYXRlRWxlbWVudChCTSxvZSh7fSxvLHtyZWY6ZX0pKTppZS5jcmVhdGVFbGVtZW50KEZNLG9lKHt9LGkse3JlZjplfSkpKX0pO1lDLnByb3BUeXBlcz17dHlwZSh0KXtjb25zdCBlPXQudmFsdWV8fHQuZGVmYXVsdFZhbHVlO3JldHVybiB0LnR5cGUmJiFbInNpbmdsZSIsIm11bHRpcGxlIl0uaW5jbHVkZXModC50eXBlKT9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIG9uZSBvZiBgc2luZ2xlIHwgbXVsdGlwbGVgLiIpOnQudHlwZT09PSJtdWx0aXBsZSImJnR5cGVvZiBlPT0ic3RyaW5nIj9uZXcgRXJyb3IoIkludmFsaWQgcHJvcCBgdHlwZWAgc3VwcGxpZWQgdG8gYEFjY29yZGlvbmAuIEV4cGVjdGVkIGBzaW5nbGVgIHdoZW4gYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBpcyB0eXBlIGBzdHJpbmdgLiIpOnQudHlwZT09PSJzaW5nbGUiJiZBcnJheS5pc0FycmF5KGUpP25ldyBFcnJvcigiSW52YWxpZCBwcm9wIGB0eXBlYCBzdXBwbGllZCB0byBgQWNjb3JkaW9uYC4gRXhwZWN0ZWQgYG11bHRpcGxlYCB3aGVuIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgaXMgdHlwZSBgc3RyaW5nW11gLiIpOm51bGx9fTtjb25zdFtYQyxqTV09WmYoRW8pLFtKQyx6TV09WmYoRW8se2NvbGxhcHNpYmxlOiExfSksRk09aWUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTppPSgpPT57fSxjb2xsYXBzaWJsZTpvPSExLC4uLmx9PXQsW3MsYV09X3Moe3Byb3A6bixkZWZhdWx0UHJvcDpyLG9uQ2hhbmdlOml9KTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudChYQyx7c2NvcGU6dC5fX3Njb3BlQWNjb3JkaW9uLHZhbHVlOnM/W3NdOltdLG9uSXRlbU9wZW46YSxvbkl0ZW1DbG9zZTppZS51c2VDYWxsYmFjaygoKT0+byYmYSgiIiksW28sYV0pfSxpZS5jcmVhdGVFbGVtZW50KEpDLHtzY29wZTp0Ll9fc2NvcGVBY2NvcmRpb24sY29sbGFwc2libGU6b30saWUuY3JlYXRlRWxlbWVudChRQyxvZSh7fSxsLHtyZWY6ZX0pKSkpfSksQk09aWUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3ZhbHVlOm4sZGVmYXVsdFZhbHVlOnIsb25WYWx1ZUNoYW5nZTppPSgpPT57fSwuLi5vfT10LFtsPVtdLHNdPV9zKHtwcm9wOm4sZGVmYXVsdFByb3A6cixvbkNoYW5nZTppfSksYT1pZS51c2VDYWxsYmFjayh1PT5zKChkPVtdKT0+Wy4uLmQsdV0pLFtzXSksYz1pZS51c2VDYWxsYmFjayh1PT5zKChkPVtdKT0+ZC5maWx0ZXIoZj0+ZiE9PXUpKSxbc10pO3JldHVybiBpZS5jcmVhdGVFbGVtZW50KFhDLHtzY29wZTp0Ll9fc2NvcGVBY2NvcmRpb24sdmFsdWU6bCxvbkl0ZW1PcGVuOmEsb25JdGVtQ2xvc2U6Y30saWUuY3JlYXRlRWxlbWVudChKQyx7c2NvcGU6dC5fX3Njb3BlQWNjb3JkaW9uLGNvbGxhcHNpYmxlOiEwfSxpZS5jcmVhdGVFbGVtZW50KFFDLG9lKHt9LG8se3JlZjplfSkpKSl9KSxbVU0sR2ZdPVpmKEVvKSxRQz1pZS5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLGRpc2FibGVkOnIsZGlyOmksb3JpZW50YXRpb246bz0idmVydGljYWwiLC4uLmx9PXQscz1pZS51c2VSZWYobnVsbCksYT1zdChzLGUpLGM9RE0obiksZD1vdihpKT09PSJsdHIiLGY9bnQodC5vbktleURvd24scD0+e3ZhciBnO2lmKCFMTS5pbmNsdWRlcyhwLmtleSkpcmV0dXJuO2NvbnN0IG09cC50YXJnZXQsdz1jKCkuZmlsdGVyKEE9Pnt2YXIgVDtyZXR1cm4hKChUPUEucmVmLmN1cnJlbnQpIT09bnVsbCYmVCE9PXZvaWQgMCYmVC5kaXNhYmxlZCl9KSx2PXcuZmluZEluZGV4KEE9PkEucmVmLmN1cnJlbnQ9PT1tKSx4PXcubGVuZ3RoO2lmKHY9PT0tMSlyZXR1cm47cC5wcmV2ZW50RGVmYXVsdCgpO2xldCBfPXY7Y29uc3QgUz0wLEU9eC0xLGs9KCk9PntfPXYrMSxfPkUmJihfPVMpfSxDPSgpPT57Xz12LTEsXzxTJiYoXz1FKX07c3dpdGNoKHAua2V5KXtjYXNlIkhvbWUiOl89UzticmVhaztjYXNlIkVuZCI6Xz1FO2JyZWFrO2Nhc2UiQXJyb3dSaWdodCI6bz09PSJob3Jpem9udGFsIiYmKGQ/aygpOkMoKSk7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOm89PT0idmVydGljYWwiJiZrKCk7YnJlYWs7Y2FzZSJBcnJvd0xlZnQiOm89PT0iaG9yaXpvbnRhbCImJihkP0MoKTprKCkpO2JyZWFrO2Nhc2UiQXJyb3dVcCI6bz09PSJ2ZXJ0aWNhbCImJkMoKTticmVha31jb25zdCBOPV8leDsoZz13W05dLnJlZi5jdXJyZW50KT09PW51bGx8fGc9PT12b2lkIDB8fGcuZm9jdXMoKX0pO3JldHVybiBpZS5jcmVhdGVFbGVtZW50KFVNLHtzY29wZTpuLGRpc2FibGVkOnIsZGlyZWN0aW9uOmksb3JpZW50YXRpb246b30saWUuY3JlYXRlRWxlbWVudChHdi5TbG90LHtzY29wZTpufSxpZS5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7fSxsLHsiZGF0YS1vcmllbnRhdGlvbiI6byxyZWY6YSxvbktleURvd246cj92b2lkIDA6Zn0pKSkpfSksR209IkFjY29yZGlvbkl0ZW0iLFtXTSxYdl09WmYoR20pLFltPWllLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlQWNjb3JkaW9uOm4sdmFsdWU6ciwuLi5pfT10LG89R2YoR20sbiksbD1qTShHbSxuKSxzPVl2KG4pLGE9S2YoKSxjPXImJmwudmFsdWUuaW5jbHVkZXMocil8fCExLHU9by5kaXNhYmxlZHx8dC5kaXNhYmxlZDtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudChXTSx7c2NvcGU6bixvcGVuOmMsZGlzYWJsZWQ6dSx0cmlnZ2VySWQ6YX0saWUuY3JlYXRlRWxlbWVudChQTSxvZSh7ImRhdGEtb3JpZW50YXRpb24iOm8ub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOnFDKGMpfSxzLGkse3JlZjplLGRpc2FibGVkOnUsb3BlbjpjLG9uT3BlbkNoYW5nZTpkPT57ZD9sLm9uSXRlbU9wZW4ocik6bC5vbkl0ZW1DbG9zZShyKX19KSkpfSksSE09IkFjY29yZGlvbkhlYWRlciIsVk09aWUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT10LGk9R2YoRW8sbiksbz1YdihITSxuKTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudChLZS5oMyxvZSh7ImRhdGEtb3JpZW50YXRpb24iOmkub3JpZW50YXRpb24sImRhdGEtc3RhdGUiOnFDKG8ub3BlbiksImRhdGEtZGlzYWJsZWQiOm8uZGlzYWJsZWQ/IiI6dm9pZCAwfSxyLHtyZWY6ZX0pKX0pLFd4PSJBY2NvcmRpb25UcmlnZ2VyIixYbT1pZS5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZUFjY29yZGlvbjpuLC4uLnJ9PXQsaT1HZihFbyxuKSxvPVh2KFd4LG4pLGw9ek0oV3gsbikscz1ZdihuKTtyZXR1cm4gaWUuY3JlYXRlRWxlbWVudChHdi5JdGVtU2xvdCx7c2NvcGU6bn0saWUuY3JlYXRlRWxlbWVudChBTSxvZSh7ImFyaWEtZGlzYWJsZWQiOm8ub3BlbiYmIWwuY29sbGFwc2libGV8fHZvaWQgMCwiZGF0YS1vcmllbnRhdGlvbiI6aS5vcmllbnRhdGlvbixpZDpvLnRyaWdnZXJJZH0scyxyLHtyZWY6ZX0pKSl9KSxLTT0iQWNjb3JkaW9uQ29udGVudCIsWk09aWUuZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVBY2NvcmRpb246biwuLi5yfT10LGk9R2YoRW8sbiksbz1YdihLTSxuKSxsPVl2KG4pO3JldHVybiBpZS5jcmVhdGVFbGVtZW50KE1NLG9lKHtyb2xlOiJyZWdpb24iLCJhcmlhLWxhYmVsbGVkYnkiOm8udHJpZ2dlcklkLCJkYXRhLW9yaWVudGF0aW9uIjppLm9yaWVudGF0aW9ufSxsLHIse3JlZjplLHN0eWxlOnsiLS1yYWRpeC1hY2NvcmRpb24tY29udGVudC1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1jb2xsYXBzaWJsZS1jb250ZW50LWhlaWdodCkiLCItLXJhZGl4LWFjY29yZGlvbi1jb250ZW50LXdpZHRoIjoidmFyKC0tcmFkaXgtY29sbGFwc2libGUtY29udGVudC13aWR0aCkiLC4uLnQuc3R5bGV9fSkpfSk7ZnVuY3Rpb24gcUModCl7cmV0dXJuIHQ/Im9wZW4iOiJjbG9zZWQifWNvbnN0IEdNPVlDLFlNPVltLFhNPVZNLGViPVhtLHRiPVpNLEptPUdNLG5iPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeChZTSx7cmVmOm4sY2xhc3NOYW1lOnh0KCJib3JkZXItYiIsdCksLi4uZX0pKTtuYi5kaXNwbGF5TmFtZT0iQWNjb3JkaW9uSXRlbSI7Y29uc3QgcmI9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsY2hpbGRyZW46ZSwuLi5ufSxyKT0+eS5qc3goWE0se2NsYXNzTmFtZToiZmxleCIsY2hpbGRyZW46eS5qc3hzKGViLHtyZWY6cixjbGFzc05hbWU6eHQoImZsZXggZmxleC0xIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHktNCBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBob3Zlcjp1bmRlcmxpbmUgWyZbZGF0YS1zdGF0ZT1vcGVuXT5zdmddOnJvdGF0ZS0xODAiLHQpLC4uLm4sY2hpbGRyZW46W2UseS5qc3goRWQse2NsYXNzTmFtZToidy00IGgtNCB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0yMDAgc2hyaW5rLTAifSldfSl9KSk7cmIuZGlzcGxheU5hbWU9ZWIuZGlzcGxheU5hbWU7Y29uc3QgcWQ9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsY2hpbGRyZW46ZSwuLi5ufSxyKT0+eS5qc3godGIse3JlZjpyLGNsYXNzTmFtZTp4dCgib3ZlcmZsb3ctaGlkZGVuIHRleHQtc20gdHJhbnNpdGlvbi1hbGwgZGF0YS1bc3RhdGU9Y2xvc2VkXTphbmltYXRlLWFjY29yZGlvbi11cCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWFjY29yZGlvbi1kb3duIix0KSwuLi5uLGNoaWxkcmVuOnkuanN4KCJkaXYiLHtjbGFzc05hbWU6InB0LTAgcGItNCIsY2hpbGRyZW46ZX0pfSkpO3FkLmRpc3BsYXlOYW1lPXRiLmRpc3BsYXlOYW1lO2Z1bmN0aW9uIEpNKHthcGk6dCxwYXRjaGVzOmUsb25Db21taXQ6bixvbkNhbmNlbDpyfSl7Y29uc3RbaSxvXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBsPXM9PntzLmtleT09PSJFc2NhcGUiJiZyKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsbCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixsKX0sW10pLHkuanN4cyhRTSx7Y2hpbGRyZW46W3kuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXgganVzdGlmeS1lbmQgcC0yIixjaGlsZHJlbjp5LmpzeCgiYnV0dG9uIix7b25DbGljazpyLGNoaWxkcmVuOnkuanN4KGxtLHt9KX0pfSkseS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGgtZnVsbCBwLTggZ2FwLXktNSIsY2hpbGRyZW46W3kuanN4KCJoMSIse2NsYXNzTmFtZToiYmxvY2sgZm9udC1zYW5zIHRleHQteGwgZm9udC1ib2xkIixjaGlsZHJlbjoiUmV2aWV3IGNoYW5nZXMifSkseS5qc3goInVsIix7Y2hpbGRyZW46T2JqZWN0LmVudHJpZXMoZSkubWFwKChbbCxzXSk9PnkuanN4KCJsaSIse2NoaWxkcmVuOnkuanN4KEptLHt0eXBlOiJzaW5nbGUiLGNvbGxhcHNpYmxlOiEwLGNoaWxkcmVuOnkuanN4cyhZbSx7dmFsdWU6bCxjaGlsZHJlbjpbeS5qc3hzKFhtLHtjbGFzc05hbWU6ImdyaWQgZ3JpZC1jb2xzLVsxZnJfbWluLWNvbnRlbnRdIGdhcC14LTIiLGNoaWxkcmVuOlt5LmpzeCgic3BhbiIse2NoaWxkcmVuOmx9KSx5LmpzeHMoInNwYW4iLHtjbGFzc05hbWU6ImZsZXgiLGNoaWxkcmVuOlt5LmpzeChwUix7c2l6ZToxNH0pLHkuanN4KCJzcGFuIix7Y2hpbGRyZW46cy5sZW5ndGh9KSx5LmpzeCgic3BhbiIse2NoaWxkcmVuOnkuanN4KEVkLHtzaXplOjE0fSl9KV19KV19KSx5LmpzeChxZCx7Y2hpbGRyZW46eS5qc3goSm0se3R5cGU6Im11bHRpcGxlIixjaGlsZHJlbjpzLm1hcChhPT55LmpzeHMoWW0se3ZhbHVlOmEsY2hpbGRyZW46W3kuanN4KFhtLHtjaGlsZHJlbjp5LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtNSIsY2hpbGRyZW46W3kuanN4KCJzcGFuIix7Y2hpbGRyZW46IkNoYW5nZWQgYnk6IEpvaG4gU21pdGgifSkseS5qc3goInNwYW4iLHtjaGlsZHJlbjoiQ2hhbmdlZCBhdDogMjAyNC0wMS0wNCAxMzoyNTowMCJ9KSx5LmpzeCgiaW1nIix7Y2xhc3NOYW1lOiJoLVsxNHB4XSB3LVsxNHB4XSIsc3JjOiJodHRwczovL3JhbmRvbXVzZXIubWUvYXBpL3BvcnRyYWl0cy9tZW4vMy5qcGcifSkseS5qc3gobG0se3NpemU6MTR9KSx5LmpzeChFZCx7c2l6ZToxNH0pXX0pfSkseS5qc3gocWQse2NoaWxkcmVuOnkuanN4KCJkaXYiLHtjaGlsZHJlbjonQ2hhbmdlZCB0bzogIkZvbyBiYXIiJ30pfSldfSkpfSl9KV19KX0pfSxsKSl9KSx5LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBnYXAteC00IixjaGlsZHJlbjpbeS5qc3goUWQse3ZhcmlhbnQ6InNlY29uZGFyeSIsb25DbGljazpyLGNoaWxkcmVuOiJDYW5jZWwifSkseS5qc3goUWQse2Rpc2FibGVkOk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTB8fGksb25DbGljazooKT0+e28oITApLHQucG9zdENvbW1pdCh7cGF0Y2hlczplfSkudGhlbihsPT57Rm8uaXNFcnIobCk/KGNvbnNvbGUuZXJyb3IobC5lcnJvciksYWxlcnQoIkNvdWxkIG5vdCBjb21taXQgcGF0Y2hlczogIitsLmVycm9yLm1lc3NhZ2UpKTooY29uc29sZS5sb2coIkNvbW1pdHRlZCBwYXRjaGVzOiAiLGwudmFsdWUpLG4oKSl9KS5maW5hbGx5KCgpPT57byghMSl9KX0sY2hpbGRyZW46aT8iQ29tbWl0dGluZy4uLiI6IkNvbW1pdCJ9KV19KV19KV19KX1mdW5jdGlvbiBRTSh7Y2hpbGRyZW46dH0pe3JldHVybiB5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJoLWZ1bGwgdy1mdWxsIHJvdW5kZWQtbGcgYmctZ3JhZGllbnQtdG8tYnIgZnJvbS1iYWNrZ3JvdW5kLzkwIGZyb20tNDAlIHRvLWJhY2tncm91bmQgYmFja2Ryb3AtYmx1ci1sZyB0ZXh0LXByaW1hcnkgZHJvcC1zaGFkb3ctMnhsIixjaGlsZHJlbjp0fSl9Y29uc3QgSnY9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsdHlwZTplLC4uLm59LHIpPT55LmpzeCgiaW5wdXQiLHt0eXBlOmUsY2xhc3NOYW1lOnh0KCJmbGV4IGgtMTAgdy1mdWxsIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTMgcHktMiB0ZXh0LXNtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLHQpLHJlZjpyLC4uLm59KSk7SnYuZGlzcGxheU5hbWU9IklucHV0IjtmdW5jdGlvbiBxTSh0LGU9Z2xvYmFsVGhpcz09bnVsbD92b2lkIDA6Z2xvYmFsVGhpcy5kb2N1bWVudCl7Y29uc3Qgbj1lbih0KTtoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHI9aT0+e2kua2V5PT09IkVzY2FwZSImJm4oaSl9O3JldHVybiBlLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLHIpLCgpPT5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLHIpfSxbbixlXSl9Y29uc3QgUW09ImRpc21pc3NhYmxlTGF5ZXIudXBkYXRlIixlNT0iZGlzbWlzc2FibGVMYXllci5wb2ludGVyRG93bk91dHNpZGUiLHQ1PSJkaXNtaXNzYWJsZUxheWVyLmZvY3VzT3V0c2lkZSI7bGV0IEh4O2NvbnN0IG41PWguY3JlYXRlQ29udGV4dCh7bGF5ZXJzOm5ldyBTZXQsbGF5ZXJzV2l0aE91dHNpZGVQb2ludGVyRXZlbnRzRGlzYWJsZWQ6bmV3IFNldCxicmFuY2hlczpuZXcgU2V0fSkscjU9aC5mb3J3YXJkUmVmKCh0LGUpPT57dmFyIG47Y29uc3R7ZGlzYWJsZU91dHNpZGVQb2ludGVyRXZlbnRzOnI9ITEsb25Fc2NhcGVLZXlEb3duOmksb25Qb2ludGVyRG93bk91dHNpZGU6byxvbkZvY3VzT3V0c2lkZTpsLG9uSW50ZXJhY3RPdXRzaWRlOnMsb25EaXNtaXNzOmEsLi4uY309dCx1PWgudXNlQ29udGV4dChuNSksW2QsZl09aC51c2VTdGF0ZShudWxsKSxwPShuPWQ9PW51bGw/dm9pZCAwOmQub3duZXJEb2N1bWVudCkhPT1udWxsJiZuIT09dm9pZCAwP246Z2xvYmFsVGhpcz09bnVsbD92b2lkIDA6Z2xvYmFsVGhpcy5kb2N1bWVudCxbLGddPWgudXNlU3RhdGUoe30pLG09c3QoZSxOPT5mKE4pKSx3PUFycmF5LmZyb20odS5sYXllcnMpLFt2XT1bLi4udS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZF0uc2xpY2UoLTEpLHg9dy5pbmRleE9mKHYpLF89ZD93LmluZGV4T2YoZCk6LTEsUz11LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLnNpemU+MCxFPV8+PXgsaz1pNShOPT57Y29uc3QgQT1OLnRhcmdldCxUPVsuLi51LmJyYW5jaGVzXS5zb21lKEQ9PkQuY29udGFpbnMoQSkpOyFFfHxUfHwobz09bnVsbHx8byhOKSxzPT1udWxsfHxzKE4pLE4uZGVmYXVsdFByZXZlbnRlZHx8YT09bnVsbHx8YSgpKX0scCksQz1vNShOPT57Y29uc3QgQT1OLnRhcmdldDtbLi4udS5icmFuY2hlc10uc29tZShEPT5ELmNvbnRhaW5zKEEpKXx8KGw9PW51bGx8fGwoTikscz09bnVsbHx8cyhOKSxOLmRlZmF1bHRQcmV2ZW50ZWR8fGE9PW51bGx8fGEoKSl9LHApO3JldHVybiBxTShOPT57Xz09PXUubGF5ZXJzLnNpemUtMSYmKGk9PW51bGx8fGkoTiksIU4uZGVmYXVsdFByZXZlbnRlZCYmYSYmKE4ucHJldmVudERlZmF1bHQoKSxhKCkpKX0scCksaC51c2VFZmZlY3QoKCk9PntpZihkKXJldHVybiByJiYodS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MCYmKEh4PXAuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzLHAuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPSJub25lIiksdS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5hZGQoZCkpLHUubGF5ZXJzLmFkZChkKSxWeCgpLCgpPT57ciYmdS5sYXllcnNXaXRoT3V0c2lkZVBvaW50ZXJFdmVudHNEaXNhYmxlZC5zaXplPT09MSYmKHAuYm9keS5zdHlsZS5wb2ludGVyRXZlbnRzPUh4KX19LFtkLHAscix1XSksaC51c2VFZmZlY3QoKCk9PigpPT57ZCYmKHUubGF5ZXJzLmRlbGV0ZShkKSx1LmxheWVyc1dpdGhPdXRzaWRlUG9pbnRlckV2ZW50c0Rpc2FibGVkLmRlbGV0ZShkKSxWeCgpKX0sW2QsdV0pLGgudXNlRWZmZWN0KCgpPT57Y29uc3QgTj0oKT0+Zyh7fSk7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUW0sTiksKCk9PmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoUW0sTil9LFtdKSxoLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHt9LGMse3JlZjptLHN0eWxlOntwb2ludGVyRXZlbnRzOlM/RT8iYXV0byI6Im5vbmUiOnZvaWQgMCwuLi50LnN0eWxlfSxvbkZvY3VzQ2FwdHVyZTpudCh0Lm9uRm9jdXNDYXB0dXJlLEMub25Gb2N1c0NhcHR1cmUpLG9uQmx1ckNhcHR1cmU6bnQodC5vbkJsdXJDYXB0dXJlLEMub25CbHVyQ2FwdHVyZSksb25Qb2ludGVyRG93bkNhcHR1cmU6bnQodC5vblBvaW50ZXJEb3duQ2FwdHVyZSxrLm9uUG9pbnRlckRvd25DYXB0dXJlKX0pKX0pO2Z1bmN0aW9uIGk1KHQsZT1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPWVuKHQpLHI9aC51c2VSZWYoITEpLGk9aC51c2VSZWYoKCk9Pnt9KTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBvPXM9PntpZihzLnRhcmdldCYmIXIuY3VycmVudCl7bGV0IHU9ZnVuY3Rpb24oKXtpYihlNSxuLGMse2Rpc2NyZXRlOiEwfSl9O3ZhciBhPXU7Y29uc3QgYz17b3JpZ2luYWxFdmVudDpzfTtzLnBvaW50ZXJUeXBlPT09InRvdWNoIj8oZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaS5jdXJyZW50KSxpLmN1cnJlbnQ9dSxlLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixpLmN1cnJlbnQse29uY2U6ITB9KSk6dSgpfWVsc2UgZS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsaS5jdXJyZW50KTtyLmN1cnJlbnQ9ITF9LGw9d2luZG93LnNldFRpbWVvdXQoKCk9PntlLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIixvKX0sMCk7cmV0dXJuKCk9Pnt3aW5kb3cuY2xlYXJUaW1lb3V0KGwpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLG8pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLGkuY3VycmVudCl9fSxbZSxuXSkse29uUG9pbnRlckRvd25DYXB0dXJlOigpPT5yLmN1cnJlbnQ9ITB9fWZ1bmN0aW9uIG81KHQsZT1nbG9iYWxUaGlzPT1udWxsP3ZvaWQgMDpnbG9iYWxUaGlzLmRvY3VtZW50KXtjb25zdCBuPWVuKHQpLHI9aC51c2VSZWYoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IGk9bz0+e28udGFyZ2V0JiYhci5jdXJyZW50JiZpYih0NSxuLHtvcmlnaW5hbEV2ZW50Om99LHtkaXNjcmV0ZTohMX0pfTtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKCJmb2N1c2luIixpKSwoKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1c2luIixpKX0sW2Usbl0pLHtvbkZvY3VzQ2FwdHVyZTooKT0+ci5jdXJyZW50PSEwLG9uQmx1ckNhcHR1cmU6KCk9PnIuY3VycmVudD0hMX19ZnVuY3Rpb24gVngoKXtjb25zdCB0PW5ldyBDdXN0b21FdmVudChRbSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh0KX1mdW5jdGlvbiBpYih0LGUsbix7ZGlzY3JldGU6cn0pe2NvbnN0IGk9bi5vcmlnaW5hbEV2ZW50LnRhcmdldCxvPW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiExLGNhbmNlbGFibGU6ITAsZGV0YWlsOm59KTtlJiZpLmFkZEV2ZW50TGlzdGVuZXIodCxlLHtvbmNlOiEwfSkscj9jMihpLG8pOmkuZGlzcGF0Y2hFdmVudChvKX1sZXQgWXA9MDtmdW5jdGlvbiBsNSgpe2gudXNlRWZmZWN0KCgpPT57dmFyIHQsZTtjb25zdCBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIltkYXRhLXJhZGl4LWZvY3VzLWd1YXJkXSIpO3JldHVybiBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJiZWdpbiIsKHQ9blswXSkhPT1udWxsJiZ0IT09dm9pZCAwP3Q6S3goKSksZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoImJlZm9yZWVuZCIsKGU9blsxXSkhPT1udWxsJiZlIT09dm9pZCAwP2U6S3goKSksWXArKywoKT0+e1lwPT09MSYmZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiW2RhdGEtcmFkaXgtZm9jdXMtZ3VhcmRdIikuZm9yRWFjaChyPT5yLnJlbW92ZSgpKSxZcC0tfX0sW10pfWZ1bmN0aW9uIEt4KCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIHQuc2V0QXR0cmlidXRlKCJkYXRhLXJhZGl4LWZvY3VzLWd1YXJkIiwiIiksdC50YWJJbmRleD0wLHQuc3R5bGUuY3NzVGV4dD0ib3V0bGluZTogbm9uZTsgb3BhY2l0eTogMDsgcG9zaXRpb246IGZpeGVkOyBwb2ludGVyLWV2ZW50czogbm9uZSIsdH1jb25zdCBYcD0iZm9jdXNTY29wZS5hdXRvRm9jdXNPbk1vdW50IixKcD0iZm9jdXNTY29wZS5hdXRvRm9jdXNPblVubW91bnQiLFp4PXtidWJibGVzOiExLGNhbmNlbGFibGU6ITB9LHM1PWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e2xvb3A6bj0hMSx0cmFwcGVkOnI9ITEsb25Nb3VudEF1dG9Gb2N1czppLG9uVW5tb3VudEF1dG9Gb2N1czpvLC4uLmx9PXQsW3MsYV09aC51c2VTdGF0ZShudWxsKSxjPWVuKGkpLHU9ZW4obyksZD1oLnVzZVJlZihudWxsKSxmPXN0KGUsbT0+YShtKSkscD1oLnVzZVJlZih7cGF1c2VkOiExLHBhdXNlKCl7dGhpcy5wYXVzZWQ9ITB9LHJlc3VtZSgpe3RoaXMucGF1c2VkPSExfX0pLmN1cnJlbnQ7aC51c2VFZmZlY3QoKCk9PntpZihyKXtsZXQgeD1mdW5jdGlvbihrKXtpZihwLnBhdXNlZHx8IXMpcmV0dXJuO2NvbnN0IEM9ay50YXJnZXQ7cy5jb250YWlucyhDKT9kLmN1cnJlbnQ9QzpMaShkLmN1cnJlbnQse3NlbGVjdDohMH0pfSxfPWZ1bmN0aW9uKGspe2lmKHAucGF1c2VkfHwhcylyZXR1cm47Y29uc3QgQz1rLnJlbGF0ZWRUYXJnZXQ7QyE9PW51bGwmJihzLmNvbnRhaW5zKEMpfHxMaShkLmN1cnJlbnQse3NlbGVjdDohMH0pKX0sUz1mdW5jdGlvbihrKXtpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZG9jdW1lbnQuYm9keSlmb3IoY29uc3QgTiBvZiBrKU4ucmVtb3ZlZE5vZGVzLmxlbmd0aD4wJiZMaShzKX07dmFyIG09eCx3PV8sdj1TO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixfKTtjb25zdCBFPW5ldyBNdXRhdGlvbk9ic2VydmVyKFMpO3JldHVybiBzJiZFLm9ic2VydmUocyx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KSwoKT0+e2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzaW4iLHgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3Vzb3V0IixfKSxFLmRpc2Nvbm5lY3QoKX19fSxbcixzLHAucGF1c2VkXSksaC51c2VFZmZlY3QoKCk9PntpZihzKXtZeC5hZGQocCk7Y29uc3QgbT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFzLmNvbnRhaW5zKG0pKXtjb25zdCB2PW5ldyBDdXN0b21FdmVudChYcCxaeCk7cy5hZGRFdmVudExpc3RlbmVyKFhwLGMpLHMuZGlzcGF0Y2hFdmVudCh2KSx2LmRlZmF1bHRQcmV2ZW50ZWR8fChhNShwNShvYihzKSkse3NlbGVjdDohMH0pLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1tJiZMaShzKSl9cmV0dXJuKCk9PntzLnJlbW92ZUV2ZW50TGlzdGVuZXIoWHAsYyksc2V0VGltZW91dCgoKT0+e2NvbnN0IHY9bmV3IEN1c3RvbUV2ZW50KEpwLFp4KTtzLmFkZEV2ZW50TGlzdGVuZXIoSnAsdSkscy5kaXNwYXRjaEV2ZW50KHYpLHYuZGVmYXVsdFByZXZlbnRlZHx8TGkobT8/ZG9jdW1lbnQuYm9keSx7c2VsZWN0OiEwfSkscy5yZW1vdmVFdmVudExpc3RlbmVyKEpwLHUpLFl4LnJlbW92ZShwKX0sMCl9fX0sW3MsYyx1LHBdKTtjb25zdCBnPWgudXNlQ2FsbGJhY2sobT0+e2lmKCFuJiYhcnx8cC5wYXVzZWQpcmV0dXJuO2NvbnN0IHc9bS5rZXk9PT0iVGFiIiYmIW0uYWx0S2V5JiYhbS5jdHJsS2V5JiYhbS5tZXRhS2V5LHY9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZih3JiZ2KXtjb25zdCB4PW0uY3VycmVudFRhcmdldCxbXyxTXT1jNSh4KTtfJiZTPyFtLnNoaWZ0S2V5JiZ2PT09Uz8obS5wcmV2ZW50RGVmYXVsdCgpLG4mJkxpKF8se3NlbGVjdDohMH0pKTptLnNoaWZ0S2V5JiZ2PT09XyYmKG0ucHJldmVudERlZmF1bHQoKSxuJiZMaShTLHtzZWxlY3Q6ITB9KSk6dj09PXgmJm0ucHJldmVudERlZmF1bHQoKX19LFtuLHIscC5wYXVzZWRdKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7dGFiSW5kZXg6LTF9LGwse3JlZjpmLG9uS2V5RG93bjpnfSkpfSk7ZnVuY3Rpb24gYTUodCx7c2VsZWN0OmU9ITF9PXt9KXtjb25zdCBuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7Zm9yKGNvbnN0IHIgb2YgdClpZihMaShyLHtzZWxlY3Q6ZX0pLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1uKXJldHVybn1mdW5jdGlvbiBjNSh0KXtjb25zdCBlPW9iKHQpLG49R3goZSx0KSxyPUd4KGUucmV2ZXJzZSgpLHQpO3JldHVybltuLHJdfWZ1bmN0aW9uIG9iKHQpe2NvbnN0IGU9W10sbj1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHQsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQse2FjY2VwdE5vZGU6cj0+e2NvbnN0IGk9ci50YWdOYW1lPT09IklOUFVUIiYmci50eXBlPT09ImhpZGRlbiI7cmV0dXJuIHIuZGlzYWJsZWR8fHIuaGlkZGVufHxpP05vZGVGaWx0ZXIuRklMVEVSX1NLSVA6ci50YWJJbmRleD49MD9Ob2RlRmlsdGVyLkZJTFRFUl9BQ0NFUFQ6Tm9kZUZpbHRlci5GSUxURVJfU0tJUH19KTtmb3IoO24ubmV4dE5vZGUoKTspZS5wdXNoKG4uY3VycmVudE5vZGUpO3JldHVybiBlfWZ1bmN0aW9uIEd4KHQsZSl7Zm9yKGNvbnN0IG4gb2YgdClpZighdTUobix7dXBUbzplfSkpcmV0dXJuIG59ZnVuY3Rpb24gdTUodCx7dXBUbzplfSl7aWYoZ2V0Q29tcHV0ZWRTdHlsZSh0KS52aXNpYmlsaXR5PT09ImhpZGRlbiIpcmV0dXJuITA7Zm9yKDt0Oyl7aWYoZSE9PXZvaWQgMCYmdD09PWUpcmV0dXJuITE7aWYoZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5PT09Im5vbmUiKXJldHVybiEwO3Q9dC5wYXJlbnRFbGVtZW50fXJldHVybiExfWZ1bmN0aW9uIGQ1KHQpe3JldHVybiB0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCYmInNlbGVjdCJpbiB0fWZ1bmN0aW9uIExpKHQse3NlbGVjdDplPSExfT17fSl7aWYodCYmdC5mb2N1cyl7Y29uc3Qgbj1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3QuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0IT09biYmZDUodCkmJmUmJnQuc2VsZWN0KCl9fWNvbnN0IFl4PWY1KCk7ZnVuY3Rpb24gZjUoKXtsZXQgdD1bXTtyZXR1cm57YWRkKGUpe2NvbnN0IG49dFswXTtlIT09biYmKG49PW51bGx8fG4ucGF1c2UoKSksdD1YeCh0LGUpLHQudW5zaGlmdChlKX0scmVtb3ZlKGUpe3ZhciBuO3Q9WHgodCxlKSwobj10WzBdKT09PW51bGx8fG49PT12b2lkIDB8fG4ucmVzdW1lKCl9fX1mdW5jdGlvbiBYeCh0LGUpe2NvbnN0IG49Wy4uLnRdLHI9bi5pbmRleE9mKGUpO3JldHVybiByIT09LTEmJm4uc3BsaWNlKHIsMSksbn1mdW5jdGlvbiBwNSh0KXtyZXR1cm4gdC5maWx0ZXIoZT0+ZS50YWdOYW1lIT09IkEiKX1jb25zdCBoNT1bInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCJdLGdvPU1hdGgubWluLEluPU1hdGgubWF4LGVmPU1hdGgucm91bmQsQ3U9TWF0aC5mbG9vcix2bz10PT4oe3g6dCx5OnR9KSxtNT17bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iixib3R0b206InRvcCIsdG9wOiJib3R0b20ifSxnNT17c3RhcnQ6ImVuZCIsZW5kOiJzdGFydCJ9O2Z1bmN0aW9uIHFtKHQsZSxuKXtyZXR1cm4gSW4odCxnbyhlLG4pKX1mdW5jdGlvbiB2aSh0LGUpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KGUpOnR9ZnVuY3Rpb24geWkodCl7cmV0dXJuIHQuc3BsaXQoIi0iKVswXX1mdW5jdGlvbiBGcyh0KXtyZXR1cm4gdC5zcGxpdCgiLSIpWzFdfWZ1bmN0aW9uIFF2KHQpe3JldHVybiB0PT09IngiPyJ5IjoieCJ9ZnVuY3Rpb24gcXYodCl7cmV0dXJuIHQ9PT0ieSI/ImhlaWdodCI6IndpZHRoIn1mdW5jdGlvbiBCcyh0KXtyZXR1cm5bInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHlpKHQpKT8ieSI6IngifWZ1bmN0aW9uIGV5KHQpe3JldHVybiBRdihCcyh0KSl9ZnVuY3Rpb24gdjUodCxlLG4pe249PT12b2lkIDAmJihuPSExKTtjb25zdCByPUZzKHQpLGk9ZXkodCksbz1xdihpKTtsZXQgbD1pPT09IngiP3I9PT0obj8iZW5kIjoic3RhcnQiKT8icmlnaHQiOiJsZWZ0IjpyPT09InN0YXJ0Ij8iYm90dG9tIjoidG9wIjtyZXR1cm4gZS5yZWZlcmVuY2Vbb10+ZS5mbG9hdGluZ1tvXSYmKGw9dGYobCkpLFtsLHRmKGwpXX1mdW5jdGlvbiB5NSh0KXtjb25zdCBlPXRmKHQpO3JldHVybltlZyh0KSxlLGVnKGUpXX1mdW5jdGlvbiBlZyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9zdGFydHxlbmQvZyxlPT5nNVtlXSl9ZnVuY3Rpb24geDUodCxlLG4pe2NvbnN0IHI9WyJsZWZ0IiwicmlnaHQiXSxpPVsicmlnaHQiLCJsZWZ0Il0sbz1bInRvcCIsImJvdHRvbSJdLGw9WyJib3R0b20iLCJ0b3AiXTtzd2l0Y2godCl7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpyZXR1cm4gbj9lP2k6cjplP3I6aTtjYXNlImxlZnQiOmNhc2UicmlnaHQiOnJldHVybiBlP286bDtkZWZhdWx0OnJldHVybltdfX1mdW5jdGlvbiBfNSh0LGUsbixyKXtjb25zdCBpPUZzKHQpO2xldCBvPXg1KHlpKHQpLG49PT0ic3RhcnQiLHIpO3JldHVybiBpJiYobz1vLm1hcChsPT5sKyItIitpKSxlJiYobz1vLmNvbmNhdChvLm1hcChlZykpKSksb31mdW5jdGlvbiB0Zih0KXtyZXR1cm4gdC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZyxlPT5tNVtlXSl9ZnVuY3Rpb24gdzUodCl7cmV0dXJue3RvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowLC4uLnR9fWZ1bmN0aW9uIGxiKHQpe3JldHVybiB0eXBlb2YgdCE9Im51bWJlciI/dzUodCk6e3RvcDp0LHJpZ2h0OnQsYm90dG9tOnQsbGVmdDp0fX1mdW5jdGlvbiBuZih0KXtyZXR1cm57Li4udCx0b3A6dC55LGxlZnQ6dC54LHJpZ2h0OnQueCt0LndpZHRoLGJvdHRvbTp0LnkrdC5oZWlnaHR9fWZ1bmN0aW9uIEp4KHQsZSxuKXtsZXR7cmVmZXJlbmNlOnIsZmxvYXRpbmc6aX09dDtjb25zdCBvPUJzKGUpLGw9ZXkoZSkscz1xdihsKSxhPXlpKGUpLGM9bz09PSJ5Iix1PXIueCtyLndpZHRoLzItaS53aWR0aC8yLGQ9ci55K3IuaGVpZ2h0LzItaS5oZWlnaHQvMixmPXJbc10vMi1pW3NdLzI7bGV0IHA7c3dpdGNoKGEpe2Nhc2UidG9wIjpwPXt4OnUseTpyLnktaS5oZWlnaHR9O2JyZWFrO2Nhc2UiYm90dG9tIjpwPXt4OnUseTpyLnkrci5oZWlnaHR9O2JyZWFrO2Nhc2UicmlnaHQiOnA9e3g6ci54K3Iud2lkdGgseTpkfTticmVhaztjYXNlImxlZnQiOnA9e3g6ci54LWkud2lkdGgseTpkfTticmVhaztkZWZhdWx0OnA9e3g6ci54LHk6ci55fX1zd2l0Y2goRnMoZSkpe2Nhc2Uic3RhcnQiOnBbbF0tPWYqKG4mJmM/LTE6MSk7YnJlYWs7Y2FzZSJlbmQiOnBbbF0rPWYqKG4mJmM/LTE6MSk7YnJlYWt9cmV0dXJuIHB9Y29uc3QgUzU9YXN5bmModCxlLG4pPT57Y29uc3R7cGxhY2VtZW50OnI9ImJvdHRvbSIsc3RyYXRlZ3k6aT0iYWJzb2x1dGUiLG1pZGRsZXdhcmU6bz1bXSxwbGF0Zm9ybTpsfT1uLHM9by5maWx0ZXIoQm9vbGVhbiksYT1hd2FpdChsLmlzUlRMPT1udWxsP3ZvaWQgMDpsLmlzUlRMKGUpKTtsZXQgYz1hd2FpdCBsLmdldEVsZW1lbnRSZWN0cyh7cmVmZXJlbmNlOnQsZmxvYXRpbmc6ZSxzdHJhdGVneTppfSkse3g6dSx5OmR9PUp4KGMscixhKSxmPXIscD17fSxnPTA7Zm9yKGxldCBtPTA7bTxzLmxlbmd0aDttKyspe2NvbnN0e25hbWU6dyxmbjp2fT1zW21dLHt4LHk6XyxkYXRhOlMscmVzZXQ6RX09YXdhaXQgdih7eDp1LHk6ZCxpbml0aWFsUGxhY2VtZW50OnIscGxhY2VtZW50OmYsc3RyYXRlZ3k6aSxtaWRkbGV3YXJlRGF0YTpwLHJlY3RzOmMscGxhdGZvcm06bCxlbGVtZW50czp7cmVmZXJlbmNlOnQsZmxvYXRpbmc6ZX19KTtpZih1PXg/P3UsZD1fPz9kLHA9ey4uLnAsW3ddOnsuLi5wW3ddLC4uLlN9fSxFJiZnPD01MCl7ZysrLHR5cGVvZiBFPT0ib2JqZWN0IiYmKEUucGxhY2VtZW50JiYoZj1FLnBsYWNlbWVudCksRS5yZWN0cyYmKGM9RS5yZWN0cz09PSEwP2F3YWl0IGwuZ2V0RWxlbWVudFJlY3RzKHtyZWZlcmVuY2U6dCxmbG9hdGluZzplLHN0cmF0ZWd5Oml9KTpFLnJlY3RzKSx7eDp1LHk6ZH09SngoYyxmLGEpKSxtPS0xO2NvbnRpbnVlfX1yZXR1cm57eDp1LHk6ZCxwbGFjZW1lbnQ6ZixzdHJhdGVneTppLG1pZGRsZXdhcmVEYXRhOnB9fTthc3luYyBmdW5jdGlvbiBrYyh0LGUpe3ZhciBuO2U9PT12b2lkIDAmJihlPXt9KTtjb25zdHt4OnIseTppLHBsYXRmb3JtOm8scmVjdHM6bCxlbGVtZW50czpzLHN0cmF0ZWd5OmF9PXQse2JvdW5kYXJ5OmM9ImNsaXBwaW5nQW5jZXN0b3JzIixyb290Qm91bmRhcnk6dT0idmlld3BvcnQiLGVsZW1lbnRDb250ZXh0OmQ9ImZsb2F0aW5nIixhbHRCb3VuZGFyeTpmPSExLHBhZGRpbmc6cD0wfT12aShlLHQpLGc9bGIocCksdz1zW2Y/ZD09PSJmbG9hdGluZyI/InJlZmVyZW5jZSI6ImZsb2F0aW5nIjpkXSx2PW5mKGF3YWl0IG8uZ2V0Q2xpcHBpbmdSZWN0KHtlbGVtZW50OihuPWF3YWl0KG8uaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpvLmlzRWxlbWVudCh3KSkpPT1udWxsfHxuP3c6dy5jb250ZXh0RWxlbWVudHx8YXdhaXQoby5nZXREb2N1bWVudEVsZW1lbnQ9PW51bGw/dm9pZCAwOm8uZ2V0RG9jdW1lbnRFbGVtZW50KHMuZmxvYXRpbmcpKSxib3VuZGFyeTpjLHJvb3RCb3VuZGFyeTp1LHN0cmF0ZWd5OmF9KSkseD1kPT09ImZsb2F0aW5nIj97Li4ubC5mbG9hdGluZyx4OnIseTppfTpsLnJlZmVyZW5jZSxfPWF3YWl0KG8uZ2V0T2Zmc2V0UGFyZW50PT1udWxsP3ZvaWQgMDpvLmdldE9mZnNldFBhcmVudChzLmZsb2F0aW5nKSksUz1hd2FpdChvLmlzRWxlbWVudD09bnVsbD92b2lkIDA6by5pc0VsZW1lbnQoXykpP2F3YWl0KG8uZ2V0U2NhbGU9PW51bGw/dm9pZCAwOm8uZ2V0U2NhbGUoXykpfHx7eDoxLHk6MX06e3g6MSx5OjF9LEU9bmYoby5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdD9hd2FpdCBvLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0KHtyZWN0Ongsb2Zmc2V0UGFyZW50Ol8sc3RyYXRlZ3k6YX0pOngpO3JldHVybnt0b3A6KHYudG9wLUUudG9wK2cudG9wKS9TLnksYm90dG9tOihFLmJvdHRvbS12LmJvdHRvbStnLmJvdHRvbSkvUy55LGxlZnQ6KHYubGVmdC1FLmxlZnQrZy5sZWZ0KS9TLngscmlnaHQ6KEUucmlnaHQtdi5yaWdodCtnLnJpZ2h0KS9TLnh9fWNvbnN0IFF4PXQ9Pih7bmFtZToiYXJyb3ciLG9wdGlvbnM6dCxhc3luYyBmbihlKXtjb25zdHt4Om4seTpyLHBsYWNlbWVudDppLHJlY3RzOm8scGxhdGZvcm06bCxlbGVtZW50czpzLG1pZGRsZXdhcmVEYXRhOmF9PWUse2VsZW1lbnQ6YyxwYWRkaW5nOnU9MH09dmkodCxlKXx8e307aWYoYz09bnVsbClyZXR1cm57fTtjb25zdCBkPWxiKHUpLGY9e3g6bix5OnJ9LHA9ZXkoaSksZz1xdihwKSxtPWF3YWl0IGwuZ2V0RGltZW5zaW9ucyhjKSx3PXA9PT0ieSIsdj13PyJ0b3AiOiJsZWZ0Iix4PXc/ImJvdHRvbSI6InJpZ2h0IixfPXc/ImNsaWVudEhlaWdodCI6ImNsaWVudFdpZHRoIixTPW8ucmVmZXJlbmNlW2ddK28ucmVmZXJlbmNlW3BdLWZbcF0tby5mbG9hdGluZ1tnXSxFPWZbcF0tby5yZWZlcmVuY2VbcF0saz1hd2FpdChsLmdldE9mZnNldFBhcmVudD09bnVsbD92b2lkIDA6bC5nZXRPZmZzZXRQYXJlbnQoYykpO2xldCBDPWs/a1tfXTowOyghQ3x8IWF3YWl0KGwuaXNFbGVtZW50PT1udWxsP3ZvaWQgMDpsLmlzRWxlbWVudChrKSkpJiYoQz1zLmZsb2F0aW5nW19dfHxvLmZsb2F0aW5nW2ddKTtjb25zdCBOPVMvMi1FLzIsQT1DLzItbVtnXS8yLTEsVD1nbyhkW3ZdLEEpLEQ9Z28oZFt4XSxBKSxMPVQsSz1DLW1bZ10tRCxCPUMvMi1tW2ddLzIrTixaPXFtKEwsQixLKSxSPSFhLmFycm93JiZGcyhpKSE9bnVsbCYmQiE9WiYmby5yZWZlcmVuY2VbZ10vMi0oQjxMP1Q6RCktbVtnXS8yPDAsUD1SP0I8TD9CLUw6Qi1LOjA7cmV0dXJue1twXTpmW3BdK1AsZGF0YTp7W3BdOlosY2VudGVyT2Zmc2V0OkItWi1QLC4uLlImJnthbGlnbm1lbnRPZmZzZXQ6UH19LHJlc2V0OlJ9fX0pLEU1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6ImZsaXAiLG9wdGlvbnM6dCxhc3luYyBmbihlKXt2YXIgbixyO2NvbnN0e3BsYWNlbWVudDppLG1pZGRsZXdhcmVEYXRhOm8scmVjdHM6bCxpbml0aWFsUGxhY2VtZW50OnMscGxhdGZvcm06YSxlbGVtZW50czpjfT1lLHttYWluQXhpczp1PSEwLGNyb3NzQXhpczpkPSEwLGZhbGxiYWNrUGxhY2VtZW50czpmLGZhbGxiYWNrU3RyYXRlZ3k6cD0iYmVzdEZpdCIsZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbjpnPSJub25lIixmbGlwQWxpZ25tZW50Om09ITAsLi4ud309dmkodCxlKTtpZigobj1vLmFycm93KSE9bnVsbCYmbi5hbGlnbm1lbnRPZmZzZXQpcmV0dXJue307Y29uc3Qgdj15aShpKSx4PXlpKHMpPT09cyxfPWF3YWl0KGEuaXNSVEw9PW51bGw/dm9pZCAwOmEuaXNSVEwoYy5mbG9hdGluZykpLFM9Znx8KHh8fCFtP1t0ZihzKV06eTUocykpOyFmJiZnIT09Im5vbmUiJiZTLnB1c2goLi4uXzUocyxtLGcsXykpO2NvbnN0IEU9W3MsLi4uU10saz1hd2FpdCBrYyhlLHcpLEM9W107bGV0IE49KChyPW8uZmxpcCk9PW51bGw/dm9pZCAwOnIub3ZlcmZsb3dzKXx8W107aWYodSYmQy5wdXNoKGtbdl0pLGQpe2NvbnN0IEw9djUoaSxsLF8pO0MucHVzaChrW0xbMF1dLGtbTFsxXV0pfWlmKE49Wy4uLk4se3BsYWNlbWVudDppLG92ZXJmbG93czpDfV0sIUMuZXZlcnkoTD0+TDw9MCkpe3ZhciBBLFQ7Y29uc3QgTD0oKChBPW8uZmxpcCk9PW51bGw/dm9pZCAwOkEuaW5kZXgpfHwwKSsxLEs9RVtMXTtpZihLKXJldHVybntkYXRhOntpbmRleDpMLG92ZXJmbG93czpOfSxyZXNldDp7cGxhY2VtZW50Okt9fTtsZXQgQj0oVD1OLmZpbHRlcihaPT5aLm92ZXJmbG93c1swXTw9MCkuc29ydCgoWixSKT0+Wi5vdmVyZmxvd3NbMV0tUi5vdmVyZmxvd3NbMV0pWzBdKT09bnVsbD92b2lkIDA6VC5wbGFjZW1lbnQ7aWYoIUIpc3dpdGNoKHApe2Nhc2UiYmVzdEZpdCI6e3ZhciBEO2NvbnN0IFo9KEQ9Ti5tYXAoUj0+W1IucGxhY2VtZW50LFIub3ZlcmZsb3dzLmZpbHRlcihQPT5QPjApLnJlZHVjZSgoUCxiKT0+UCtiLDApXSkuc29ydCgoUixQKT0+UlsxXS1QWzFdKVswXSk9PW51bGw/dm9pZCAwOkRbMF07WiYmKEI9Wik7YnJlYWt9Y2FzZSJpbml0aWFsUGxhY2VtZW50IjpCPXM7YnJlYWt9aWYoaSE9PUIpcmV0dXJue3Jlc2V0OntwbGFjZW1lbnQ6Qn19fXJldHVybnt9fX19O2Z1bmN0aW9uIHF4KHQsZSl7cmV0dXJue3RvcDp0LnRvcC1lLmhlaWdodCxyaWdodDp0LnJpZ2h0LWUud2lkdGgsYm90dG9tOnQuYm90dG9tLWUuaGVpZ2h0LGxlZnQ6dC5sZWZ0LWUud2lkdGh9fWZ1bmN0aW9uIGUxKHQpe3JldHVybiBoNS5zb21lKGU9PnRbZV0+PTApfWNvbnN0IEM1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6ImhpZGUiLG9wdGlvbnM6dCxhc3luYyBmbihlKXtjb25zdHtyZWN0czpufT1lLHtzdHJhdGVneTpyPSJyZWZlcmVuY2VIaWRkZW4iLC4uLml9PXZpKHQsZSk7c3dpdGNoKHIpe2Nhc2UicmVmZXJlbmNlSGlkZGVuIjp7Y29uc3Qgbz1hd2FpdCBrYyhlLHsuLi5pLGVsZW1lbnRDb250ZXh0OiJyZWZlcmVuY2UifSksbD1xeChvLG4ucmVmZXJlbmNlKTtyZXR1cm57ZGF0YTp7cmVmZXJlbmNlSGlkZGVuT2Zmc2V0czpsLHJlZmVyZW5jZUhpZGRlbjplMShsKX19fWNhc2UiZXNjYXBlZCI6e2NvbnN0IG89YXdhaXQga2MoZSx7Li4uaSxhbHRCb3VuZGFyeTohMH0pLGw9cXgobyxuLmZsb2F0aW5nKTtyZXR1cm57ZGF0YTp7ZXNjYXBlZE9mZnNldHM6bCxlc2NhcGVkOmUxKGwpfX19ZGVmYXVsdDpyZXR1cm57fX19fX07YXN5bmMgZnVuY3Rpb24gYjUodCxlKXtjb25zdHtwbGFjZW1lbnQ6bixwbGF0Zm9ybTpyLGVsZW1lbnRzOml9PXQsbz1hd2FpdChyLmlzUlRMPT1udWxsP3ZvaWQgMDpyLmlzUlRMKGkuZmxvYXRpbmcpKSxsPXlpKG4pLHM9RnMobiksYT1CcyhuKT09PSJ5IixjPVsibGVmdCIsInRvcCJdLmluY2x1ZGVzKGwpPy0xOjEsdT1vJiZhPy0xOjEsZD12aShlLHQpO2xldHttYWluQXhpczpmLGNyb3NzQXhpczpwLGFsaWdubWVudEF4aXM6Z309dHlwZW9mIGQ9PSJudW1iZXIiP3ttYWluQXhpczpkLGNyb3NzQXhpczowLGFsaWdubWVudEF4aXM6bnVsbH06e21haW5BeGlzOjAsY3Jvc3NBeGlzOjAsYWxpZ25tZW50QXhpczpudWxsLC4uLmR9O3JldHVybiBzJiZ0eXBlb2YgZz09Im51bWJlciImJihwPXM9PT0iZW5kIj9nKi0xOmcpLGE/e3g6cCp1LHk6ZipjfTp7eDpmKmMseTpwKnV9fWNvbnN0IGs1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD0wKSx7bmFtZToib2Zmc2V0IixvcHRpb25zOnQsYXN5bmMgZm4oZSl7Y29uc3R7eDpuLHk6cn09ZSxpPWF3YWl0IGI1KGUsdCk7cmV0dXJue3g6bitpLngseTpyK2kueSxkYXRhOml9fX19LCQ1PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dm9pZCAwJiYodD17fSkse25hbWU6InNoaWZ0IixvcHRpb25zOnQsYXN5bmMgZm4oZSl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6aX09ZSx7bWFpbkF4aXM6bz0hMCxjcm9zc0F4aXM6bD0hMSxsaW1pdGVyOnM9e2ZuOnc9PntsZXR7eDp2LHk6eH09dztyZXR1cm57eDp2LHk6eH19fSwuLi5hfT12aSh0LGUpLGM9e3g6bix5OnJ9LHU9YXdhaXQga2MoZSxhKSxkPUJzKHlpKGkpKSxmPVF2KGQpO2xldCBwPWNbZl0sZz1jW2RdO2lmKG8pe2NvbnN0IHc9Zj09PSJ5Ij8idG9wIjoibGVmdCIsdj1mPT09InkiPyJib3R0b20iOiJyaWdodCIseD1wK3Vbd10sXz1wLXVbdl07cD1xbSh4LHAsXyl9aWYobCl7Y29uc3Qgdz1kPT09InkiPyJ0b3AiOiJsZWZ0Iix2PWQ9PT0ieSI/ImJvdHRvbSI6InJpZ2h0Iix4PWcrdVt3XSxfPWctdVt2XTtnPXFtKHgsZyxfKX1jb25zdCBtPXMuZm4oey4uLmUsW2ZdOnAsW2RdOmd9KTtyZXR1cm57Li4ubSxkYXRhOnt4Om0ueC1uLHk6bS55LXJ9fX19fSxUNT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9e30pLHtvcHRpb25zOnQsZm4oZSl7Y29uc3R7eDpuLHk6cixwbGFjZW1lbnQ6aSxyZWN0czpvLG1pZGRsZXdhcmVEYXRhOmx9PWUse29mZnNldDpzPTAsbWFpbkF4aXM6YT0hMCxjcm9zc0F4aXM6Yz0hMH09dmkodCxlKSx1PXt4Om4seTpyfSxkPUJzKGkpLGY9UXYoZCk7bGV0IHA9dVtmXSxnPXVbZF07Y29uc3QgbT12aShzLGUpLHc9dHlwZW9mIG09PSJudW1iZXIiP3ttYWluQXhpczptLGNyb3NzQXhpczowfTp7bWFpbkF4aXM6MCxjcm9zc0F4aXM6MCwuLi5tfTtpZihhKXtjb25zdCBfPWY9PT0ieSI/ImhlaWdodCI6IndpZHRoIixTPW8ucmVmZXJlbmNlW2ZdLW8uZmxvYXRpbmdbX10rdy5tYWluQXhpcyxFPW8ucmVmZXJlbmNlW2ZdK28ucmVmZXJlbmNlW19dLXcubWFpbkF4aXM7cDxTP3A9UzpwPkUmJihwPUUpfWlmKGMpe3ZhciB2LHg7Y29uc3QgXz1mPT09InkiPyJ3aWR0aCI6ImhlaWdodCIsUz1bInRvcCIsImxlZnQiXS5pbmNsdWRlcyh5aShpKSksRT1vLnJlZmVyZW5jZVtkXS1vLmZsb2F0aW5nW19dKyhTJiYoKHY9bC5vZmZzZXQpPT1udWxsP3ZvaWQgMDp2W2RdKXx8MCkrKFM/MDp3LmNyb3NzQXhpcyksaz1vLnJlZmVyZW5jZVtkXStvLnJlZmVyZW5jZVtfXSsoUz8wOigoeD1sLm9mZnNldCk9PW51bGw/dm9pZCAwOnhbZF0pfHwwKS0oUz93LmNyb3NzQXhpczowKTtnPEU/Zz1FOmc+ayYmKGc9ayl9cmV0dXJue1tmXTpwLFtkXTpnfX19fSxONT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PXZvaWQgMCYmKHQ9e30pLHtuYW1lOiJzaXplIixvcHRpb25zOnQsYXN5bmMgZm4oZSl7Y29uc3R7cGxhY2VtZW50Om4scmVjdHM6cixwbGF0Zm9ybTppLGVsZW1lbnRzOm99PWUse2FwcGx5Omw9KCk9Pnt9LC4uLnN9PXZpKHQsZSksYT1hd2FpdCBrYyhlLHMpLGM9eWkobiksdT1GcyhuKSxkPUJzKG4pPT09InkiLHt3aWR0aDpmLGhlaWdodDpwfT1yLmZsb2F0aW5nO2xldCBnLG07Yz09PSJ0b3AifHxjPT09ImJvdHRvbSI/KGc9YyxtPXU9PT0oYXdhaXQoaS5pc1JUTD09bnVsbD92b2lkIDA6aS5pc1JUTChvLmZsb2F0aW5nKSk/InN0YXJ0IjoiZW5kIik/ImxlZnQiOiJyaWdodCIpOihtPWMsZz11PT09ImVuZCI/InRvcCI6ImJvdHRvbSIpO2NvbnN0IHc9cC1hW2ddLHY9Zi1hW21dLHg9IWUubWlkZGxld2FyZURhdGEuc2hpZnQ7bGV0IF89dyxTPXY7aWYoZCl7Y29uc3Qgaz1mLWEubGVmdC1hLnJpZ2h0O1M9dXx8eD9nbyh2LGspOmt9ZWxzZXtjb25zdCBrPXAtYS50b3AtYS5ib3R0b207Xz11fHx4P2dvKHcsayk6a31pZih4JiYhdSl7Y29uc3Qgaz1JbihhLmxlZnQsMCksQz1JbihhLnJpZ2h0LDApLE49SW4oYS50b3AsMCksQT1JbihhLmJvdHRvbSwwKTtkP1M9Zi0yKihrIT09MHx8QyE9PTA/aytDOkluKGEubGVmdCxhLnJpZ2h0KSk6Xz1wLTIqKE4hPT0wfHxBIT09MD9OK0E6SW4oYS50b3AsYS5ib3R0b20pKX1hd2FpdCBsKHsuLi5lLGF2YWlsYWJsZVdpZHRoOlMsYXZhaWxhYmxlSGVpZ2h0Ol99KTtjb25zdCBFPWF3YWl0IGkuZ2V0RGltZW5zaW9ucyhvLmZsb2F0aW5nKTtyZXR1cm4gZiE9PUUud2lkdGh8fHAhPT1FLmhlaWdodD97cmVzZXQ6e3JlY3RzOiEwfX06e319fX07ZnVuY3Rpb24geW8odCl7cmV0dXJuIHNiKHQpPyh0Lm5vZGVOYW1lfHwiIikudG9Mb3dlckNhc2UoKToiI2RvY3VtZW50In1mdW5jdGlvbiBVbih0KXt2YXIgZTtyZXR1cm4odD09bnVsbHx8KGU9dC5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6ZS5kZWZhdWx0Vmlldyl8fHdpbmRvd31mdW5jdGlvbiBUaSh0KXt2YXIgZTtyZXR1cm4oZT0oc2IodCk/dC5vd25lckRvY3VtZW50OnQuZG9jdW1lbnQpfHx3aW5kb3cuZG9jdW1lbnQpPT1udWxsP3ZvaWQgMDplLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBzYih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE5vZGV8fHQgaW5zdGFuY2VvZiBVbih0KS5Ob2RlfWZ1bmN0aW9uIHhpKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIFVuKHQpLkVsZW1lbnR9ZnVuY3Rpb24gR3IodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8dCBpbnN0YW5jZW9mIFVuKHQpLkhUTUxFbGVtZW50fWZ1bmN0aW9uIHQxKHQpe3JldHVybiB0eXBlb2YgU2hhZG93Um9vdD4idSI/ITE6dCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3R8fHQgaW5zdGFuY2VvZiBVbih0KS5TaGFkb3dSb290fWZ1bmN0aW9uIFZjKHQpe2NvbnN0e292ZXJmbG93OmUsb3ZlcmZsb3dYOm4sb3ZlcmZsb3dZOnIsZGlzcGxheTppfT1hcih0KTtyZXR1cm4vYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChlK3IrbikmJiFbImlubGluZSIsImNvbnRlbnRzIl0uaW5jbHVkZXMoaSl9ZnVuY3Rpb24gUjUodCl7cmV0dXJuWyJ0YWJsZSIsInRkIiwidGgiXS5pbmNsdWRlcyh5byh0KSl9ZnVuY3Rpb24gdHkodCl7Y29uc3QgZT1ueSgpLG49YXIodCk7cmV0dXJuIG4udHJhbnNmb3JtIT09Im5vbmUifHxuLnBlcnNwZWN0aXZlIT09Im5vbmUifHwobi5jb250YWluZXJUeXBlP24uY29udGFpbmVyVHlwZSE9PSJub3JtYWwiOiExKXx8IWUmJihuLmJhY2tkcm9wRmlsdGVyP24uYmFja2Ryb3BGaWx0ZXIhPT0ibm9uZSI6ITEpfHwhZSYmKG4uZmlsdGVyP24uZmlsdGVyIT09Im5vbmUiOiExKXx8WyJ0cmFuc2Zvcm0iLCJwZXJzcGVjdGl2ZSIsImZpbHRlciJdLnNvbWUocj0+KG4ud2lsbENoYW5nZXx8IiIpLmluY2x1ZGVzKHIpKXx8WyJwYWludCIsImxheW91dCIsInN0cmljdCIsImNvbnRlbnQiXS5zb21lKHI9PihuLmNvbnRhaW58fCIiKS5pbmNsdWRlcyhyKSl9ZnVuY3Rpb24gTzUodCl7bGV0IGU9d3ModCk7Zm9yKDtHcihlKSYmIVlmKGUpOyl7aWYodHkoZSkpcmV0dXJuIGU7ZT13cyhlKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBueSgpe3JldHVybiB0eXBlb2YgQ1NTPiJ1Inx8IUNTUy5zdXBwb3J0cz8hMTpDU1Muc3VwcG9ydHMoIi13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIiwibm9uZSIpfWZ1bmN0aW9uIFlmKHQpe3JldHVyblsiaHRtbCIsImJvZHkiLCIjZG9jdW1lbnQiXS5pbmNsdWRlcyh5byh0KSl9ZnVuY3Rpb24gYXIodCl7cmV0dXJuIFVuKHQpLmdldENvbXB1dGVkU3R5bGUodCl9ZnVuY3Rpb24gWGYodCl7cmV0dXJuIHhpKHQpP3tzY3JvbGxMZWZ0OnQuc2Nyb2xsTGVmdCxzY3JvbGxUb3A6dC5zY3JvbGxUb3B9OntzY3JvbGxMZWZ0OnQucGFnZVhPZmZzZXQsc2Nyb2xsVG9wOnQucGFnZVlPZmZzZXR9fWZ1bmN0aW9uIHdzKHQpe2lmKHlvKHQpPT09Imh0bWwiKXJldHVybiB0O2NvbnN0IGU9dC5hc3NpZ25lZFNsb3R8fHQucGFyZW50Tm9kZXx8dDEodCkmJnQuaG9zdHx8VGkodCk7cmV0dXJuIHQxKGUpP2UuaG9zdDplfWZ1bmN0aW9uIGFiKHQpe2NvbnN0IGU9d3ModCk7cmV0dXJuIFlmKGUpP3Qub3duZXJEb2N1bWVudD90Lm93bmVyRG9jdW1lbnQuYm9keTp0LmJvZHk6R3IoZSkmJlZjKGUpP2U6YWIoZSl9ZnVuY3Rpb24gJGModCxlLG4pe3ZhciByO2U9PT12b2lkIDAmJihlPVtdKSxuPT09dm9pZCAwJiYobj0hMCk7Y29uc3QgaT1hYih0KSxvPWk9PT0oKHI9dC5vd25lckRvY3VtZW50KT09bnVsbD92b2lkIDA6ci5ib2R5KSxsPVVuKGkpO3JldHVybiBvP2UuY29uY2F0KGwsbC52aXN1YWxWaWV3cG9ydHx8W10sVmMoaSk/aTpbXSxsLmZyYW1lRWxlbWVudCYmbj8kYyhsLmZyYW1lRWxlbWVudCk6W10pOmUuY29uY2F0KGksJGMoaSxbXSxuKSl9ZnVuY3Rpb24gY2IodCl7Y29uc3QgZT1hcih0KTtsZXQgbj1wYXJzZUZsb2F0KGUud2lkdGgpfHwwLHI9cGFyc2VGbG9hdChlLmhlaWdodCl8fDA7Y29uc3QgaT1Hcih0KSxvPWk/dC5vZmZzZXRXaWR0aDpuLGw9aT90Lm9mZnNldEhlaWdodDpyLHM9ZWYobikhPT1vfHxlZihyKSE9PWw7cmV0dXJuIHMmJihuPW8scj1sKSx7d2lkdGg6bixoZWlnaHQ6ciwkOnN9fWZ1bmN0aW9uIHJ5KHQpe3JldHVybiB4aSh0KT90OnQuY29udGV4dEVsZW1lbnR9ZnVuY3Rpb24gaXModCl7Y29uc3QgZT1yeSh0KTtpZighR3IoZSkpcmV0dXJuIHZvKDEpO2NvbnN0IG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx7d2lkdGg6cixoZWlnaHQ6aSwkOm99PWNiKGUpO2xldCBsPShvP2VmKG4ud2lkdGgpOm4ud2lkdGgpL3Iscz0obz9lZihuLmhlaWdodCk6bi5oZWlnaHQpL2k7cmV0dXJuKCFsfHwhTnVtYmVyLmlzRmluaXRlKGwpKSYmKGw9MSksKCFzfHwhTnVtYmVyLmlzRmluaXRlKHMpKSYmKHM9MSkse3g6bCx5OnN9fWNvbnN0IFA1PXZvKDApO2Z1bmN0aW9uIHViKHQpe2NvbnN0IGU9VW4odCk7cmV0dXJuIW55KCl8fCFlLnZpc3VhbFZpZXdwb3J0P1A1Ont4OmUudmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCx5OmUudmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wfX1mdW5jdGlvbiBBNSh0LGUsbil7cmV0dXJuIGU9PT12b2lkIDAmJihlPSExKSwhbnx8ZSYmbiE9PVVuKHQpPyExOmV9ZnVuY3Rpb24gb2wodCxlLG4scil7ZT09PXZvaWQgMCYmKGU9ITEpLG49PT12b2lkIDAmJihuPSExKTtjb25zdCBpPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yeSh0KTtsZXQgbD12bygxKTtlJiYocj94aShyKSYmKGw9aXMocikpOmw9aXModCkpO2NvbnN0IHM9QTUobyxuLHIpP3ViKG8pOnZvKDApO2xldCBhPShpLmxlZnQrcy54KS9sLngsYz0oaS50b3Arcy55KS9sLnksdT1pLndpZHRoL2wueCxkPWkuaGVpZ2h0L2wueTtpZihvKXtjb25zdCBmPVVuKG8pLHA9ciYmeGkocik/VW4ocik6cjtsZXQgZz1mLmZyYW1lRWxlbWVudDtmb3IoO2cmJnImJnAhPT1mOyl7Y29uc3QgbT1pcyhnKSx3PWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1hcihnKSx4PXcubGVmdCsoZy5jbGllbnRMZWZ0K3BhcnNlRmxvYXQodi5wYWRkaW5nTGVmdCkpKm0ueCxfPXcudG9wKyhnLmNsaWVudFRvcCtwYXJzZUZsb2F0KHYucGFkZGluZ1RvcCkpKm0ueTthKj1tLngsYyo9bS55LHUqPW0ueCxkKj1tLnksYSs9eCxjKz1fLGc9VW4oZykuZnJhbWVFbGVtZW50fX1yZXR1cm4gbmYoe3dpZHRoOnUsaGVpZ2h0OmQseDphLHk6Y30pfWZ1bmN0aW9uIE01KHQpe2xldHtyZWN0OmUsb2Zmc2V0UGFyZW50Om4sc3RyYXRlZ3k6cn09dDtjb25zdCBpPUdyKG4pLG89VGkobik7aWYobj09PW8pcmV0dXJuIGU7bGV0IGw9e3Njcm9sbExlZnQ6MCxzY3JvbGxUb3A6MH0scz12bygxKTtjb25zdCBhPXZvKDApO2lmKChpfHwhaSYmciE9PSJmaXhlZCIpJiYoKHlvKG4pIT09ImJvZHkifHxWYyhvKSkmJihsPVhmKG4pKSxHcihuKSkpe2NvbnN0IGM9b2wobik7cz1pcyhuKSxhLng9Yy54K24uY2xpZW50TGVmdCxhLnk9Yy55K24uY2xpZW50VG9wfXJldHVybnt3aWR0aDplLndpZHRoKnMueCxoZWlnaHQ6ZS5oZWlnaHQqcy55LHg6ZS54KnMueC1sLnNjcm9sbExlZnQqcy54K2EueCx5OmUueSpzLnktbC5zY3JvbGxUb3Aqcy55K2EueX19ZnVuY3Rpb24gTDUodCl7cmV0dXJuIEFycmF5LmZyb20odC5nZXRDbGllbnRSZWN0cygpKX1mdW5jdGlvbiBkYih0KXtyZXR1cm4gb2woVGkodCkpLmxlZnQrWGYodCkuc2Nyb2xsTGVmdH1mdW5jdGlvbiBENSh0KXtjb25zdCBlPVRpKHQpLG49WGYodCkscj10Lm93bmVyRG9jdW1lbnQuYm9keSxpPUluKGUuc2Nyb2xsV2lkdGgsZS5jbGllbnRXaWR0aCxyLnNjcm9sbFdpZHRoLHIuY2xpZW50V2lkdGgpLG89SW4oZS5zY3JvbGxIZWlnaHQsZS5jbGllbnRIZWlnaHQsci5zY3JvbGxIZWlnaHQsci5jbGllbnRIZWlnaHQpO2xldCBsPS1uLnNjcm9sbExlZnQrZGIodCk7Y29uc3Qgcz0tbi5zY3JvbGxUb3A7cmV0dXJuIGFyKHIpLmRpcmVjdGlvbj09PSJydGwiJiYobCs9SW4oZS5jbGllbnRXaWR0aCxyLmNsaWVudFdpZHRoKS1pKSx7d2lkdGg6aSxoZWlnaHQ6byx4OmwseTpzfX1mdW5jdGlvbiBJNSh0LGUpe2NvbnN0IG49VW4odCkscj1UaSh0KSxpPW4udmlzdWFsVmlld3BvcnQ7bGV0IG89ci5jbGllbnRXaWR0aCxsPXIuY2xpZW50SGVpZ2h0LHM9MCxhPTA7aWYoaSl7bz1pLndpZHRoLGw9aS5oZWlnaHQ7Y29uc3QgYz1ueSgpOyghY3x8YyYmZT09PSJmaXhlZCIpJiYocz1pLm9mZnNldExlZnQsYT1pLm9mZnNldFRvcCl9cmV0dXJue3dpZHRoOm8saGVpZ2h0OmwseDpzLHk6YX19ZnVuY3Rpb24gajUodCxlKXtjb25zdCBuPW9sKHQsITAsZT09PSJmaXhlZCIpLHI9bi50b3ArdC5jbGllbnRUb3AsaT1uLmxlZnQrdC5jbGllbnRMZWZ0LG89R3IodCk/aXModCk6dm8oMSksbD10LmNsaWVudFdpZHRoKm8ueCxzPXQuY2xpZW50SGVpZ2h0Km8ueSxhPWkqby54LGM9cipvLnk7cmV0dXJue3dpZHRoOmwsaGVpZ2h0OnMseDphLHk6Y319ZnVuY3Rpb24gbjEodCxlLG4pe2xldCByO2lmKGU9PT0idmlld3BvcnQiKXI9STUodCxuKTtlbHNlIGlmKGU9PT0iZG9jdW1lbnQiKXI9RDUoVGkodCkpO2Vsc2UgaWYoeGkoZSkpcj1qNShlLG4pO2Vsc2V7Y29uc3QgaT11Yih0KTtyPXsuLi5lLHg6ZS54LWkueCx5OmUueS1pLnl9fXJldHVybiBuZihyKX1mdW5jdGlvbiBmYih0LGUpe2NvbnN0IG49d3ModCk7cmV0dXJuIG49PT1lfHwheGkobil8fFlmKG4pPyExOmFyKG4pLnBvc2l0aW9uPT09ImZpeGVkInx8ZmIobixlKX1mdW5jdGlvbiB6NSh0LGUpe2NvbnN0IG49ZS5nZXQodCk7aWYobilyZXR1cm4gbjtsZXQgcj0kYyh0LFtdLCExKS5maWx0ZXIocz0+eGkocykmJnlvKHMpIT09ImJvZHkiKSxpPW51bGw7Y29uc3Qgbz1hcih0KS5wb3NpdGlvbj09PSJmaXhlZCI7bGV0IGw9bz93cyh0KTp0O2Zvcig7eGkobCkmJiFZZihsKTspe2NvbnN0IHM9YXIobCksYT10eShsKTshYSYmcy5wb3NpdGlvbj09PSJmaXhlZCImJihpPW51bGwpLChvPyFhJiYhaTohYSYmcy5wb3NpdGlvbj09PSJzdGF0aWMiJiYhIWkmJlsiYWJzb2x1dGUiLCJmaXhlZCJdLmluY2x1ZGVzKGkucG9zaXRpb24pfHxWYyhsKSYmIWEmJmZiKHQsbCkpP3I9ci5maWx0ZXIodT0+dSE9PWwpOmk9cyxsPXdzKGwpfXJldHVybiBlLnNldCh0LHIpLHJ9ZnVuY3Rpb24gRjUodCl7bGV0e2VsZW1lbnQ6ZSxib3VuZGFyeTpuLHJvb3RCb3VuZGFyeTpyLHN0cmF0ZWd5Oml9PXQ7Y29uc3QgbD1bLi4ubj09PSJjbGlwcGluZ0FuY2VzdG9ycyI/ejUoZSx0aGlzLl9jKTpbXS5jb25jYXQobikscl0scz1sWzBdLGE9bC5yZWR1Y2UoKGMsdSk9Pntjb25zdCBkPW4xKGUsdSxpKTtyZXR1cm4gYy50b3A9SW4oZC50b3AsYy50b3ApLGMucmlnaHQ9Z28oZC5yaWdodCxjLnJpZ2h0KSxjLmJvdHRvbT1nbyhkLmJvdHRvbSxjLmJvdHRvbSksYy5sZWZ0PUluKGQubGVmdCxjLmxlZnQpLGN9LG4xKGUscyxpKSk7cmV0dXJue3dpZHRoOmEucmlnaHQtYS5sZWZ0LGhlaWdodDphLmJvdHRvbS1hLnRvcCx4OmEubGVmdCx5OmEudG9wfX1mdW5jdGlvbiBCNSh0KXtyZXR1cm4gY2IodCl9ZnVuY3Rpb24gVTUodCxlLG4pe2NvbnN0IHI9R3IoZSksaT1UaShlKSxvPW49PT0iZml4ZWQiLGw9b2wodCwhMCxvLGUpO2xldCBzPXtzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9O2NvbnN0IGE9dm8oMCk7aWYocnx8IXImJiFvKWlmKCh5byhlKSE9PSJib2R5Inx8VmMoaSkpJiYocz1YZihlKSkscil7Y29uc3QgYz1vbChlLCEwLG8sZSk7YS54PWMueCtlLmNsaWVudExlZnQsYS55PWMueStlLmNsaWVudFRvcH1lbHNlIGkmJihhLng9ZGIoaSkpO3JldHVybnt4OmwubGVmdCtzLnNjcm9sbExlZnQtYS54LHk6bC50b3Arcy5zY3JvbGxUb3AtYS55LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0fX1mdW5jdGlvbiByMSh0LGUpe3JldHVybiFHcih0KXx8YXIodCkucG9zaXRpb249PT0iZml4ZWQiP251bGw6ZT9lKHQpOnQub2Zmc2V0UGFyZW50fWZ1bmN0aW9uIHBiKHQsZSl7Y29uc3Qgbj1Vbih0KTtpZighR3IodCkpcmV0dXJuIG47bGV0IHI9cjEodCxlKTtmb3IoO3ImJlI1KHIpJiZhcihyKS5wb3NpdGlvbj09PSJzdGF0aWMiOylyPXIxKHIsZSk7cmV0dXJuIHImJih5byhyKT09PSJodG1sInx8eW8ocik9PT0iYm9keSImJmFyKHIpLnBvc2l0aW9uPT09InN0YXRpYyImJiF0eShyKSk/bjpyfHxPNSh0KXx8bn1jb25zdCBXNT1hc3luYyBmdW5jdGlvbih0KXtsZXR7cmVmZXJlbmNlOmUsZmxvYXRpbmc6bixzdHJhdGVneTpyfT10O2NvbnN0IGk9dGhpcy5nZXRPZmZzZXRQYXJlbnR8fHBiLG89dGhpcy5nZXREaW1lbnNpb25zO3JldHVybntyZWZlcmVuY2U6VTUoZSxhd2FpdCBpKG4pLHIpLGZsb2F0aW5nOnt4OjAseTowLC4uLmF3YWl0IG8obil9fX07ZnVuY3Rpb24gSDUodCl7cmV0dXJuIGFyKHQpLmRpcmVjdGlvbj09PSJydGwifWNvbnN0IFY1PXtjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdDpNNSxnZXREb2N1bWVudEVsZW1lbnQ6VGksZ2V0Q2xpcHBpbmdSZWN0OkY1LGdldE9mZnNldFBhcmVudDpwYixnZXRFbGVtZW50UmVjdHM6VzUsZ2V0Q2xpZW50UmVjdHM6TDUsZ2V0RGltZW5zaW9uczpCNSxnZXRTY2FsZTppcyxpc0VsZW1lbnQ6eGksaXNSVEw6SDV9O2Z1bmN0aW9uIEs1KHQsZSl7bGV0IG49bnVsbCxyO2NvbnN0IGk9VGkodCk7ZnVuY3Rpb24gbygpe2NsZWFyVGltZW91dChyKSxuJiZuLmRpc2Nvbm5lY3QoKSxuPW51bGx9ZnVuY3Rpb24gbChzLGEpe3M9PT12b2lkIDAmJihzPSExKSxhPT09dm9pZCAwJiYoYT0xKSxvKCk7Y29uc3R7bGVmdDpjLHRvcDp1LHdpZHRoOmQsaGVpZ2h0OmZ9PXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoc3x8ZSgpLCFkfHwhZilyZXR1cm47Y29uc3QgcD1DdSh1KSxnPUN1KGkuY2xpZW50V2lkdGgtKGMrZCkpLG09Q3UoaS5jbGllbnRIZWlnaHQtKHUrZikpLHc9Q3UoYykseD17cm9vdE1hcmdpbjotcCsicHggIistZysicHggIistbSsicHggIistdysicHgiLHRocmVzaG9sZDpJbigwLGdvKDEsYSkpfHwxfTtsZXQgXz0hMDtmdW5jdGlvbiBTKEUpe2NvbnN0IGs9RVswXS5pbnRlcnNlY3Rpb25SYXRpbztpZihrIT09YSl7aWYoIV8pcmV0dXJuIGwoKTtrP2woITEsayk6cj1zZXRUaW1lb3V0KCgpPT57bCghMSwxZS03KX0sMTAwKX1fPSExfXRyeXtuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihTLHsuLi54LHJvb3Q6aS5vd25lckRvY3VtZW50fSl9Y2F0Y2h7bj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoUyx4KX1uLm9ic2VydmUodCl9cmV0dXJuIGwoITApLG99ZnVuY3Rpb24gWjUodCxlLG4scil7cj09PXZvaWQgMCYmKHI9e30pO2NvbnN0e2FuY2VzdG9yU2Nyb2xsOmk9ITAsYW5jZXN0b3JSZXNpemU6bz0hMCxlbGVtZW50UmVzaXplOmw9dHlwZW9mIFJlc2l6ZU9ic2VydmVyPT0iZnVuY3Rpb24iLGxheW91dFNoaWZ0OnM9dHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyPT0iZnVuY3Rpb24iLGFuaW1hdGlvbkZyYW1lOmE9ITF9PXIsYz1yeSh0KSx1PWl8fG8/Wy4uLmM/JGMoYyk6W10sLi4uJGMoZSldOltdO3UuZm9yRWFjaCh2PT57aSYmdi5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLG4se3Bhc3NpdmU6ITB9KSxvJiZ2LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsbil9KTtjb25zdCBkPWMmJnM/SzUoYyxuKTpudWxsO2xldCBmPS0xLHA9bnVsbDtsJiYocD1uZXcgUmVzaXplT2JzZXJ2ZXIodj0+e2xldFt4XT12O3gmJngudGFyZ2V0PT09YyYmcCYmKHAudW5vYnNlcnZlKGUpLGNhbmNlbEFuaW1hdGlvbkZyYW1lKGYpLGY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57cCYmcC5vYnNlcnZlKGUpfSkpLG4oKX0pLGMmJiFhJiZwLm9ic2VydmUoYykscC5vYnNlcnZlKGUpKTtsZXQgZyxtPWE/b2wodCk6bnVsbDthJiZ3KCk7ZnVuY3Rpb24gdygpe2NvbnN0IHY9b2wodCk7bSYmKHYueCE9PW0ueHx8di55IT09bS55fHx2LndpZHRoIT09bS53aWR0aHx8di5oZWlnaHQhPT1tLmhlaWdodCkmJm4oKSxtPXYsZz1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodyl9cmV0dXJuIG4oKSwoKT0+e3UuZm9yRWFjaCh2PT57aSYmdi5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLG4pLG8mJnYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKX0pLGQmJmQoKSxwJiZwLmRpc2Nvbm5lY3QoKSxwPW51bGwsYSYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoZyl9fWNvbnN0IEc1PSh0LGUsbik9Pntjb25zdCByPW5ldyBNYXAsaT17cGxhdGZvcm06VjUsLi4ubn0sbz17Li4uaS5wbGF0Zm9ybSxfYzpyfTtyZXR1cm4gUzUodCxlLHsuLi5pLHBsYXRmb3JtOm99KX0sWTU9dD0+e2Z1bmN0aW9uIGUobil7cmV0dXJue30uaGFzT3duUHJvcGVydHkuY2FsbChuLCJjdXJyZW50Iil9cmV0dXJue25hbWU6ImFycm93IixvcHRpb25zOnQsZm4obil7Y29uc3R7ZWxlbWVudDpyLHBhZGRpbmc6aX09dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChuKTp0O3JldHVybiByJiZlKHIpP3IuY3VycmVudCE9bnVsbD9ReCh7ZWxlbWVudDpyLmN1cnJlbnQscGFkZGluZzppfSkuZm4obik6e306cj9ReCh7ZWxlbWVudDpyLHBhZGRpbmc6aX0pLmZuKG4pOnt9fX19O3ZhciBHdT10eXBlb2YgZG9jdW1lbnQ8InUiP2gudXNlTGF5b3V0RWZmZWN0OmgudXNlRWZmZWN0O2Z1bmN0aW9uIHJmKHQsZSl7aWYodD09PWUpcmV0dXJuITA7aWYodHlwZW9mIHQhPXR5cGVvZiBlKXJldHVybiExO2lmKHR5cGVvZiB0PT0iZnVuY3Rpb24iJiZ0LnRvU3RyaW5nKCk9PT1lLnRvU3RyaW5nKCkpcmV0dXJuITA7bGV0IG4scixpO2lmKHQmJmUmJnR5cGVvZiB0PT0ib2JqZWN0Iil7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYobj10Lmxlbmd0aCxuIT1lLmxlbmd0aClyZXR1cm4hMTtmb3Iocj1uO3ItLSE9PTA7KWlmKCFyZih0W3JdLGVbcl0pKXJldHVybiExO3JldHVybiEwfWlmKGk9T2JqZWN0LmtleXModCksbj1pLmxlbmd0aCxuIT09T2JqZWN0LmtleXMoZSkubGVuZ3RoKXJldHVybiExO2ZvcihyPW47ci0tIT09MDspaWYoIXt9Lmhhc093blByb3BlcnR5LmNhbGwoZSxpW3JdKSlyZXR1cm4hMTtmb3Iocj1uO3ItLSE9PTA7KXtjb25zdCBvPWlbcl07aWYoIShvPT09Il9vd25lciImJnQuJCR0eXBlb2YpJiYhcmYodFtvXSxlW29dKSlyZXR1cm4hMX1yZXR1cm4hMH1yZXR1cm4gdCE9PXQmJmUhPT1lfWZ1bmN0aW9uIGhiKHQpe3JldHVybiB0eXBlb2Ygd2luZG93PiJ1Ij8xOih0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuZGV2aWNlUGl4ZWxSYXRpb3x8MX1mdW5jdGlvbiBpMSh0LGUpe2NvbnN0IG49aGIodCk7cmV0dXJuIE1hdGgucm91bmQoZSpuKS9ufWZ1bmN0aW9uIG8xKHQpe2NvbnN0IGU9aC51c2VSZWYodCk7cmV0dXJuIEd1KCgpPT57ZS5jdXJyZW50PXR9KSxlfWZ1bmN0aW9uIFg1KHQpe3Q9PT12b2lkIDAmJih0PXt9KTtjb25zdHtwbGFjZW1lbnQ6ZT0iYm90dG9tIixzdHJhdGVneTpuPSJhYnNvbHV0ZSIsbWlkZGxld2FyZTpyPVtdLHBsYXRmb3JtOmksZWxlbWVudHM6e3JlZmVyZW5jZTpvLGZsb2F0aW5nOmx9PXt9LHRyYW5zZm9ybTpzPSEwLHdoaWxlRWxlbWVudHNNb3VudGVkOmEsb3BlbjpjfT10LFt1LGRdPWgudXNlU3RhdGUoe3g6MCx5OjAsc3RyYXRlZ3k6bixwbGFjZW1lbnQ6ZSxtaWRkbGV3YXJlRGF0YTp7fSxpc1Bvc2l0aW9uZWQ6ITF9KSxbZixwXT1oLnVzZVN0YXRlKHIpO3JmKGYscil8fHAocik7Y29uc3RbZyxtXT1oLnVzZVN0YXRlKG51bGwpLFt3LHZdPWgudXNlU3RhdGUobnVsbCkseD1oLnVzZUNhbGxiYWNrKFI9PntSIT1rLmN1cnJlbnQmJihrLmN1cnJlbnQ9UixtKFIpKX0sW21dKSxfPWgudXNlQ2FsbGJhY2soUj0+e1IhPT1DLmN1cnJlbnQmJihDLmN1cnJlbnQ9Uix2KFIpKX0sW3ZdKSxTPW98fGcsRT1sfHx3LGs9aC51c2VSZWYobnVsbCksQz1oLnVzZVJlZihudWxsKSxOPWgudXNlUmVmKHUpLEE9bzEoYSksVD1vMShpKSxEPWgudXNlQ2FsbGJhY2soKCk9PntpZighay5jdXJyZW50fHwhQy5jdXJyZW50KXJldHVybjtjb25zdCBSPXtwbGFjZW1lbnQ6ZSxzdHJhdGVneTpuLG1pZGRsZXdhcmU6Zn07VC5jdXJyZW50JiYoUi5wbGF0Zm9ybT1ULmN1cnJlbnQpLEc1KGsuY3VycmVudCxDLmN1cnJlbnQsUikudGhlbihQPT57Y29uc3QgYj17Li4uUCxpc1Bvc2l0aW9uZWQ6ITB9O0wuY3VycmVudCYmIXJmKE4uY3VycmVudCxiKSYmKE4uY3VycmVudD1iLFlyLmZsdXNoU3luYygoKT0+e2QoYil9KSl9KX0sW2YsZSxuLFRdKTtHdSgoKT0+e2M9PT0hMSYmTi5jdXJyZW50LmlzUG9zaXRpb25lZCYmKE4uY3VycmVudC5pc1Bvc2l0aW9uZWQ9ITEsZChSPT4oey4uLlIsaXNQb3NpdGlvbmVkOiExfSkpKX0sW2NdKTtjb25zdCBMPWgudXNlUmVmKCExKTtHdSgoKT0+KEwuY3VycmVudD0hMCwoKT0+e0wuY3VycmVudD0hMX0pLFtdKSxHdSgoKT0+e2lmKFMmJihrLmN1cnJlbnQ9UyksRSYmKEMuY3VycmVudD1FKSxTJiZFKXtpZihBLmN1cnJlbnQpcmV0dXJuIEEuY3VycmVudChTLEUsRCk7RCgpfX0sW1MsRSxELEFdKTtjb25zdCBLPWgudXNlTWVtbygoKT0+KHtyZWZlcmVuY2U6ayxmbG9hdGluZzpDLHNldFJlZmVyZW5jZTp4LHNldEZsb2F0aW5nOl99KSxbeCxfXSksQj1oLnVzZU1lbW8oKCk9Pih7cmVmZXJlbmNlOlMsZmxvYXRpbmc6RX0pLFtTLEVdKSxaPWgudXNlTWVtbygoKT0+e2NvbnN0IFI9e3Bvc2l0aW9uOm4sbGVmdDowLHRvcDowfTtpZighQi5mbG9hdGluZylyZXR1cm4gUjtjb25zdCBQPWkxKEIuZmxvYXRpbmcsdS54KSxiPWkxKEIuZmxvYXRpbmcsdS55KTtyZXR1cm4gcz97Li4uUix0cmFuc2Zvcm06InRyYW5zbGF0ZSgiK1ArInB4LCAiK2IrInB4KSIsLi4uaGIoQi5mbG9hdGluZyk+PTEuNSYme3dpbGxDaGFuZ2U6InRyYW5zZm9ybSJ9fTp7cG9zaXRpb246bixsZWZ0OlAsdG9wOmJ9fSxbbixzLEIuZmxvYXRpbmcsdS54LHUueV0pO3JldHVybiBoLnVzZU1lbW8oKCk9Pih7Li4udSx1cGRhdGU6RCxyZWZzOkssZWxlbWVudHM6QixmbG9hdGluZ1N0eWxlczpafSksW3UsRCxLLEIsWl0pfWZ1bmN0aW9uIG1iKHQpe2NvbnN0W2Usbl09aC51c2VTdGF0ZSh2b2lkIDApO3JldHVybiBIbigoKT0+e2lmKHQpe24oe3dpZHRoOnQub2Zmc2V0V2lkdGgsaGVpZ2h0OnQub2Zmc2V0SGVpZ2h0fSk7Y29uc3Qgcj1uZXcgUmVzaXplT2JzZXJ2ZXIoaT0+e2lmKCFBcnJheS5pc0FycmF5KGkpfHwhaS5sZW5ndGgpcmV0dXJuO2NvbnN0IG89aVswXTtsZXQgbCxzO2lmKCJib3JkZXJCb3hTaXplImluIG8pe2NvbnN0IGE9by5ib3JkZXJCb3hTaXplLGM9QXJyYXkuaXNBcnJheShhKT9hWzBdOmE7bD1jLmlubGluZVNpemUscz1jLmJsb2NrU2l6ZX1lbHNlIGw9dC5vZmZzZXRXaWR0aCxzPXQub2Zmc2V0SGVpZ2h0O24oe3dpZHRoOmwsaGVpZ2h0OnN9KX0pO3JldHVybiByLm9ic2VydmUodCx7Ym94OiJib3JkZXItYm94In0pLCgpPT5yLnVub2JzZXJ2ZSh0KX1lbHNlIG4odm9pZCAwKX0sW3RdKSxlfWNvbnN0IGdiPSJQb3BwZXIiLFt2Yix5Yl09Y2woZ2IpLFtKNSx4Yl09dmIoZ2IpLFE1PXQ9Pntjb25zdHtfX3Njb3BlUG9wcGVyOmUsY2hpbGRyZW46bn09dCxbcixpXT1oLnVzZVN0YXRlKG51bGwpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoSjUse3Njb3BlOmUsYW5jaG9yOnIsb25BbmNob3JDaGFuZ2U6aX0sbil9LHE1PSJQb3BwZXJBbmNob3IiLGUzPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVQb3BwZXI6bix2aXJ0dWFsUmVmOnIsLi4uaX09dCxvPXhiKHE1LG4pLGw9aC51c2VSZWYobnVsbCkscz1zdChlLGwpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e28ub25BbmNob3JDaGFuZ2UoKHI9PW51bGw/dm9pZCAwOnIuY3VycmVudCl8fGwuY3VycmVudCl9KSxyP251bGw6aC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7fSxpLHtyZWY6c30pKX0pLF9iPSJQb3BwZXJDb250ZW50IixbdDMsekldPXZiKF9iKSxuMz1oLmZvcndhcmRSZWYoKHQsZSk9Pnt2YXIgbixyLGksbyxsLHMsYSxjO2NvbnN0e19fc2NvcGVQb3BwZXI6dSxzaWRlOmQ9ImJvdHRvbSIsc2lkZU9mZnNldDpmPTAsYWxpZ246cD0iY2VudGVyIixhbGlnbk9mZnNldDpnPTAsYXJyb3dQYWRkaW5nOm09MCxhdm9pZENvbGxpc2lvbnM6dz0hMCxjb2xsaXNpb25Cb3VuZGFyeTp2PVtdLGNvbGxpc2lvblBhZGRpbmc6eD0wLHN0aWNreTpfPSJwYXJ0aWFsIixoaWRlV2hlbkRldGFjaGVkOlM9ITEsdXBkYXRlUG9zaXRpb25TdHJhdGVneTpFPSJvcHRpbWl6ZWQiLG9uUGxhY2VkOmssLi4uQ309dCxOPXhiKF9iLHUpLFtBLFRdPWgudXNlU3RhdGUobnVsbCksRD1zdChlLENuPT5UKENuKSksW0wsS109aC51c2VTdGF0ZShudWxsKSxCPW1iKEwpLFo9KG49Qj09bnVsbD92b2lkIDA6Qi53aWR0aCkhPT1udWxsJiZuIT09dm9pZCAwP246MCxSPShyPUI9PW51bGw/dm9pZCAwOkIuaGVpZ2h0KSE9PW51bGwmJnIhPT12b2lkIDA/cjowLFA9ZCsocCE9PSJjZW50ZXIiPyItIitwOiIiKSxiPXR5cGVvZiB4PT0ibnVtYmVyIj94Ont0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCwuLi54fSxqPUFycmF5LmlzQXJyYXkodik/djpbdl0sej1qLmxlbmd0aD4wLEc9e3BhZGRpbmc6Yixib3VuZGFyeTpqLmZpbHRlcihyMyksYWx0Qm91bmRhcnk6en0se3JlZnM6cmUsZmxvYXRpbmdTdHlsZXM6YmUscGxhY2VtZW50OnllLGlzUG9zaXRpb25lZDpXZSxtaWRkbGV3YXJlRGF0YTpGZX09WDUoe3N0cmF0ZWd5OiJmaXhlZCIscGxhY2VtZW50OlAsd2hpbGVFbGVtZW50c01vdW50ZWQ6KC4uLkNuKT0+WjUoLi4uQ24se2FuaW1hdGlvbkZyYW1lOkU9PT0iYWx3YXlzIn0pLGVsZW1lbnRzOntyZWZlcmVuY2U6Ti5hbmNob3J9LG1pZGRsZXdhcmU6W2s1KHttYWluQXhpczpmK1IsYWxpZ25tZW50QXhpczpnfSksdyYmJDUoe21haW5BeGlzOiEwLGNyb3NzQXhpczohMSxsaW1pdGVyOl89PT0icGFydGlhbCI/VDUoKTp2b2lkIDAsLi4uR30pLHcmJkU1KHsuLi5HfSksTjUoey4uLkcsYXBwbHk6KHtlbGVtZW50czpDbixyZWN0czp1cixhdmFpbGFibGVXaWR0aDpqZSxhdmFpbGFibGVIZWlnaHQ6VHR9KT0+e2NvbnN0e3dpZHRoOmF0LGhlaWdodDphbn09dXIucmVmZXJlbmNlLGJuPUNuLmZsb2F0aW5nLnN0eWxlO2JuLnNldFByb3BlcnR5KCItLXJhZGl4LXBvcHBlci1hdmFpbGFibGUtd2lkdGgiLGAke2plfXB4YCksYm4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS1oZWlnaHQiLGAke1R0fXB4YCksYm4uc2V0UHJvcGVydHkoIi0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCIsYCR7YXR9cHhgKSxibi5zZXRQcm9wZXJ0eSgiLS1yYWRpeC1wb3BwZXItYW5jaG9yLWhlaWdodCIsYCR7YW59cHhgKX19KSxMJiZZNSh7ZWxlbWVudDpMLHBhZGRpbmc6bX0pLGkzKHthcnJvd1dpZHRoOlosYXJyb3dIZWlnaHQ6Un0pLFMmJkM1KHtzdHJhdGVneToicmVmZXJlbmNlSGlkZGVuIiwuLi5HfSldfSksW25lLEllXT13Yih5ZSksJGU9ZW4oayk7SG4oKCk9PntXZSYmKCRlPT1udWxsfHwkZSgpKX0sW1dlLCRlXSk7Y29uc3QgUmU9KGk9RmUuYXJyb3cpPT09bnVsbHx8aT09PXZvaWQgMD92b2lkIDA6aS54LFNlPShvPUZlLmFycm93KT09PW51bGx8fG89PT12b2lkIDA/dm9pZCAwOm8ueSxMZT0oKGw9RmUuYXJyb3cpPT09bnVsbHx8bD09PXZvaWQgMD92b2lkIDA6bC5jZW50ZXJPZmZzZXQpIT09MCxbSmUsV3RdPWgudXNlU3RhdGUoKTtyZXR1cm4gSG4oKCk9PntBJiZXdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShBKS56SW5kZXgpfSxbQV0pLGguY3JlYXRlRWxlbWVudCgiZGl2Iix7cmVmOnJlLnNldEZsb2F0aW5nLCJkYXRhLXJhZGl4LXBvcHBlci1jb250ZW50LXdyYXBwZXIiOiIiLHN0eWxlOnsuLi5iZSx0cmFuc2Zvcm06V2U/YmUudHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTIwMCUpIixtaW5XaWR0aDoibWF4LWNvbnRlbnQiLHpJbmRleDpKZSwiLS1yYWRpeC1wb3BwZXItdHJhbnNmb3JtLW9yaWdpbiI6WyhzPUZlLnRyYW5zZm9ybU9yaWdpbik9PT1udWxsfHxzPT09dm9pZCAwP3ZvaWQgMDpzLngsKGE9RmUudHJhbnNmb3JtT3JpZ2luKT09PW51bGx8fGE9PT12b2lkIDA/dm9pZCAwOmEueV0uam9pbigiICIpfSxkaXI6dC5kaXJ9LGguY3JlYXRlRWxlbWVudCh0Myx7c2NvcGU6dSxwbGFjZWRTaWRlOm5lLG9uQXJyb3dDaGFuZ2U6SyxhcnJvd1g6UmUsYXJyb3dZOlNlLHNob3VsZEhpZGVBcnJvdzpMZX0saC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImRhdGEtc2lkZSI6bmUsImRhdGEtYWxpZ24iOkllfSxDLHtyZWY6RCxzdHlsZTp7Li4uQy5zdHlsZSxhbmltYXRpb246V2U/dm9pZCAwOiJub25lIixvcGFjaXR5OihjPUZlLmhpZGUpIT09bnVsbCYmYyE9PXZvaWQgMCYmYy5yZWZlcmVuY2VIaWRkZW4/MDp2b2lkIDB9fSkpKSl9KTtmdW5jdGlvbiByMyh0KXtyZXR1cm4gdCE9PW51bGx9Y29uc3QgaTM9dD0+KHtuYW1lOiJ0cmFuc2Zvcm1PcmlnaW4iLG9wdGlvbnM6dCxmbihlKXt2YXIgbixyLGksbyxsO2NvbnN0e3BsYWNlbWVudDpzLHJlY3RzOmEsbWlkZGxld2FyZURhdGE6Y309ZSxkPSgobj1jLmFycm93KT09PW51bGx8fG49PT12b2lkIDA/dm9pZCAwOm4uY2VudGVyT2Zmc2V0KSE9PTAsZj1kPzA6dC5hcnJvd1dpZHRoLHA9ZD8wOnQuYXJyb3dIZWlnaHQsW2csbV09d2Iocyksdz17c3RhcnQ6IjAlIixjZW50ZXI6IjUwJSIsZW5kOiIxMDAlIn1bbV0sdj0oKHI9KGk9Yy5hcnJvdyk9PT1udWxsfHxpPT09dm9pZCAwP3ZvaWQgMDppLngpIT09bnVsbCYmciE9PXZvaWQgMD9yOjApK2YvMix4PSgobz0obD1jLmFycm93KT09PW51bGx8fGw9PT12b2lkIDA/dm9pZCAwOmwueSkhPT1udWxsJiZvIT09dm9pZCAwP286MCkrcC8yO2xldCBfPSIiLFM9IiI7cmV0dXJuIGc9PT0iYm90dG9tIj8oXz1kP3c6YCR7dn1weGAsUz1gJHstcH1weGApOmc9PT0idG9wIj8oXz1kP3c6YCR7dn1weGAsUz1gJHthLmZsb2F0aW5nLmhlaWdodCtwfXB4YCk6Zz09PSJyaWdodCI/KF89YCR7LXB9cHhgLFM9ZD93OmAke3h9cHhgKTpnPT09ImxlZnQiJiYoXz1gJHthLmZsb2F0aW5nLndpZHRoK3B9cHhgLFM9ZD93OmAke3h9cHhgKSx7ZGF0YTp7eDpfLHk6U319fX0pO2Z1bmN0aW9uIHdiKHQpe2NvbnN0W2Usbj0iY2VudGVyIl09dC5zcGxpdCgiLSIpO3JldHVybltlLG5dfWNvbnN0IG8zPVE1LGwzPWUzLHMzPW4zLGEzPWguZm9yd2FyZFJlZigodCxlKT0+e3ZhciBuO2NvbnN0e2NvbnRhaW5lcjpyPWdsb2JhbFRoaXM9PW51bGx8fChuPWdsb2JhbFRoaXMuZG9jdW1lbnQpPT09bnVsbHx8bj09PXZvaWQgMD92b2lkIDA6bi5ib2R5LC4uLml9PXQ7cmV0dXJuIHI/R3cuY3JlYXRlUG9ydGFsKGguY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe30saSx7cmVmOmV9KSkscik6bnVsbH0pO2Z1bmN0aW9uIFNiKHQpe2NvbnN0IGU9aC51c2VSZWYoe3ZhbHVlOnQscHJldmlvdXM6dH0pO3JldHVybiBoLnVzZU1lbW8oKCk9PihlLmN1cnJlbnQudmFsdWUhPT10JiYoZS5jdXJyZW50LnByZXZpb3VzPWUuY3VycmVudC52YWx1ZSxlLmN1cnJlbnQudmFsdWU9dCksZS5jdXJyZW50LnByZXZpb3VzKSxbdF0pfWNvbnN0IGMzPWguZm9yd2FyZFJlZigodCxlKT0+aC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2Uoe30sdCx7cmVmOmUsc3R5bGU6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYm9yZGVyOjAsd2lkdGg6MSxoZWlnaHQ6MSxwYWRkaW5nOjAsbWFyZ2luOi0xLG92ZXJmbG93OiJoaWRkZW4iLGNsaXA6InJlY3QoMCwgMCwgMCwgMCkiLHdoaXRlU3BhY2U6Im5vd3JhcCIsd29yZFdyYXA6Im5vcm1hbCIsLi4udC5zdHlsZX19KSkpO3ZhciB1Mz1mdW5jdGlvbih0KXtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybiBudWxsO3ZhciBlPUFycmF5LmlzQXJyYXkodCk/dFswXTp0O3JldHVybiBlLm93bmVyRG9jdW1lbnQuYm9keX0sa2w9bmV3IFdlYWtNYXAsYnU9bmV3IFdlYWtNYXAsa3U9e30sUXA9MCxFYj1mdW5jdGlvbih0KXtyZXR1cm4gdCYmKHQuaG9zdHx8RWIodC5wYXJlbnROb2RlKSl9LGQzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUubWFwKGZ1bmN0aW9uKG4pe2lmKHQuY29udGFpbnMobikpcmV0dXJuIG47dmFyIHI9RWIobik7cmV0dXJuIHImJnQuY29udGFpbnMocik/cjooY29uc29sZS5lcnJvcigiYXJpYS1oaWRkZW4iLG4sImluIG5vdCBjb250YWluZWQgaW5zaWRlIix0LCIuIERvaW5nIG5vdGhpbmciKSxudWxsKX0pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIW59KX0sZjM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9ZDMoZSxBcnJheS5pc0FycmF5KHQpP3Q6W3RdKTtrdVtuXXx8KGt1W25dPW5ldyBXZWFrTWFwKTt2YXIgbz1rdVtuXSxsPVtdLHM9bmV3IFNldCxhPW5ldyBTZXQoaSksYz1mdW5jdGlvbihkKXshZHx8cy5oYXMoZCl8fChzLmFkZChkKSxjKGQucGFyZW50Tm9kZSkpfTtpLmZvckVhY2goYyk7dmFyIHU9ZnVuY3Rpb24oZCl7IWR8fGEuaGFzKGQpfHxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGQuY2hpbGRyZW4sZnVuY3Rpb24oZil7aWYocy5oYXMoZikpdShmKTtlbHNle3ZhciBwPWYuZ2V0QXR0cmlidXRlKHIpLGc9cCE9PW51bGwmJnAhPT0iZmFsc2UiLG09KGtsLmdldChmKXx8MCkrMSx3PShvLmdldChmKXx8MCkrMTtrbC5zZXQoZixtKSxvLnNldChmLHcpLGwucHVzaChmKSxtPT09MSYmZyYmYnUuc2V0KGYsITApLHc9PT0xJiZmLnNldEF0dHJpYnV0ZShuLCJ0cnVlIiksZ3x8Zi5zZXRBdHRyaWJ1dGUociwidHJ1ZSIpfX0pfTtyZXR1cm4gdShlKSxzLmNsZWFyKCksUXArKyxmdW5jdGlvbigpe2wuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgZj1rbC5nZXQoZCktMSxwPW8uZ2V0KGQpLTE7a2wuc2V0KGQsZiksby5zZXQoZCxwKSxmfHwoYnUuaGFzKGQpfHxkLnJlbW92ZUF0dHJpYnV0ZShyKSxidS5kZWxldGUoZCkpLHB8fGQucmVtb3ZlQXR0cmlidXRlKG4pfSksUXAtLSxRcHx8KGtsPW5ldyBXZWFrTWFwLGtsPW5ldyBXZWFrTWFwLGJ1PW5ldyBXZWFrTWFwLGt1PXt9KX19LHAzPWZ1bmN0aW9uKHQsZSxuKXtuPT09dm9pZCAwJiYobj0iZGF0YS1hcmlhLWhpZGRlbiIpO3ZhciByPUFycmF5LmZyb20oQXJyYXkuaXNBcnJheSh0KT90Olt0XSksaT1lfHx1Myh0KTtyZXR1cm4gaT8oci5wdXNoLmFwcGx5KHIsQXJyYXkuZnJvbShpLnF1ZXJ5U2VsZWN0b3JBbGwoIlthcmlhLWxpdmVdIikpKSxmMyhyLGksbiwiYXJpYS1oaWRkZW4iKSk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LERyPWZ1bmN0aW9uKCl7cmV0dXJuIERyPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPTEsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspe249YXJndW1lbnRzW3JdO2Zvcih2YXIgbyBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLG8pJiYoZVtvXT1uW29dKX1yZXR1cm4gZX0sRHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBDYih0LGUpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpJiZlLmluZGV4T2Yocik8MCYmKG5bcl09dFtyXSk7aWYodCE9bnVsbCYmdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM9PSJmdW5jdGlvbiIpZm9yKHZhciBpPTAscj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2k8ci5sZW5ndGg7aSsrKWUuaW5kZXhPZihyW2ldKTwwJiZPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodCxyW2ldKSYmKG5bcltpXV09dFtyW2ldXSk7cmV0dXJuIG59ZnVuY3Rpb24gaDModCxlLG4pe2lmKG58fGFyZ3VtZW50cy5sZW5ndGg9PT0yKWZvcih2YXIgcj0wLGk9ZS5sZW5ndGgsbztyPGk7cisrKShvfHwhKHIgaW4gZSkpJiYob3x8KG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwLHIpKSxvW3JdPWVbcl0pO3JldHVybiB0LmNvbmNhdChvfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSl9dmFyIFl1PSJyaWdodC1zY3JvbGwtYmFyLXBvc2l0aW9uIixYdT0id2lkdGgtYmVmb3JlLXNjcm9sbC1iYXIiLG0zPSJ3aXRoLXNjcm9sbC1iYXJzLWhpZGRlbiIsZzM9Ii0tcmVtb3ZlZC1ib2R5LXNjcm9sbC1iYXItc2l6ZSI7ZnVuY3Rpb24gdjModCxlKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dChlKTp0JiYodC5jdXJyZW50PWUpLHR9ZnVuY3Rpb24geTModCxlKXt2YXIgbj1oLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJue3ZhbHVlOnQsY2FsbGJhY2s6ZSxmYWNhZGU6e2dldCBjdXJyZW50KCl7cmV0dXJuIG4udmFsdWV9LHNldCBjdXJyZW50KHIpe3ZhciBpPW4udmFsdWU7aSE9PXImJihuLnZhbHVlPXIsbi5jYWxsYmFjayhyLGkpKX19fX0pWzBdO3JldHVybiBuLmNhbGxiYWNrPWUsbi5mYWNhZGV9ZnVuY3Rpb24geDModCxlKXtyZXR1cm4geTMoZXx8bnVsbCxmdW5jdGlvbihuKXtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHIpe3JldHVybiB2MyhyLG4pfSl9KX1mdW5jdGlvbiBfMyh0KXtyZXR1cm4gdH1mdW5jdGlvbiB3Myh0LGUpe2U9PT12b2lkIDAmJihlPV8zKTt2YXIgbj1bXSxyPSExLGk9e3JlYWQ6ZnVuY3Rpb24oKXtpZihyKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogY291bGQgbm90IGByZWFkYCBmcm9tIGFuIGBhc3NpZ25lZGAgbWVkaXVtLiBgcmVhZGAgY291bGQgYmUgdXNlZCBvbmx5IHdpdGggYHVzZU1lZGl1bWAuIik7cmV0dXJuIG4ubGVuZ3RoP25bbi5sZW5ndGgtMV06dH0sdXNlTWVkaXVtOmZ1bmN0aW9uKG8pe3ZhciBsPWUobyxyKTtyZXR1cm4gbi5wdXNoKGwpLGZ1bmN0aW9uKCl7bj1uLmZpbHRlcihmdW5jdGlvbihzKXtyZXR1cm4gcyE9PWx9KX19LGFzc2lnblN5bmNNZWRpdW06ZnVuY3Rpb24obyl7Zm9yKHI9ITA7bi5sZW5ndGg7KXt2YXIgbD1uO249W10sbC5mb3JFYWNoKG8pfW49e3B1c2g6ZnVuY3Rpb24ocyl7cmV0dXJuIG8ocyl9LGZpbHRlcjpmdW5jdGlvbigpe3JldHVybiBufX19LGFzc2lnbk1lZGl1bTpmdW5jdGlvbihvKXtyPSEwO3ZhciBsPVtdO2lmKG4ubGVuZ3RoKXt2YXIgcz1uO249W10scy5mb3JFYWNoKG8pLGw9bn12YXIgYT1mdW5jdGlvbigpe3ZhciB1PWw7bD1bXSx1LmZvckVhY2gobyl9LGM9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhKX07YygpLG49e3B1c2g6ZnVuY3Rpb24odSl7bC5wdXNoKHUpLGMoKX0sZmlsdGVyOmZ1bmN0aW9uKHUpe3JldHVybiBsPWwuZmlsdGVyKHUpLG59fX19O3JldHVybiBpfWZ1bmN0aW9uIFMzKHQpe3Q9PT12b2lkIDAmJih0PXt9KTt2YXIgZT13MyhudWxsKTtyZXR1cm4gZS5vcHRpb25zPURyKHthc3luYzohMCxzc3I6ITF9LHQpLGV9dmFyIGJiPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2lkZUNhcixuPUNiKHQsWyJzaWRlQ2FyIl0pO2lmKCFlKXRocm93IG5ldyBFcnJvcigiU2lkZWNhcjogcGxlYXNlIHByb3ZpZGUgYHNpZGVDYXJgIHByb3BlcnR5IHRvIGltcG9ydCB0aGUgcmlnaHQgY2FyIik7dmFyIHI9ZS5yZWFkKCk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJTaWRlY2FyIG1lZGl1bSBub3QgZm91bmQiKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KHIsRHIoe30sbikpfTtiYi5pc1NpZGVDYXJFeHBvcnQ9ITA7ZnVuY3Rpb24gRTModCxlKXtyZXR1cm4gdC51c2VNZWRpdW0oZSksYmJ9dmFyIGtiPVMzKCkscXA9ZnVuY3Rpb24oKXt9LEpmPWguZm9yd2FyZFJlZihmdW5jdGlvbih0LGUpe3ZhciBuPWgudXNlUmVmKG51bGwpLHI9aC51c2VTdGF0ZSh7b25TY3JvbGxDYXB0dXJlOnFwLG9uV2hlZWxDYXB0dXJlOnFwLG9uVG91Y2hNb3ZlQ2FwdHVyZTpxcH0pLGk9clswXSxvPXJbMV0sbD10LmZvcndhcmRQcm9wcyxzPXQuY2hpbGRyZW4sYT10LmNsYXNzTmFtZSxjPXQucmVtb3ZlU2Nyb2xsQmFyLHU9dC5lbmFibGVkLGQ9dC5zaGFyZHMsZj10LnNpZGVDYXIscD10Lm5vSXNvbGF0aW9uLGc9dC5pbmVydCxtPXQuYWxsb3dQaW5jaFpvb20sdz10LmFzLHY9dz09PXZvaWQgMD8iZGl2Ijp3LHg9Q2IodCxbImZvcndhcmRQcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVtb3ZlU2Nyb2xsQmFyIiwiZW5hYmxlZCIsInNoYXJkcyIsInNpZGVDYXIiLCJub0lzb2xhdGlvbiIsImluZXJ0IiwiYWxsb3dQaW5jaFpvb20iLCJhcyJdKSxfPWYsUz14MyhbbixlXSksRT1EcihEcih7fSx4KSxpKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCx1JiZoLmNyZWF0ZUVsZW1lbnQoXyx7c2lkZUNhcjprYixyZW1vdmVTY3JvbGxCYXI6YyxzaGFyZHM6ZCxub0lzb2xhdGlvbjpwLGluZXJ0Omcsc2V0Q2FsbGJhY2tzOm8sYWxsb3dQaW5jaFpvb206ISFtLGxvY2tSZWY6bn0pLGw/aC5jbG9uZUVsZW1lbnQoaC5DaGlsZHJlbi5vbmx5KHMpLERyKERyKHt9LEUpLHtyZWY6U30pKTpoLmNyZWF0ZUVsZW1lbnQodixEcih7fSxFLHtjbGFzc05hbWU6YSxyZWY6U30pLHMpKX0pO0pmLmRlZmF1bHRQcm9wcz17ZW5hYmxlZDohMCxyZW1vdmVTY3JvbGxCYXI6ITAsaW5lcnQ6ITF9O0pmLmNsYXNzTmFtZXM9e2Z1bGxXaWR0aDpYdSx6ZXJvUmlnaHQ6WXV9O3ZhciBsMSxDMz1mdW5jdGlvbigpe2lmKGwxKXJldHVybiBsMTtpZih0eXBlb2YgX193ZWJwYWNrX25vbmNlX188InUiKXJldHVybiBfX3dlYnBhY2tfbm9uY2VfX307ZnVuY3Rpb24gYjMoKXtpZighZG9jdW1lbnQpcmV0dXJuIG51bGw7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LnR5cGU9InRleHQvY3NzIjt2YXIgZT1DMygpO3JldHVybiBlJiZ0LnNldEF0dHJpYnV0ZSgibm9uY2UiLGUpLHR9ZnVuY3Rpb24gazModCxlKXt0LnN0eWxlU2hlZXQ/dC5zdHlsZVNoZWV0LmNzc1RleHQ9ZTp0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiAkMyh0KXt2YXIgZT1kb2N1bWVudC5oZWFkfHxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdO2UuYXBwZW5kQ2hpbGQodCl9dmFyIFQzPWZ1bmN0aW9uKCl7dmFyIHQ9MCxlPW51bGw7cmV0dXJue2FkZDpmdW5jdGlvbihuKXt0PT0wJiYoZT1iMygpKSYmKGszKGUsbiksJDMoZSkpLHQrK30scmVtb3ZlOmZ1bmN0aW9uKCl7dC0tLCF0JiZlJiYoZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksZT1udWxsKX19fSxOMz1mdW5jdGlvbigpe3ZhciB0PVQzKCk7cmV0dXJuIGZ1bmN0aW9uKGUsbil7aC51c2VFZmZlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdC5hZGQoZSksZnVuY3Rpb24oKXt0LnJlbW92ZSgpfX0sW2UmJm5dKX19LCRiPWZ1bmN0aW9uKCl7dmFyIHQ9TjMoKSxlPWZ1bmN0aW9uKG4pe3ZhciByPW4uc3R5bGVzLGk9bi5keW5hbWljO3JldHVybiB0KHIsaSksbnVsbH07cmV0dXJuIGV9LFIzPXtsZWZ0OjAsdG9wOjAscmlnaHQ6MCxnYXA6MH0sZWg9ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlSW50KHR8fCIiLDEwKXx8MH0sTzM9ZnVuY3Rpb24odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksbj1lW3Q9PT0icGFkZGluZyI/InBhZGRpbmdMZWZ0IjoibWFyZ2luTGVmdCJdLHI9ZVt0PT09InBhZGRpbmciPyJwYWRkaW5nVG9wIjoibWFyZ2luVG9wIl0saT1lW3Q9PT0icGFkZGluZyI/InBhZGRpbmdSaWdodCI6Im1hcmdpblJpZ2h0Il07cmV0dXJuW2VoKG4pLGVoKHIpLGVoKGkpXX0sUDM9ZnVuY3Rpb24odCl7aWYodD09PXZvaWQgMCYmKHQ9Im1hcmdpbiIpLHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiBSMzt2YXIgZT1PMyh0KSxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxyPXdpbmRvdy5pbm5lcldpZHRoO3JldHVybntsZWZ0OmVbMF0sdG9wOmVbMV0scmlnaHQ6ZVsyXSxnYXA6TWF0aC5tYXgoMCxyLW4rZVsyXS1lWzBdKX19LEEzPSRiKCksTTM9ZnVuY3Rpb24odCxlLG4scil7dmFyIGk9dC5sZWZ0LG89dC50b3AsbD10LnJpZ2h0LHM9dC5nYXA7cmV0dXJuIG49PT12b2lkIDAmJihuPSJtYXJnaW4iKSxgCiAgLmAuY29uY2F0KG0zLGAgewogICBvdmVyZmxvdzogaGlkZGVuIGApLmNvbmNhdChyLGA7CiAgIHBhZGRpbmctcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICBib2R5IHsKICAgIG92ZXJmbG93OiBoaWRkZW4gYCkuY29uY2F0KHIsYDsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBgKS5jb25jYXQoW2UmJiJwb3NpdGlvbjogcmVsYXRpdmUgIi5jb25jYXQociwiOyIpLG49PT0ibWFyZ2luIiYmYAogICAgcGFkZGluZy1sZWZ0OiBgLmNvbmNhdChpLGBweDsKICAgIHBhZGRpbmctdG9wOiBgKS5jb25jYXQobyxgcHg7CiAgICBwYWRkaW5nLXJpZ2h0OiBgKS5jb25jYXQobCxgcHg7CiAgICBtYXJnaW4tbGVmdDowOwogICAgbWFyZ2luLXRvcDowOwogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICAgIGApLG49PT0icGFkZGluZyImJiJwYWRkaW5nLXJpZ2h0OiAiLmNvbmNhdChzLCJweCAiKS5jb25jYXQociwiOyIpXS5maWx0ZXIoQm9vbGVhbikuam9pbigiIiksYAogIH0KICAKICAuYCkuY29uY2F0KFl1LGAgewogICAgcmlnaHQ6IGApLmNvbmNhdChzLCJweCAiKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KFh1LGAgewogICAgbWFyZ2luLXJpZ2h0OiBgKS5jb25jYXQocywicHggIikuY29uY2F0KHIsYDsKICB9CiAgCiAgLmApLmNvbmNhdChZdSwiIC4iKS5jb25jYXQoWXUsYCB7CiAgICByaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICAuYCkuY29uY2F0KFh1LCIgLiIpLmNvbmNhdChYdSxgIHsKICAgIG1hcmdpbi1yaWdodDogMCBgKS5jb25jYXQocixgOwogIH0KICAKICBib2R5IHsKICAgIGApLmNvbmNhdChnMywiOiAiKS5jb25jYXQocyxgcHg7CiAgfQpgKX0sTDM9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub1JlbGF0aXZlLG49dC5ub0ltcG9ydGFudCxyPXQuZ2FwTW9kZSxpPXI9PT12b2lkIDA/Im1hcmdpbiI6cixvPWgudXNlTWVtbyhmdW5jdGlvbigpe3JldHVybiBQMyhpKX0sW2ldKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEEzLHtzdHlsZXM6TTMobywhZSxpLG4/IiI6IiFpbXBvcnRhbnQiKX0pfSx0Zz0hMTtpZih0eXBlb2Ygd2luZG93PCJ1Iil0cnl7dmFyICR1PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0Zz0hMCwhMH19KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsJHUsJHUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IiwkdSwkdSl9Y2F0Y2h7dGc9ITF9dmFyICRsPXRnP3twYXNzaXZlOiExfTohMSxEMz1mdW5jdGlvbih0KXtyZXR1cm4gdC50YWdOYW1lPT09IlRFWFRBUkVBIn0sVGI9ZnVuY3Rpb24odCxlKXt2YXIgbj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4gbltlXSE9PSJoaWRkZW4iJiYhKG4ub3ZlcmZsb3dZPT09bi5vdmVyZmxvd1gmJiFEMyh0KSYmbltlXT09PSJ2aXNpYmxlIil9LEkzPWZ1bmN0aW9uKHQpe3JldHVybiBUYih0LCJvdmVyZmxvd1kiKX0sajM9ZnVuY3Rpb24odCl7cmV0dXJuIFRiKHQsIm92ZXJmbG93WCIpfSxzMT1mdW5jdGlvbih0LGUpe3ZhciBuPWU7ZG97dHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZuIGluc3RhbmNlb2YgU2hhZG93Um9vdCYmKG49bi5ob3N0KTt2YXIgcj1OYih0LG4pO2lmKHIpe3ZhciBpPVJiKHQsbiksbz1pWzFdLGw9aVsyXTtpZihvPmwpcmV0dXJuITB9bj1uLnBhcmVudE5vZGV9d2hpbGUobiYmbiE9PWRvY3VtZW50LmJvZHkpO3JldHVybiExfSx6Mz1mdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbFRvcCxuPXQuc2Nyb2xsSGVpZ2h0LHI9dC5jbGllbnRIZWlnaHQ7cmV0dXJuW2UsbixyXX0sRjM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zY3JvbGxMZWZ0LG49dC5zY3JvbGxXaWR0aCxyPXQuY2xpZW50V2lkdGg7cmV0dXJuW2UsbixyXX0sTmI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PSJ2Ij9JMyhlKTpqMyhlKX0sUmI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PSJ2Ij96MyhlKTpGMyhlKX0sQjM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PSJoIiYmZT09PSJydGwiPy0xOjF9LFUzPWZ1bmN0aW9uKHQsZSxuLHIsaSl7dmFyIG89QjModCx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5kaXJlY3Rpb24pLGw9bypyLHM9bi50YXJnZXQsYT1lLmNvbnRhaW5zKHMpLGM9ITEsdT1sPjAsZD0wLGY9MDtkb3t2YXIgcD1SYih0LHMpLGc9cFswXSxtPXBbMV0sdz1wWzJdLHY9bS13LW8qZzsoZ3x8dikmJk5iKHQscykmJihkKz12LGYrPWcpLHM9cy5wYXJlbnROb2RlfXdoaWxlKCFhJiZzIT09ZG9jdW1lbnQuYm9keXx8YSYmKGUuY29udGFpbnMocyl8fGU9PT1zKSk7cmV0dXJuKHUmJihpJiZkPT09MHx8IWkmJmw+ZCl8fCF1JiYoaSYmZj09PTB8fCFpJiYtbD5mKSkmJihjPSEwKSxjfSxUdT1mdW5jdGlvbih0KXtyZXR1cm4iY2hhbmdlZFRvdWNoZXMiaW4gdD9bdC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLHQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WV06WzAsMF19LGExPWZ1bmN0aW9uKHQpe3JldHVyblt0LmRlbHRhWCx0LmRlbHRhWV19LGMxPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYiY3VycmVudCJpbiB0P3QuY3VycmVudDp0fSxXMz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPT09ZVswXSYmdFsxXT09PWVbMV19LEgzPWZ1bmN0aW9uKHQpe3JldHVybmAKICAuYmxvY2staW50ZXJhY3Rpdml0eS1gLmNvbmNhdCh0LGAge3BvaW50ZXItZXZlbnRzOiBub25lO30KICAuYWxsb3ctaW50ZXJhY3Rpdml0eS1gKS5jb25jYXQodCxgIHtwb2ludGVyLWV2ZW50czogYWxsO30KYCl9LFYzPTAsVGw9W107ZnVuY3Rpb24gSzModCl7dmFyIGU9aC51c2VSZWYoW10pLG49aC51c2VSZWYoWzAsMF0pLHI9aC51c2VSZWYoKSxpPWgudXNlU3RhdGUoVjMrKylbMF0sbz1oLnVzZVN0YXRlKGZ1bmN0aW9uKCl7cmV0dXJuICRiKCl9KVswXSxsPWgudXNlUmVmKHQpO2gudXNlRWZmZWN0KGZ1bmN0aW9uKCl7bC5jdXJyZW50PXR9LFt0XSksaC51c2VFZmZlY3QoZnVuY3Rpb24oKXtpZih0LmluZXJ0KXtkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImJsb2NrLWludGVyYWN0aXZpdHktIi5jb25jYXQoaSkpO3ZhciBtPWgzKFt0LmxvY2tSZWYuY3VycmVudF0sKHQuc2hhcmRzfHxbXSkubWFwKGMxKSwhMCkuZmlsdGVyKEJvb2xlYW4pO3JldHVybiBtLmZvckVhY2goZnVuY3Rpb24odyl7cmV0dXJuIHcuY2xhc3NMaXN0LmFkZCgiYWxsb3ctaW50ZXJhY3Rpdml0eS0iLmNvbmNhdChpKSl9KSxmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgiYmxvY2staW50ZXJhY3Rpdml0eS0iLmNvbmNhdChpKSksbS5mb3JFYWNoKGZ1bmN0aW9uKHcpe3JldHVybiB3LmNsYXNzTGlzdC5yZW1vdmUoImFsbG93LWludGVyYWN0aXZpdHktIi5jb25jYXQoaSkpfSl9fX0sW3QuaW5lcnQsdC5sb2NrUmVmLmN1cnJlbnQsdC5zaGFyZHNdKTt2YXIgcz1oLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKG0sdyl7aWYoInRvdWNoZXMiaW4gbSYmbS50b3VjaGVzLmxlbmd0aD09PTIpcmV0dXJuIWwuY3VycmVudC5hbGxvd1BpbmNoWm9vbTt2YXIgdj1UdShtKSx4PW4uY3VycmVudCxfPSJkZWx0YVgiaW4gbT9tLmRlbHRhWDp4WzBdLXZbMF0sUz0iZGVsdGFZImluIG0/bS5kZWx0YVk6eFsxXS12WzFdLEUsaz1tLnRhcmdldCxDPU1hdGguYWJzKF8pPk1hdGguYWJzKFMpPyJoIjoidiI7aWYoInRvdWNoZXMiaW4gbSYmQz09PSJoIiYmay50eXBlPT09InJhbmdlIilyZXR1cm4hMTt2YXIgTj1zMShDLGspO2lmKCFOKXJldHVybiEwO2lmKE4/RT1DOihFPUM9PT0idiI/ImgiOiJ2IixOPXMxKEMsaykpLCFOKXJldHVybiExO2lmKCFyLmN1cnJlbnQmJiJjaGFuZ2VkVG91Y2hlcyJpbiBtJiYoX3x8UykmJihyLmN1cnJlbnQ9RSksIUUpcmV0dXJuITA7dmFyIEE9ci5jdXJyZW50fHxFO3JldHVybiBVMyhBLHcsbSxBPT09ImgiP186UywhMCl9LFtdKSxhPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7dmFyIHc9bTtpZighKCFUbC5sZW5ndGh8fFRsW1RsLmxlbmd0aC0xXSE9PW8pKXt2YXIgdj0iZGVsdGFZImluIHc/YTEodyk6VHUodykseD1lLmN1cnJlbnQuZmlsdGVyKGZ1bmN0aW9uKEUpe3JldHVybiBFLm5hbWU9PT13LnR5cGUmJkUudGFyZ2V0PT09dy50YXJnZXQmJlczKEUuZGVsdGEsdil9KVswXTtpZih4JiZ4LnNob3VsZCl7dy5jYW5jZWxhYmxlJiZ3LnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKCF4KXt2YXIgXz0obC5jdXJyZW50LnNoYXJkc3x8W10pLm1hcChjMSkuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcihmdW5jdGlvbihFKXtyZXR1cm4gRS5jb250YWlucyh3LnRhcmdldCl9KSxTPV8ubGVuZ3RoPjA/cyh3LF9bMF0pOiFsLmN1cnJlbnQubm9Jc29sYXRpb247UyYmdy5jYW5jZWxhYmxlJiZ3LnByZXZlbnREZWZhdWx0KCl9fX0sW10pLGM9aC51c2VDYWxsYmFjayhmdW5jdGlvbihtLHcsdix4KXt2YXIgXz17bmFtZTptLGRlbHRhOncsdGFyZ2V0OnYsc2hvdWxkOnh9O2UuY3VycmVudC5wdXNoKF8pLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmN1cnJlbnQ9ZS5jdXJyZW50LmZpbHRlcihmdW5jdGlvbihTKXtyZXR1cm4gUyE9PV99KX0sMSl9LFtdKSx1PWgudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7bi5jdXJyZW50PVR1KG0pLHIuY3VycmVudD12b2lkIDB9LFtdKSxkPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7YyhtLnR5cGUsYTEobSksbS50YXJnZXQscyhtLHQubG9ja1JlZi5jdXJyZW50KSl9LFtdKSxmPWgudXNlQ2FsbGJhY2soZnVuY3Rpb24obSl7YyhtLnR5cGUsVHUobSksbS50YXJnZXQscyhtLHQubG9ja1JlZi5jdXJyZW50KSl9LFtdKTtoLnVzZUVmZmVjdChmdW5jdGlvbigpe3JldHVybiBUbC5wdXNoKG8pLHQuc2V0Q2FsbGJhY2tzKHtvblNjcm9sbENhcHR1cmU6ZCxvbldoZWVsQ2FwdHVyZTpkLG9uVG91Y2hNb3ZlQ2FwdHVyZTpmfSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsJGwpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSwkbCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdSwkbCksZnVuY3Rpb24oKXtUbD1UbC5maWx0ZXIoZnVuY3Rpb24obSl7cmV0dXJuIG0hPT1vfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEsJGwpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsYSwkbCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdSwkbCl9fSxbXSk7dmFyIHA9dC5yZW1vdmVTY3JvbGxCYXIsZz10LmluZXJ0O3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoaC5GcmFnbWVudCxudWxsLGc/aC5jcmVhdGVFbGVtZW50KG8se3N0eWxlczpIMyhpKX0pOm51bGwscD9oLmNyZWF0ZUVsZW1lbnQoTDMse2dhcE1vZGU6Im1hcmdpbiJ9KTpudWxsKX1jb25zdCBaMz1FMyhrYixLMyk7dmFyIE9iPWguZm9yd2FyZFJlZihmdW5jdGlvbih0LGUpe3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoSmYsRHIoe30sdCx7cmVmOmUsc2lkZUNhcjpaM30pKX0pO09iLmNsYXNzTmFtZXM9SmYuY2xhc3NOYW1lcztjb25zdCBHMz1PYixZMz1bIiAiLCJFbnRlciIsIkFycm93VXAiLCJBcnJvd0Rvd24iXSxYMz1bIiAiLCJFbnRlciJdLFFmPSJTZWxlY3QiLFtxZixpeSxKM109VkMoUWYpLFtVcyxGSV09Y2woUWYsW0ozLHliXSksb3k9eWIoKSxbUTMsaGxdPVVzKFFmKSxbcTMsZUxdPVVzKFFmKSx0TD10PT57Y29uc3R7X19zY29wZVNlbGVjdDplLGNoaWxkcmVuOm4sb3BlbjpyLGRlZmF1bHRPcGVuOmksb25PcGVuQ2hhbmdlOm8sdmFsdWU6bCxkZWZhdWx0VmFsdWU6cyxvblZhbHVlQ2hhbmdlOmEsZGlyOmMsbmFtZTp1LGF1dG9Db21wbGV0ZTpkLGRpc2FibGVkOmYscmVxdWlyZWQ6cH09dCxnPW95KGUpLFttLHddPWgudXNlU3RhdGUobnVsbCksW3YseF09aC51c2VTdGF0ZShudWxsKSxbXyxTXT1oLnVzZVN0YXRlKCExKSxFPW92KGMpLFtrPSExLENdPV9zKHtwcm9wOnIsZGVmYXVsdFByb3A6aSxvbkNoYW5nZTpvfSksW04sQV09X3Moe3Byb3A6bCxkZWZhdWx0UHJvcDpzLG9uQ2hhbmdlOmF9KSxUPWgudXNlUmVmKG51bGwpLEQ9bT8hIW0uY2xvc2VzdCgiZm9ybSIpOiEwLFtMLEtdPWgudXNlU3RhdGUobmV3IFNldCksQj1BcnJheS5mcm9tKEwpLm1hcChaPT5aLnByb3BzLnZhbHVlKS5qb2luKCI7Iik7cmV0dXJuIGguY3JlYXRlRWxlbWVudChvMyxnLGguY3JlYXRlRWxlbWVudChRMyx7cmVxdWlyZWQ6cCxzY29wZTplLHRyaWdnZXI6bSxvblRyaWdnZXJDaGFuZ2U6dyx2YWx1ZU5vZGU6dixvblZhbHVlTm9kZUNoYW5nZTp4LHZhbHVlTm9kZUhhc0NoaWxkcmVuOl8sb25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTpTLGNvbnRlbnRJZDpLZigpLHZhbHVlOk4sb25WYWx1ZUNoYW5nZTpBLG9wZW46ayxvbk9wZW5DaGFuZ2U6QyxkaXI6RSx0cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWY6VCxkaXNhYmxlZDpmfSxoLmNyZWF0ZUVsZW1lbnQocWYuUHJvdmlkZXIse3Njb3BlOmV9LGguY3JlYXRlRWxlbWVudChxMyx7c2NvcGU6dC5fX3Njb3BlU2VsZWN0LG9uTmF0aXZlT3B0aW9uQWRkOmgudXNlQ2FsbGJhY2soWj0+e0soUj0+bmV3IFNldChSKS5hZGQoWikpfSxbXSksb25OYXRpdmVPcHRpb25SZW1vdmU6aC51c2VDYWxsYmFjayhaPT57SyhSPT57Y29uc3QgUD1uZXcgU2V0KFIpO3JldHVybiBQLmRlbGV0ZShaKSxQfSl9LFtdKX0sbikpLEQ/aC5jcmVhdGVFbGVtZW50KExiLHtrZXk6QiwiYXJpYS1oaWRkZW4iOiEwLHJlcXVpcmVkOnAsdGFiSW5kZXg6LTEsbmFtZTp1LGF1dG9Db21wbGV0ZTpkLHZhbHVlOk4sb25DaGFuZ2U6Wj0+QShaLnRhcmdldC52YWx1ZSksZGlzYWJsZWQ6Zn0sTj09PXZvaWQgMD9oLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIse3ZhbHVlOiIifSk6bnVsbCxBcnJheS5mcm9tKEwpKTpudWxsKSl9LG5MPSJTZWxlY3RUcmlnZ2VyIixyTD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sZGlzYWJsZWQ6cj0hMSwuLi5pfT10LG89b3kobiksbD1obChuTCxuKSxzPWwuZGlzYWJsZWR8fHIsYT1zdChlLGwub25UcmlnZ2VyQ2hhbmdlKSxjPWl5KG4pLFt1LGQsZl09RGIoZz0+e2NvbnN0IG09YygpLmZpbHRlcih4PT4heC5kaXNhYmxlZCksdz1tLmZpbmQoeD0+eC52YWx1ZT09PWwudmFsdWUpLHY9SWIobSxnLHcpO3YhPT12b2lkIDAmJmwub25WYWx1ZUNoYW5nZSh2LnZhbHVlKX0pLHA9KCk9PntzfHwobC5vbk9wZW5DaGFuZ2UoITApLGYoKSl9O3JldHVybiBoLmNyZWF0ZUVsZW1lbnQobDMsb2Uoe2FzQ2hpbGQ6ITB9LG8pLGguY3JlYXRlRWxlbWVudChLZS5idXR0b24sb2Uoe3R5cGU6ImJ1dHRvbiIscm9sZToiY29tYm9ib3giLCJhcmlhLWNvbnRyb2xzIjpsLmNvbnRlbnRJZCwiYXJpYS1leHBhbmRlZCI6bC5vcGVuLCJhcmlhLXJlcXVpcmVkIjpsLnJlcXVpcmVkLCJhcmlhLWF1dG9jb21wbGV0ZSI6Im5vbmUiLGRpcjpsLmRpciwiZGF0YS1zdGF0ZSI6bC5vcGVuPyJvcGVuIjoiY2xvc2VkIixkaXNhYmxlZDpzLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCwiZGF0YS1wbGFjZWhvbGRlciI6TWIobC52YWx1ZSk/IiI6dm9pZCAwfSxpLHtyZWY6YSxvbkNsaWNrOm50KGkub25DbGljayxnPT57Zy5jdXJyZW50VGFyZ2V0LmZvY3VzKCl9KSxvblBvaW50ZXJEb3duOm50KGkub25Qb2ludGVyRG93bixnPT57Y29uc3QgbT1nLnRhcmdldDttLmhhc1BvaW50ZXJDYXB0dXJlKGcucG9pbnRlcklkKSYmbS5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZy5wb2ludGVySWQpLGcuYnV0dG9uPT09MCYmZy5jdHJsS2V5PT09ITEmJihwKCksbC50cmlnZ2VyUG9pbnRlckRvd25Qb3NSZWYuY3VycmVudD17eDpNYXRoLnJvdW5kKGcucGFnZVgpLHk6TWF0aC5yb3VuZChnLnBhZ2VZKX0sZy5wcmV2ZW50RGVmYXVsdCgpKX0pLG9uS2V5RG93bjpudChpLm9uS2V5RG93bixnPT57Y29uc3QgbT11LmN1cnJlbnQhPT0iIjshKGcuY3RybEtleXx8Zy5hbHRLZXl8fGcubWV0YUtleSkmJmcua2V5Lmxlbmd0aD09PTEmJmQoZy5rZXkpLCEobSYmZy5rZXk9PT0iICIpJiZZMy5pbmNsdWRlcyhnLmtleSkmJihwKCksZy5wcmV2ZW50RGVmYXVsdCgpKX0pfSkpKX0pLGlMPSJTZWxlY3RWYWx1ZSIsb0w9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNsYXNzTmFtZTpyLHN0eWxlOmksY2hpbGRyZW46byxwbGFjZWhvbGRlcjpsPSIiLC4uLnN9PXQsYT1obChpTCxuKSx7b25WYWx1ZU5vZGVIYXNDaGlsZHJlbkNoYW5nZTpjfT1hLHU9byE9PXZvaWQgMCxkPXN0KGUsYS5vblZhbHVlTm9kZUNoYW5nZSk7cmV0dXJuIEhuKCgpPT57Yyh1KX0sW2MsdV0pLGguY3JlYXRlRWxlbWVudChLZS5zcGFuLG9lKHt9LHMse3JlZjpkLHN0eWxlOntwb2ludGVyRXZlbnRzOiJub25lIn19KSxNYihhLnZhbHVlKT9oLmNyZWF0ZUVsZW1lbnQoaC5GcmFnbWVudCxudWxsLGwpOm8pfSksbEw9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLGNoaWxkcmVuOnIsLi4uaX09dDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2UoeyJhcmlhLWhpZGRlbiI6ITB9LGkse3JlZjplfSkscnx8IuKWvCIpfSksc0w9dD0+aC5jcmVhdGVFbGVtZW50KGEzLG9lKHthc0NoaWxkOiEwfSx0KSksU3M9IlNlbGVjdENvbnRlbnQiLGFMPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0IG49aGwoU3MsdC5fX3Njb3BlU2VsZWN0KSxbcixpXT1oLnVzZVN0YXRlKCk7aWYoSG4oKCk9PntpKG5ldyBEb2N1bWVudEZyYWdtZW50KX0sW10pLCFuLm9wZW4pe2NvbnN0IG89cjtyZXR1cm4gbz9Zci5jcmVhdGVQb3J0YWwoaC5jcmVhdGVFbGVtZW50KFBiLHtzY29wZTp0Ll9fc2NvcGVTZWxlY3R9LGguY3JlYXRlRWxlbWVudChxZi5TbG90LHtzY29wZTp0Ll9fc2NvcGVTZWxlY3R9LGguY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLHQuY2hpbGRyZW4pKSksbyk6bnVsbH1yZXR1cm4gaC5jcmVhdGVFbGVtZW50KGNMLG9lKHt9LHQse3JlZjplfSkpfSksaWk9MTAsW1BiLGVwXT1VcyhTcyksY0w9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLHBvc2l0aW9uOnI9Iml0ZW0tYWxpZ25lZCIsb25DbG9zZUF1dG9Gb2N1czppLG9uRXNjYXBlS2V5RG93bjpvLG9uUG9pbnRlckRvd25PdXRzaWRlOmwsc2lkZTpzLHNpZGVPZmZzZXQ6YSxhbGlnbjpjLGFsaWduT2Zmc2V0OnUsYXJyb3dQYWRkaW5nOmQsY29sbGlzaW9uQm91bmRhcnk6Zixjb2xsaXNpb25QYWRkaW5nOnAsc3RpY2t5OmcsaGlkZVdoZW5EZXRhY2hlZDptLGF2b2lkQ29sbGlzaW9uczp3LC4uLnZ9PXQseD1obChTcyxuKSxbXyxTXT1oLnVzZVN0YXRlKG51bGwpLFtFLGtdPWgudXNlU3RhdGUobnVsbCksQz1zdChlLG5lPT5TKG5lKSksW04sQV09aC51c2VTdGF0ZShudWxsKSxbVCxEXT1oLnVzZVN0YXRlKG51bGwpLEw9aXkobiksW0ssQl09aC51c2VTdGF0ZSghMSksWj1oLnVzZVJlZighMSk7aC51c2VFZmZlY3QoKCk9PntpZihfKXJldHVybiBwMyhfKX0sW19dKSxsNSgpO2NvbnN0IFI9aC51c2VDYWxsYmFjayhuZT0+e2NvbnN0W0llLC4uLiRlXT1MKCkubWFwKExlPT5MZS5yZWYuY3VycmVudCksW1JlXT0kZS5zbGljZSgtMSksU2U9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtmb3IoY29uc3QgTGUgb2YgbmUpaWYoTGU9PT1TZXx8KExlPT1udWxsfHxMZS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QifSksTGU9PT1JZSYmRSYmKEUuc2Nyb2xsVG9wPTApLExlPT09UmUmJkUmJihFLnNjcm9sbFRvcD1FLnNjcm9sbEhlaWdodCksTGU9PW51bGx8fExlLmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PVNlKSlyZXR1cm59LFtMLEVdKSxQPWgudXNlQ2FsbGJhY2soKCk9PlIoW04sX10pLFtSLE4sX10pO2gudXNlRWZmZWN0KCgpPT57SyYmUCgpfSxbSyxQXSk7Y29uc3R7b25PcGVuQ2hhbmdlOmIsdHJpZ2dlclBvaW50ZXJEb3duUG9zUmVmOmp9PXg7aC51c2VFZmZlY3QoKCk9PntpZihfKXtsZXQgbmU9e3g6MCx5OjB9O2NvbnN0IEllPVJlPT57dmFyIFNlLExlLEplLFd0O25lPXt4Ok1hdGguYWJzKE1hdGgucm91bmQoUmUucGFnZVgpLSgoU2U9KExlPWouY3VycmVudCk9PT1udWxsfHxMZT09PXZvaWQgMD92b2lkIDA6TGUueCkhPT1udWxsJiZTZSE9PXZvaWQgMD9TZTowKSkseTpNYXRoLmFicyhNYXRoLnJvdW5kKFJlLnBhZ2VZKS0oKEplPShXdD1qLmN1cnJlbnQpPT09bnVsbHx8V3Q9PT12b2lkIDA/dm9pZCAwOld0LnkpIT09bnVsbCYmSmUhPT12b2lkIDA/SmU6MCkpfX0sJGU9UmU9PntuZS54PD0xMCYmbmUueTw9MTA/UmUucHJldmVudERlZmF1bHQoKTpfLmNvbnRhaW5zKFJlLnRhcmdldCl8fGIoITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJtb3ZlIixJZSksai5jdXJyZW50PW51bGx9O3JldHVybiBqLmN1cnJlbnQhPT1udWxsJiYoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLEllKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCRlLHtjYXB0dXJlOiEwLG9uY2U6ITB9KSksKCk9Pntkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsSWUpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsJGUse2NhcHR1cmU6ITB9KX19fSxbXyxiLGpdKSxoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IG5lPSgpPT5iKCExKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLG5lKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIixuZSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsbmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLG5lKX19LFtiXSk7Y29uc3RbeixHXT1EYihuZT0+e2NvbnN0IEllPUwoKS5maWx0ZXIoU2U9PiFTZS5kaXNhYmxlZCksJGU9SWUuZmluZChTZT0+U2UucmVmLmN1cnJlbnQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KSxSZT1JYihJZSxuZSwkZSk7UmUmJnNldFRpbWVvdXQoKCk9PlJlLnJlZi5jdXJyZW50LmZvY3VzKCkpfSkscmU9aC51c2VDYWxsYmFjaygobmUsSWUsJGUpPT57Y29uc3QgUmU9IVouY3VycmVudCYmISRlOyh4LnZhbHVlIT09dm9pZCAwJiZ4LnZhbHVlPT09SWV8fFJlKSYmKEEobmUpLFJlJiYoWi5jdXJyZW50PSEwKSl9LFt4LnZhbHVlXSksYmU9aC51c2VDYWxsYmFjaygoKT0+Xz09bnVsbD92b2lkIDA6Xy5mb2N1cygpLFtfXSkseWU9aC51c2VDYWxsYmFjaygobmUsSWUsJGUpPT57Y29uc3QgUmU9IVouY3VycmVudCYmISRlOyh4LnZhbHVlIT09dm9pZCAwJiZ4LnZhbHVlPT09SWV8fFJlKSYmRChuZSl9LFt4LnZhbHVlXSksV2U9cj09PSJwb3BwZXIiP3UxOnVMLEZlPVdlPT09dTE/e3NpZGU6cyxzaWRlT2Zmc2V0OmEsYWxpZ246YyxhbGlnbk9mZnNldDp1LGFycm93UGFkZGluZzpkLGNvbGxpc2lvbkJvdW5kYXJ5OmYsY29sbGlzaW9uUGFkZGluZzpwLHN0aWNreTpnLGhpZGVXaGVuRGV0YWNoZWQ6bSxhdm9pZENvbGxpc2lvbnM6d306e307cmV0dXJuIGguY3JlYXRlRWxlbWVudChQYix7c2NvcGU6bixjb250ZW50Ol8sdmlld3BvcnQ6RSxvblZpZXdwb3J0Q2hhbmdlOmssaXRlbVJlZkNhbGxiYWNrOnJlLHNlbGVjdGVkSXRlbTpOLG9uSXRlbUxlYXZlOmJlLGl0ZW1UZXh0UmVmQ2FsbGJhY2s6eWUsZm9jdXNTZWxlY3RlZEl0ZW06UCxzZWxlY3RlZEl0ZW1UZXh0OlQscG9zaXRpb246cixpc1Bvc2l0aW9uZWQ6SyxzZWFyY2hSZWY6en0saC5jcmVhdGVFbGVtZW50KEczLHthczpocyxhbGxvd1BpbmNoWm9vbTohMH0saC5jcmVhdGVFbGVtZW50KHM1LHthc0NoaWxkOiEwLHRyYXBwZWQ6eC5vcGVuLG9uTW91bnRBdXRvRm9jdXM6bmU9PntuZS5wcmV2ZW50RGVmYXVsdCgpfSxvblVubW91bnRBdXRvRm9jdXM6bnQoaSxuZT0+e3ZhciBJZTsoSWU9eC50cmlnZ2VyKT09PW51bGx8fEllPT09dm9pZCAwfHxJZS5mb2N1cyh7cHJldmVudFNjcm9sbDohMH0pLG5lLnByZXZlbnREZWZhdWx0KCl9KX0saC5jcmVhdGVFbGVtZW50KHI1LHthc0NoaWxkOiEwLGRpc2FibGVPdXRzaWRlUG9pbnRlckV2ZW50czohMCxvbkVzY2FwZUtleURvd246byxvblBvaW50ZXJEb3duT3V0c2lkZTpsLG9uRm9jdXNPdXRzaWRlOm5lPT5uZS5wcmV2ZW50RGVmYXVsdCgpLG9uRGlzbWlzczooKT0+eC5vbk9wZW5DaGFuZ2UoITEpfSxoLmNyZWF0ZUVsZW1lbnQoV2Usb2Uoe3JvbGU6Imxpc3Rib3giLGlkOnguY29udGVudElkLCJkYXRhLXN0YXRlIjp4Lm9wZW4/Im9wZW4iOiJjbG9zZWQiLGRpcjp4LmRpcixvbkNvbnRleHRNZW51Om5lPT5uZS5wcmV2ZW50RGVmYXVsdCgpfSx2LEZlLHtvblBsYWNlZDooKT0+QighMCkscmVmOkMsc3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsb3V0bGluZToibm9uZSIsLi4udi5zdHlsZX0sb25LZXlEb3duOm50KHYub25LZXlEb3duLG5lPT57Y29uc3QgSWU9bmUuY3RybEtleXx8bmUuYWx0S2V5fHxuZS5tZXRhS2V5O2lmKG5lLmtleT09PSJUYWIiJiZuZS5wcmV2ZW50RGVmYXVsdCgpLCFJZSYmbmUua2V5Lmxlbmd0aD09PTEmJkcobmUua2V5KSxbIkFycm93VXAiLCJBcnJvd0Rvd24iLCJIb21lIiwiRW5kIl0uaW5jbHVkZXMobmUua2V5KSl7bGV0IFJlPUwoKS5maWx0ZXIoU2U9PiFTZS5kaXNhYmxlZCkubWFwKFNlPT5TZS5yZWYuY3VycmVudCk7aWYoWyJBcnJvd1VwIiwiRW5kIl0uaW5jbHVkZXMobmUua2V5KSYmKFJlPVJlLnNsaWNlKCkucmV2ZXJzZSgpKSxbIkFycm93VXAiLCJBcnJvd0Rvd24iXS5pbmNsdWRlcyhuZS5rZXkpKXtjb25zdCBTZT1uZS50YXJnZXQsTGU9UmUuaW5kZXhPZihTZSk7UmU9UmUuc2xpY2UoTGUrMSl9c2V0VGltZW91dCgoKT0+UihSZSkpLG5lLnByZXZlbnREZWZhdWx0KCl9fSl9KSkpKSkpfSksdUw9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLG9uUGxhY2VkOnIsLi4uaX09dCxvPWhsKFNzLG4pLGw9ZXAoU3MsbiksW3MsYV09aC51c2VTdGF0ZShudWxsKSxbYyx1XT1oLnVzZVN0YXRlKG51bGwpLGQ9c3QoZSxDPT51KEMpKSxmPWl5KG4pLHA9aC51c2VSZWYoITEpLGc9aC51c2VSZWYoITApLHt2aWV3cG9ydDptLHNlbGVjdGVkSXRlbTp3LHNlbGVjdGVkSXRlbVRleHQ6dixmb2N1c1NlbGVjdGVkSXRlbTp4fT1sLF89aC51c2VDYWxsYmFjaygoKT0+e2lmKG8udHJpZ2dlciYmby52YWx1ZU5vZGUmJnMmJmMmJm0mJncmJnYpe2NvbnN0IEM9by50cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLE49Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxBPW8udmFsdWVOb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFQ9di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZihvLmRpciE9PSJydGwiKXtjb25zdCBTZT1ULmxlZnQtTi5sZWZ0LExlPUEubGVmdC1TZSxKZT1DLmxlZnQtTGUsV3Q9Qy53aWR0aCtKZSxDbj1NYXRoLm1heChXdCxOLndpZHRoKSx1cj13aW5kb3cuaW5uZXJXaWR0aC1paSxqZT1ybShMZSxbaWksdXItQ25dKTtzLnN0eWxlLm1pbldpZHRoPVd0KyJweCIscy5zdHlsZS5sZWZ0PWplKyJweCJ9ZWxzZXtjb25zdCBTZT1OLnJpZ2h0LVQucmlnaHQsTGU9d2luZG93LmlubmVyV2lkdGgtQS5yaWdodC1TZSxKZT13aW5kb3cuaW5uZXJXaWR0aC1DLnJpZ2h0LUxlLFd0PUMud2lkdGgrSmUsQ249TWF0aC5tYXgoV3QsTi53aWR0aCksdXI9d2luZG93LmlubmVyV2lkdGgtaWksamU9cm0oTGUsW2lpLHVyLUNuXSk7cy5zdHlsZS5taW5XaWR0aD1XdCsicHgiLHMuc3R5bGUucmlnaHQ9amUrInB4In1jb25zdCBEPWYoKSxMPXdpbmRvdy5pbm5lckhlaWdodC1paSoyLEs9bS5zY3JvbGxIZWlnaHQsQj13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKSxaPXBhcnNlSW50KEIuYm9yZGVyVG9wV2lkdGgsMTApLFI9cGFyc2VJbnQoQi5wYWRkaW5nVG9wLDEwKSxQPXBhcnNlSW50KEIuYm9yZGVyQm90dG9tV2lkdGgsMTApLGI9cGFyc2VJbnQoQi5wYWRkaW5nQm90dG9tLDEwKSxqPVorUitLK2IrUCx6PU1hdGgubWluKHcub2Zmc2V0SGVpZ2h0KjUsaiksRz13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShtKSxyZT1wYXJzZUludChHLnBhZGRpbmdUb3AsMTApLGJlPXBhcnNlSW50KEcucGFkZGluZ0JvdHRvbSwxMCkseWU9Qy50b3ArQy5oZWlnaHQvMi1paSxXZT1MLXllLEZlPXcub2Zmc2V0SGVpZ2h0LzIsbmU9dy5vZmZzZXRUb3ArRmUsSWU9WitSK25lLCRlPWotSWU7aWYoSWU8PXllKXtjb25zdCBTZT13PT09RFtELmxlbmd0aC0xXS5yZWYuY3VycmVudDtzLnN0eWxlLmJvdHRvbT0iMHB4Ijtjb25zdCBMZT1jLmNsaWVudEhlaWdodC1tLm9mZnNldFRvcC1tLm9mZnNldEhlaWdodCxKZT1NYXRoLm1heChXZSxGZSsoU2U/YmU6MCkrTGUrUCksV3Q9SWUrSmU7cy5zdHlsZS5oZWlnaHQ9V3QrInB4In1lbHNle2NvbnN0IFNlPXc9PT1EWzBdLnJlZi5jdXJyZW50O3Muc3R5bGUudG9wPSIwcHgiO2NvbnN0IEplPU1hdGgubWF4KHllLForbS5vZmZzZXRUb3ArKFNlP3JlOjApK0ZlKSskZTtzLnN0eWxlLmhlaWdodD1KZSsicHgiLG0uc2Nyb2xsVG9wPUllLXllK20ub2Zmc2V0VG9wfXMuc3R5bGUubWFyZ2luPWAke2lpfXB4IDBgLHMuc3R5bGUubWluSGVpZ2h0PXorInB4IixzLnN0eWxlLm1heEhlaWdodD1MKyJweCIscj09bnVsbHx8cigpLHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+cC5jdXJyZW50PSEwKX19LFtmLG8udHJpZ2dlcixvLnZhbHVlTm9kZSxzLGMsbSx3LHYsby5kaXIscl0pO0huKCgpPT5fKCksW19dKTtjb25zdFtTLEVdPWgudXNlU3RhdGUoKTtIbigoKT0+e2MmJkUod2luZG93LmdldENvbXB1dGVkU3R5bGUoYykuekluZGV4KX0sW2NdKTtjb25zdCBrPWgudXNlQ2FsbGJhY2soQz0+e0MmJmcuY3VycmVudD09PSEwJiYoXygpLHg9PW51bGx8fHgoKSxnLmN1cnJlbnQ9ITEpfSxbXyx4XSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChkTCx7c2NvcGU6bixjb250ZW50V3JhcHBlcjpzLHNob3VsZEV4cGFuZE9uU2Nyb2xsUmVmOnAsb25TY3JvbGxCdXR0b25DaGFuZ2U6a30saC5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6YSxzdHlsZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixwb3NpdGlvbjoiZml4ZWQiLHpJbmRleDpTfX0saC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7fSxpLHtyZWY6ZCxzdHlsZTp7Ym94U2l6aW5nOiJib3JkZXItYm94IixtYXhIZWlnaHQ6IjEwMCUiLC4uLmkuc3R5bGV9fSkpKSl9KSx1MT1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sYWxpZ246cj0ic3RhcnQiLGNvbGxpc2lvblBhZGRpbmc6aT1paSwuLi5vfT10LGw9b3kobik7cmV0dXJuIGguY3JlYXRlRWxlbWVudChzMyxvZSh7fSxsLG8se3JlZjplLGFsaWduOnIsY29sbGlzaW9uUGFkZGluZzppLHN0eWxlOntib3hTaXppbmc6ImJvcmRlci1ib3giLC4uLm8uc3R5bGUsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtdHJhbnNmb3JtLW9yaWdpbiI6InZhcigtLXJhZGl4LXBvcHBlci10cmFuc2Zvcm0tb3JpZ2luKSIsIi0tcmFkaXgtc2VsZWN0LWNvbnRlbnQtYXZhaWxhYmxlLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWF2YWlsYWJsZS13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC1jb250ZW50LWF2YWlsYWJsZS1oZWlnaHQiOiJ2YXIoLS1yYWRpeC1wb3BwZXItYXZhaWxhYmxlLWhlaWdodCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLXdpZHRoIjoidmFyKC0tcmFkaXgtcG9wcGVyLWFuY2hvci13aWR0aCkiLCItLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCI6InZhcigtLXJhZGl4LXBvcHBlci1hbmNob3ItaGVpZ2h0KSJ9fSkpfSksW2RMLGZMXT1VcyhTcyx7fSksZDE9IlNlbGVjdFZpZXdwb3J0IixwTD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09dCxpPWVwKGQxLG4pLG89ZkwoZDEsbiksbD1zdChlLGkub25WaWV3cG9ydENoYW5nZSkscz1oLnVzZVJlZigwKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxoLmNyZWF0ZUVsZW1lbnQoInN0eWxlIix7ZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDoiW2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XXtzY3JvbGxiYXItd2lkdGg6bm9uZTstbXMtb3ZlcmZsb3ctc3R5bGU6bm9uZTstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDt9W2RhdGEtcmFkaXgtc2VsZWN0LXZpZXdwb3J0XTo6LXdlYmtpdC1zY3JvbGxiYXJ7ZGlzcGxheTpub25lfSJ9fSksaC5jcmVhdGVFbGVtZW50KHFmLlNsb3Qse3Njb3BlOm59LGguY3JlYXRlRWxlbWVudChLZS5kaXYsb2UoeyJkYXRhLXJhZGl4LXNlbGVjdC12aWV3cG9ydCI6IiIscm9sZToicHJlc2VudGF0aW9uIn0scix7cmVmOmwsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG92ZXJmbG93OiJhdXRvIiwuLi5yLnN0eWxlfSxvblNjcm9sbDpudChyLm9uU2Nyb2xsLGE9Pntjb25zdCBjPWEuY3VycmVudFRhcmdldCx7Y29udGVudFdyYXBwZXI6dSxzaG91bGRFeHBhbmRPblNjcm9sbFJlZjpkfT1vO2lmKGQhPW51bGwmJmQuY3VycmVudCYmdSl7Y29uc3QgZj1NYXRoLmFicyhzLmN1cnJlbnQtYy5zY3JvbGxUb3ApO2lmKGY+MCl7Y29uc3QgcD13aW5kb3cuaW5uZXJIZWlnaHQtaWkqMixnPXBhcnNlRmxvYXQodS5zdHlsZS5taW5IZWlnaHQpLG09cGFyc2VGbG9hdCh1LnN0eWxlLmhlaWdodCksdz1NYXRoLm1heChnLG0pO2lmKHc8cCl7Y29uc3Qgdj13K2YseD1NYXRoLm1pbihwLHYpLF89di14O3Uuc3R5bGUuaGVpZ2h0PXgrInB4Iix1LnN0eWxlLmJvdHRvbT09PSIwcHgiJiYoYy5zY3JvbGxUb3A9Xz4wP186MCx1LnN0eWxlLmp1c3RpZnlDb250ZW50PSJmbGV4LWVuZCIpfX19cy5jdXJyZW50PWMuc2Nyb2xsVG9wfSl9KSkpKX0pLGhMPSJTZWxlY3RHcm91cCIsW0JJLG1MXT1VcyhoTCksZ0w9IlNlbGVjdExhYmVsIix2TD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09dCxpPW1MKGdMLG4pO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoS2UuZGl2LG9lKHtpZDppLmlkfSxyLHtyZWY6ZX0pKX0pLG5nPSJTZWxlY3RJdGVtIixbeUwsQWJdPVVzKG5nKSx4TD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sdmFsdWU6cixkaXNhYmxlZDppPSExLHRleHRWYWx1ZTpvLC4uLmx9PXQscz1obChuZyxuKSxhPWVwKG5nLG4pLGM9cy52YWx1ZT09PXIsW3UsZF09aC51c2VTdGF0ZShvPz8iIiksW2YscF09aC51c2VTdGF0ZSghMSksZz1zdChlLHY9Pnt2YXIgeDtyZXR1cm4oeD1hLml0ZW1SZWZDYWxsYmFjayk9PT1udWxsfHx4PT09dm9pZCAwP3ZvaWQgMDp4LmNhbGwoYSx2LHIsaSl9KSxtPUtmKCksdz0oKT0+e2l8fChzLm9uVmFsdWVDaGFuZ2Uocikscy5vbk9wZW5DaGFuZ2UoITEpKX07aWYocj09PSIiKXRocm93IG5ldyBFcnJvcigiQSA8U2VsZWN0Lkl0ZW0gLz4gbXVzdCBoYXZlIGEgdmFsdWUgcHJvcCB0aGF0IGlzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgaXMgYmVjYXVzZSB0aGUgU2VsZWN0IHZhbHVlIGNhbiBiZSBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBzZWxlY3Rpb24gYW5kIHNob3cgdGhlIHBsYWNlaG9sZGVyLiIpO3JldHVybiBoLmNyZWF0ZUVsZW1lbnQoeUwse3Njb3BlOm4sdmFsdWU6cixkaXNhYmxlZDppLHRleHRJZDptLGlzU2VsZWN0ZWQ6Yyxvbkl0ZW1UZXh0Q2hhbmdlOmgudXNlQ2FsbGJhY2sodj0+e2QoeD0+e3ZhciBfO3JldHVybiB4fHwoKF89dj09bnVsbD92b2lkIDA6di50ZXh0Q29udGVudCkhPT1udWxsJiZfIT09dm9pZCAwP186IiIpLnRyaW0oKX0pfSxbXSl9LGguY3JlYXRlRWxlbWVudChxZi5JdGVtU2xvdCx7c2NvcGU6bix2YWx1ZTpyLGRpc2FibGVkOmksdGV4dFZhbHVlOnV9LGguY3JlYXRlRWxlbWVudChLZS5kaXYsb2Uoe3JvbGU6Im9wdGlvbiIsImFyaWEtbGFiZWxsZWRieSI6bSwiZGF0YS1oaWdobGlnaHRlZCI6Zj8iIjp2b2lkIDAsImFyaWEtc2VsZWN0ZWQiOmMmJmYsImRhdGEtc3RhdGUiOmM/ImNoZWNrZWQiOiJ1bmNoZWNrZWQiLCJhcmlhLWRpc2FibGVkIjppfHx2b2lkIDAsImRhdGEtZGlzYWJsZWQiOmk/IiI6dm9pZCAwLHRhYkluZGV4Omk/dm9pZCAwOi0xfSxsLHtyZWY6ZyxvbkZvY3VzOm50KGwub25Gb2N1cywoKT0+cCghMCkpLG9uQmx1cjpudChsLm9uQmx1ciwoKT0+cCghMSkpLG9uUG9pbnRlclVwOm50KGwub25Qb2ludGVyVXAsdyksb25Qb2ludGVyTW92ZTpudChsLm9uUG9pbnRlck1vdmUsdj0+e2lmKGkpe3ZhciB4Oyh4PWEub25JdGVtTGVhdmUpPT09bnVsbHx8eD09PXZvaWQgMHx8eC5jYWxsKGEpfWVsc2Ugdi5jdXJyZW50VGFyZ2V0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9KSxvblBvaW50ZXJMZWF2ZTpudChsLm9uUG9pbnRlckxlYXZlLHY9PntpZih2LmN1cnJlbnRUYXJnZXQ9PT1kb2N1bWVudC5hY3RpdmVFbGVtZW50KXt2YXIgeDsoeD1hLm9uSXRlbUxlYXZlKT09PW51bGx8fHg9PT12b2lkIDB8fHguY2FsbChhKX19KSxvbktleURvd246bnQobC5vbktleURvd24sdj0+e3ZhciB4OygoeD1hLnNlYXJjaFJlZik9PT1udWxsfHx4PT09dm9pZCAwP3ZvaWQgMDp4LmN1cnJlbnQpIT09IiImJnYua2V5PT09IiAifHwoWDMuaW5jbHVkZXModi5rZXkpJiZ3KCksdi5rZXk9PT0iICImJnYucHJldmVudERlZmF1bHQoKSl9KX0pKSkpfSksTnU9IlNlbGVjdEl0ZW1UZXh0IixfTD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sY2xhc3NOYW1lOnIsc3R5bGU6aSwuLi5vfT10LGw9aGwoTnUsbikscz1lcChOdSxuKSxhPUFiKE51LG4pLGM9ZUwoTnUsbiksW3UsZF09aC51c2VTdGF0ZShudWxsKSxmPXN0KGUsdj0+ZCh2KSxhLm9uSXRlbVRleHRDaGFuZ2Usdj0+e3ZhciB4O3JldHVybih4PXMuaXRlbVRleHRSZWZDYWxsYmFjayk9PT1udWxsfHx4PT09dm9pZCAwP3ZvaWQgMDp4LmNhbGwocyx2LGEudmFsdWUsYS5kaXNhYmxlZCl9KSxwPXU9PW51bGw/dm9pZCAwOnUudGV4dENvbnRlbnQsZz1oLnVzZU1lbW8oKCk9PmguY3JlYXRlRWxlbWVudCgib3B0aW9uIix7a2V5OmEudmFsdWUsdmFsdWU6YS52YWx1ZSxkaXNhYmxlZDphLmRpc2FibGVkfSxwKSxbYS5kaXNhYmxlZCxhLnZhbHVlLHBdKSx7b25OYXRpdmVPcHRpb25BZGQ6bSxvbk5hdGl2ZU9wdGlvblJlbW92ZTp3fT1jO3JldHVybiBIbigoKT0+KG0oZyksKCk9PncoZykpLFttLHcsZ10pLGguY3JlYXRlRWxlbWVudChoLkZyYWdtZW50LG51bGwsaC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2Uoe2lkOmEudGV4dElkfSxvLHtyZWY6Zn0pKSxhLmlzU2VsZWN0ZWQmJmwudmFsdWVOb2RlJiYhbC52YWx1ZU5vZGVIYXNDaGlsZHJlbj9Zci5jcmVhdGVQb3J0YWwoby5jaGlsZHJlbixsLnZhbHVlTm9kZSk6bnVsbCl9KSx3TD0iU2VsZWN0SXRlbUluZGljYXRvciIsU0w9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVNlbGVjdDpuLC4uLnJ9PXQ7cmV0dXJuIEFiKHdMLG4pLmlzU2VsZWN0ZWQ/aC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2UoeyJhcmlhLWhpZGRlbiI6ITB9LHIse3JlZjplfSkpOm51bGx9KSxFTD1oLmZvcndhcmRSZWYoKHQsZSk9Pntjb25zdHtfX3Njb3BlU2VsZWN0Om4sLi4ucn09dDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEtlLmRpdixvZSh7ImFyaWEtaGlkZGVuIjohMH0scix7cmVmOmV9KSl9KTtmdW5jdGlvbiBNYih0KXtyZXR1cm4gdD09PSIifHx0PT09dm9pZCAwfWNvbnN0IExiPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e3ZhbHVlOm4sLi4ucn09dCxpPWgudXNlUmVmKG51bGwpLG89c3QoZSxpKSxsPVNiKG4pO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2NvbnN0IHM9aS5jdXJyZW50LGE9d2luZG93LkhUTUxTZWxlY3RFbGVtZW50LnByb3RvdHlwZSx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSwidmFsdWUiKS5zZXQ7aWYobCE9PW4mJnUpe2NvbnN0IGQ9bmV3IEV2ZW50KCJjaGFuZ2UiLHtidWJibGVzOiEwfSk7dS5jYWxsKHMsbikscy5kaXNwYXRjaEV2ZW50KGQpfX0sW2wsbl0pLGguY3JlYXRlRWxlbWVudChjMyx7YXNDaGlsZDohMH0saC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLG9lKHt9LHIse3JlZjpvLGRlZmF1bHRWYWx1ZTpufSkpKX0pO0xiLmRpc3BsYXlOYW1lPSJCdWJibGVTZWxlY3QiO2Z1bmN0aW9uIERiKHQpe2NvbnN0IGU9ZW4odCksbj1oLnVzZVJlZigiIikscj1oLnVzZVJlZigwKSxpPWgudXNlQ2FsbGJhY2sobD0+e2NvbnN0IHM9bi5jdXJyZW50K2w7ZShzKSxmdW5jdGlvbiBhKGMpe24uY3VycmVudD1jLHdpbmRvdy5jbGVhclRpbWVvdXQoci5jdXJyZW50KSxjIT09IiImJihyLmN1cnJlbnQ9d2luZG93LnNldFRpbWVvdXQoKCk9PmEoIiIpLDFlMykpfShzKX0sW2VdKSxvPWgudXNlQ2FsbGJhY2soKCk9PntuLmN1cnJlbnQ9IiIsd2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpfSxbXSk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT4oKT0+d2luZG93LmNsZWFyVGltZW91dChyLmN1cnJlbnQpLFtdKSxbbixpLG9dfWZ1bmN0aW9uIEliKHQsZSxuKXtjb25zdCBpPWUubGVuZ3RoPjEmJkFycmF5LmZyb20oZSkuZXZlcnkoYz0+Yz09PWVbMF0pP2VbMF06ZSxvPW4/dC5pbmRleE9mKG4pOi0xO2xldCBsPUNMKHQsTWF0aC5tYXgobywwKSk7aS5sZW5ndGg9PT0xJiYobD1sLmZpbHRlcihjPT5jIT09bikpO2NvbnN0IGE9bC5maW5kKGM9PmMudGV4dFZhbHVlLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gYSE9PW4/YTp2b2lkIDB9ZnVuY3Rpb24gQ0wodCxlKXtyZXR1cm4gdC5tYXAoKG4scik9PnRbKGUrcikldC5sZW5ndGhdKX1jb25zdCBiTD10TCxqYj1yTCxrTD1vTCwkTD1sTCxUTD1zTCx6Yj1hTCxOTD1wTCxGYj12TCxCYj14TCxSTD1fTCxPTD1TTCxVYj1FTCxXYj1iTCxIYj1rTCxseT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCxjaGlsZHJlbjplLC4uLm59LHIpPT55LmpzeHMoamIse3JlZjpyLGNsYXNzTmFtZTp4dCgiZmxleCBoLTEwIHctZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIHB4LTMgcHktMiB0ZXh0LXNtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgcGxhY2Vob2xkZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1yaW5nIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAiLHQpLC4uLm4sY2hpbGRyZW46W2UseS5qc3goJEwse2FzQ2hpbGQ6ITAsY2hpbGRyZW46eS5qc3goRWQse2NsYXNzTmFtZToidy00IGgtNCBvcGFjaXR5LTUwIn0pfSldfSkpO2x5LmRpc3BsYXlOYW1lPWpiLmRpc3BsYXlOYW1lO2NvbnN0IHN5PWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LGNoaWxkcmVuOmUscG9zaXRpb246bj0icG9wcGVyIiwuLi5yfSxpKT0+eS5qc3goVEwse2NoaWxkcmVuOnkuanN4KHpiLHtyZWY6aSxjbGFzc05hbWU6eHQoInJlbGF0aXZlIHotNTAgbWluLXctWzhyZW1dIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLW1kIGJvcmRlciBiZy1wb3BvdmVyIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHNoYWRvdy1tZCBkYXRhLVtzdGF0ZT1vcGVuXTphbmltYXRlLWluIGRhdGEtW3N0YXRlPWNsb3NlZF06YW5pbWF0ZS1vdXQgZGF0YS1bc3RhdGU9Y2xvc2VkXTpmYWRlLW91dC0wIGRhdGEtW3N0YXRlPW9wZW5dOmZhZGUtaW4tMCBkYXRhLVtzdGF0ZT1jbG9zZWRdOnpvb20tb3V0LTk1IGRhdGEtW3N0YXRlPW9wZW5dOnpvb20taW4tOTUgZGF0YS1bc2lkZT1ib3R0b21dOnNsaWRlLWluLWZyb20tdG9wLTIgZGF0YS1bc2lkZT1sZWZ0XTpzbGlkZS1pbi1mcm9tLXJpZ2h0LTIgZGF0YS1bc2lkZT1yaWdodF06c2xpZGUtaW4tZnJvbS1sZWZ0LTIgZGF0YS1bc2lkZT10b3BdOnNsaWRlLWluLWZyb20tYm90dG9tLTIiLG49PT0icG9wcGVyIiYmImRhdGEtW3NpZGU9Ym90dG9tXTp0cmFuc2xhdGUteS0xIGRhdGEtW3NpZGU9bGVmdF06LXRyYW5zbGF0ZS14LTEgZGF0YS1bc2lkZT1yaWdodF06dHJhbnNsYXRlLXgtMSBkYXRhLVtzaWRlPXRvcF06LXRyYW5zbGF0ZS15LTEiLHQpLHBvc2l0aW9uOm4sLi4ucixjaGlsZHJlbjp5LmpzeChOTCx7Y2xhc3NOYW1lOnh0KCJwLTEiLG49PT0icG9wcGVyIiYmImgtW3ZhcigtLXJhZGl4LXNlbGVjdC10cmlnZ2VyLWhlaWdodCldIHctZnVsbCBtaW4tdy1bdmFyKC0tcmFkaXgtc2VsZWN0LXRyaWdnZXItd2lkdGgpXSIpLGNoaWxkcmVuOmV9KX0pfSkpO3N5LmRpc3BsYXlOYW1lPXpiLmRpc3BsYXlOYW1lO2NvbnN0IFBMPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeChGYix7cmVmOm4sY2xhc3NOYW1lOnh0KCJweS0xLjUgcGwtOCBwci0yIHRleHQtc20gZm9udC1zZW1pYm9sZCIsdCksLi4uZX0pKTtQTC5kaXNwbGF5TmFtZT1GYi5kaXNwbGF5TmFtZTtjb25zdCBheT1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCxjaGlsZHJlbjplLC4uLm59LHIpPT55LmpzeHMoQmIse3JlZjpyLGNsYXNzTmFtZTp4dCgicmVsYXRpdmUgZmxleCB3LWZ1bGwgY3Vyc29yLWRlZmF1bHQgc2VsZWN0LW5vbmUgaXRlbXMtY2VudGVyIHJvdW5kZWQtc20gcHktMS41IHBsLTggcHItMiB0ZXh0LXNtIG91dGxpbmUtbm9uZSBmb2N1czpiZy1hY2NlbnQgZm9jdXM6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCBkYXRhLVtkaXNhYmxlZF06cG9pbnRlci1ldmVudHMtbm9uZSBkYXRhLVtkaXNhYmxlZF06b3BhY2l0eS01MCIsdCksLi4ubixjaGlsZHJlbjpbeS5qc3goInNwYW4iLHtjbGFzc05hbWU6ImFic29sdXRlIGxlZnQtMiBmbGV4IGgtMy41IHctMy41IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciIsY2hpbGRyZW46eS5qc3goT0wse2NoaWxkcmVuOnkuanN4KGRSLHtjbGFzc05hbWU6InctNCBoLTQifSl9KX0pLHkuanN4KFJMLHtjaGlsZHJlbjplfSldfSkpO2F5LmRpc3BsYXlOYW1lPUJiLmRpc3BsYXlOYW1lO2NvbnN0IEFMPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeChVYix7cmVmOm4sY2xhc3NOYW1lOnh0KCItbXgtMSBteS0xIGgtcHggYmctbXV0ZWQiLHQpLC4uLmV9KSk7QUwuZGlzcGxheU5hbWU9VWIuZGlzcGxheU5hbWU7ZnVuY3Rpb24gVmIoe3BhdGg6dCxkaXNhYmxlZDplLHNvdXJjZTpuLHNjaGVtYTpyLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om99KXtyZXR1cm4odHlwZW9mIG49PSJzdHJpbmcifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09InN0cmluZyI/eS5qc3goekwse3BhdGg6dCxkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDplLHNjaGVtYTpyLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om99KToodHlwZW9mIG49PSJudW1iZXIifHxuPT09bnVsbCkmJihyPT1udWxsP3ZvaWQgMDpyLnR5cGUpPT09Im51bWJlciI/eS5qc3goaDEse2RlZmF1bHRWYWx1ZTpuLGRpc2FibGVkOmUscmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6b30pOih0eXBlb2Ygbj09Im51bWJlciJ8fHR5cGVvZiBuPT0ic3RyaW5nInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJrZXlPZiI/eS5qc3gocDEse2RlZmF1bHRWYWx1ZTpuLGRpc2FibGVkOmUscmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6byxzZWxlY3RvcjpyLnNlbGVjdG9yfSk6KHR5cGVvZiBuPT0ibnVtYmVyInx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJudW1iZXIiP3kuanN4KGgxLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDplLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om99KToodHlwZW9mIG49PSJudW1iZXIifHx0eXBlb2Ygbj09InN0cmluZyJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0ia2V5T2YiP3kuanN4KHAxLHtkZWZhdWx0VmFsdWU6bixkaXNhYmxlZDplLHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om8sc2VsZWN0b3I6ci5zZWxlY3Rvcn0pOih0eXBlb2Ygbj09Im9iamVjdCJ8fG49PT1udWxsKSYmKHI9PW51bGw/dm9pZCAwOnIudHlwZSk9PT0icmljaHRleHQiP3kuanN4KGpMLHtyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvLGRlZmF1bHRWYWx1ZTpufSk6KHR5cGVvZiBuPT0ib2JqZWN0Inx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJpbWFnZSI/eS5qc3goSUwse3BhdGg6dCxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6aSxvblN1Ym1pdDpvLGRlZmF1bHRWYWx1ZTpufSk6KHR5cGVvZiBuPT0ib2JqZWN0Inx8bj09PW51bGwpJiYocj09bnVsbD92b2lkIDA6ci50eXBlKT09PSJmaWxlIj95LmpzeChETCx7cGF0aDp0LHJlZ2lzdGVyUGF0Y2hDYWxsYmFjazppLG9uU3VibWl0Om8sZGVmYXVsdFZhbHVlOm59KTp5LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiVW5zdXBwb3J0ZWQgc2NoZW1hOiAiLHIudHlwZSwiIChzb3VyY2UgdHlwZTogIix0eXBlb2YgbiwiIHNvdXJjZToiLCIgIixKU09OLnN0cmluZ2lmeShuKSwiKSJdfSl9ZnVuY3Rpb24gb2YodCxlLG4scil7aWYoIWV8fCFyKXJldHVybltdO2NvbnN0IGk9ci5zaGEyNTYuc2xpY2UoMCw1KSxvPWZ1bmN0aW9uKCl7Y29uc3QgbD1GZihlKT8/InVua25vd24iLHM9QmYobCk/PyJ1bmtub3duIjtpZihuKXtsZXQgYT1uLnNwbGl0KCIuIikuc2xpY2UoMCwtMSkuam9pbigiLiIpfHxuO2NvbnN0IGM9YS5sYXN0SW5kZXhPZigiXyIpO3JldHVybiBhLnNsaWNlKGMrMSxhLmxlbmd0aCk9PT1pJiYoYT1hLnNsaWNlKDAsYykpLGAvcHVibGljLyR7YX1fJHtpfS4ke3N9YH1yZXR1cm5gL3B1YmxpYy8ke3Iuc2hhMjU2fS4ke3N9YH0oKTtyZXR1cm5be3ZhbHVlOntbUG5dOm8sW25uXToiZmlsZSIsbWV0YWRhdGE6cn0sb3A6InJlcGxhY2UiLHBhdGg6dH0se3ZhbHVlOmUsb3A6ImZpbGUiLHBhdGg6dCxmaWxlUGF0aDpvfV19ZnVuY3Rpb24gS2IodCxlKXtjb25zdCBuPXQrIi9tZXRhZGF0YSI7cmV0dXJuW3t2YWx1ZTplLG9wOiJyZXBsYWNlIixwYXRoOm59XX1jb25zdCBNTD1uZXcgVGV4dEVuY29kZXI7ZnVuY3Rpb24gTEwodCl7cmV0dXJuIG5ldyBQcm9taXNlKChlLG4pPT57dmFyIG87Y29uc3Qgcj0obz10LmN1cnJlbnRUYXJnZXQuZmlsZXMpPT1udWxsP3ZvaWQgMDpvWzBdLGk9bmV3IEZpbGVSZWFkZXI7aS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwoKT0+e2NvbnN0IGw9aS5yZXN1bHQ7aWYodHlwZW9mIGw9PSJzdHJpbmciKXtjb25zdCBzPXJuLmdldFNIQTI1Nkhhc2goTUwuZW5jb2RlKGwpKSxhPUZmKGwpO2Uoe3NyYzpsLGZpbGVuYW1lOnI9PW51bGw/dm9pZCAwOnIubmFtZSxzaGEyNTY6cyxtaW1lVHlwZTphLGZpbGVFeHQ6YSYmQmYoYSl9KX1lbHNlIG4obD97bWVzc2FnZToiVW5leHBlY3RlZCBmaWxlIHJlc3VsdCB0eXBlIixyZXN1bHQ6bH06e21lc3NhZ2U6IkVtcHR5IHJlc3VsdCJ9KX0pLHImJmkucmVhZEFzRGF0YVVSTChyKX0pfWZ1bmN0aW9uIERMKHtwYXRoOnQsZGVmYXVsdFZhbHVlOmUsb25TdWJtaXQ6bixyZWdpc3RlclBhdGNoQ2FsbGJhY2s6cn0pe3ZhciBmLHA7Y29uc3RbaSxvXT1oLnVzZVN0YXRlKG51bGwpLFtsLHNdPWgudXNlU3RhdGUoITEpLFthLGNdPWgudXNlU3RhdGUoKSxbdSxkXT1oLnVzZVN0YXRlKCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57Y29uc3QgZz1lJiZybi5jb252ZXJ0RmlsZVNvdXJjZShlKS51cmw7ZChnKX0sW2VdKSxoLnVzZUVmZmVjdCgoKT0+e3ImJnIoYXN5bmMgZz0+b2YoZywoaT09bnVsbD92b2lkIDA6aS5zcmMpPz9udWxsLChpPT1udWxsP3ZvaWQgMDppLmZpbGVuYW1lKT8/bnVsbCxhKSl9LFtpLGVdKSx5LmpzeHMoQ28se2NoaWxkcmVuOlt5LmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1maXQiLGNoaWxkcmVuOlt5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIGp1c3RpZnktc3RhcnQgcC0yIGJvcmRlciBib3JkZXItYi0wIHJvdW5kZWQtc20gcm91bmRlZC1iLW5vbmUgZ2FwLXktNCBiZy1iYWNrZ3JvdW5kIHRleHQtZm9yZWdyb3VuZCBib3JkZXItaW5wdXQiLGNoaWxkcmVuOml8fHU/eS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InJlbGF0aXZlIGZsZXggZmxleC1jb2wganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyIG1pbi1oLVsxMDBweF0gbWluLXctWzIwMHB4XSIsY2hpbGRyZW46W3kuanN4KCJkaXYiLHtjaGlsZHJlbjp5LmpzeChoUix7fSl9KSx5LmpzeCgiZGl2Iix7Y2hpbGRyZW46aT09bnVsbD92b2lkIDA6aS5maWxlbmFtZX0pXX0pOnkuanN4KCJkaXYiLHtjaGlsZHJlbjoiU2VsZWN0IGZpbGUgYmVsb3cifSl9LHQpLHkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgYm9yZGVyIGJvcmRlci10LTAgcm91bmRlZC1iLXNtIGJnLWJhY2tncm91bmQgYm9yZGVyLWlucHV0IixjaGlsZHJlbjpbeS5qc3goImxhYmVsIix7aHRtbEZvcjpgaW1nX2lucHV0OiR7dH1gLGNsYXNzTmFtZToiYmxvY2sgcHgtMSBweS0yIHRleHQtc20gdGV4dC1jZW50ZXIgcm91bmRlZC1tZCBjdXJzb3ItcG9pbnRlciBiZy1wcmltYXJ5IHRleHQtYmFja2dyb3VuZCIsY2hpbGRyZW46IlVwZGF0ZSJ9KSx5LmpzeCgiaW5wdXQiLHtoaWRkZW46ITAsaWQ6YGltZ19pbnB1dDoke3R9YCx0eXBlOiJmaWxlIixvbkNoYW5nZTpnPT57TEwoZykudGhlbihtPT57byh7c3JjOm0uc3JjLGZpbGVuYW1lOm0uZmlsZW5hbWV9KSxtLm1pbWVUeXBlP2Moe3NoYTI1NjptLnNoYTI1NixtaW1lVHlwZTptLm1pbWVUeXBlfSk6Yyh2b2lkIDApfSkuY2F0Y2gobT0+e2NvbnNvbGUuZXJyb3IobS5tZXNzYWdlKSxvKG51bGwpLGModm9pZCAwKX0pfX0pXX0pXX0pLG4mJnkuanN4KG1sLHtsb2FkaW5nOmwsZW5hYmxlZDohIWl8fCgoZj1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6Zi5taW1lVHlwZSkhPT0oYT09bnVsbD92b2lkIDA6YS5taW1lVHlwZSl8fCgocD1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6cC5zaGEyNTYpIT09KGE9PW51bGw/dm9pZCAwOmEuc2hhMjU2KSxvbkNsaWNrOigpPT57aT8ocyghMCksbihnPT5Qcm9taXNlLnJlc29sdmUob2YoZyxpLnNyYyxpLmZpbGVuYW1lPz9udWxsLGEpKSkuZmluYWxseSgoKT0+e3MoITEpLG8obnVsbCksYyh2b2lkIDApfSkpOmEmJihzKCEwKSxuKGc9PlByb21pc2UucmVzb2x2ZShLYihnLGEpKSkuZmluYWxseSgoKT0+e3MoITEpLG8obnVsbCksYyh2b2lkIDApfSkpfX0pXX0pfWZ1bmN0aW9uIElMKHtwYXRoOnQsZGVmYXVsdFZhbHVlOmUsb25TdWJtaXQ6bixyZWdpc3RlclBhdGNoQ2FsbGJhY2s6cn0pe3ZhciBnLG0sdyx2LHgsXyxTLEUsayxDLE4sQTtjb25zdFtpLG9dPWgudXNlU3RhdGUobnVsbCksW2wsc109aC51c2VTdGF0ZSghMSksW2EsY109aC51c2VTdGF0ZSgpLFt1LGRdPWgudXNlU3RhdGUoKSxbZixwXT1oLnVzZVN0YXRlKCk7cmV0dXJuIGgudXNlRWZmZWN0KCgpPT57cChlJiZybi5jb252ZXJ0RmlsZVNvdXJjZShlKS51cmwpfSxbZV0pLGgudXNlRWZmZWN0KCgpPT57ciYmcihhc3luYyBUPT5vZihULChpPT1udWxsP3ZvaWQgMDppLnNyYyk/P251bGwsKGk9PW51bGw/dm9pZCAwOmkuZmlsZW5hbWUpPz9udWxsLGEpKX0sW2ksZV0pLGgudXNlRWZmZWN0KCgpPT57dmFyIFQ7aWYodSlpZihhKXtjb25zdCBEPXsuLi5hLGhvdHNwb3Q6dX07YyhEKX1lbHNlIGUhPW51bGwmJmUubWV0YWRhdGE/Yyh7Li4uZS5tZXRhZGF0YSxob3RzcG90OnV9KTpjb25zb2xlLmVycm9yKCJOZWl0aGVyIGltYWdlIG1ldGFkYXRhIG5vciB2YWx1ZSBpcyBzZXQiKTtlbHNlKFQ9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSkhPW51bGwmJlQuaG90c3BvdCYmZChlLm1ldGFkYXRhLmhvdHNwb3QpfSxbdSxlXSkseS5qc3hzKENvLHtjaGlsZHJlbjpbeS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InctZml0IixjaGlsZHJlbjpbeS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LXN0YXJ0IHAtMiBib3JkZXIgYm9yZGVyLWItMCByb3VuZGVkLXNtIHJvdW5kZWQtYi1ub25lIGdhcC15LTQgYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQgYm9yZGVyLWlucHV0IixjaGlsZHJlbjppfHxmP3kuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJyZWxhdGl2ZSIsY2hpbGRyZW46W3UmJnkuanN4KCJkaXYiLHtjbGFzc05hbWU6InJvdW5kZWQtZnVsbCBoLVsxMnB4XSB3LVsxMnB4XSBiZy1iYWNrZ3JvdW5kIG1peC1ibGVuZC1kaWZmZXJlbmNlIGJvcmRlci1hY2NlbnQgYm9yZGVyLTIgYWJzb2x1dGUgcG9pbnRlci1ldmVudHMtbm9uZSIsc3R5bGU6e3RvcDpgJHt1LnkqMTAwfSVgLGxlZnQ6YCR7dS54KjEwMH0lYH19KSx5LmpzeCgiaW1nIix7c3JjOihpPT1udWxsP3ZvaWQgMDppLnNyYyl8fGYsZHJhZ2dhYmxlOiExLGNsYXNzTmFtZToib2JqZWN0LWNvbnRhaW4gdy1mdWxsIG1heC1oLVs1MDBweF0iLHN0eWxlOntjdXJzb3I6ImNyb3NzaGFpciJ9LG9uQ2xpY2s6VD0+e2NvbnN0e3dpZHRoOkQsaGVpZ2h0OkwsbGVmdDpLLHRvcDpCfT1ULmN1cnJlbnRUYXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksWj0oVC5jbGllbnRYLTYtSykvRCxSPShULmNsaWVudFktNi1CKS9MO2Qoe3g6Wix5OlIsd2lkdGg6MSxoZWlnaHQ6MX0pfX0pXX0pOnkuanN4KCJkaXYiLHtjaGlsZHJlbjoiU2VsZWN0IGltYWdlIGJlbG93In0pfSx0KSx5LmpzeHMoImRpdiIse2NsYXNzTmFtZToicC00IGJvcmRlciBib3JkZXItdC0wIHJvdW5kZWQtYi1zbSBiZy1iYWNrZ3JvdW5kIGJvcmRlci1pbnB1dCIsY2hpbGRyZW46W3kuanN4KCJsYWJlbCIse2h0bWxGb3I6YGltZ19pbnB1dDoke3R9YCxjbGFzc05hbWU6ImJsb2NrIHB4LTEgcHktMiB0ZXh0LXNtIHRleHQtY2VudGVyIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgYmctcHJpbWFyeSB0ZXh0LWJhY2tncm91bmQiLGNoaWxkcmVuOiJVcGRhdGUifSkseS5qc3goImlucHV0Iix7aGlkZGVuOiEwLGlkOmBpbWdfaW5wdXQ6JHt0fWAsdHlwZToiZmlsZSIsb25DaGFuZ2U6VD0+e09DKFQpLnRoZW4oRD0+e28oe3NyYzpELnNyYyxmaWxlbmFtZTpELmZpbGVuYW1lfSksRC53aWR0aCYmRC5oZWlnaHQmJkQubWltZVR5cGU/Yyh7c2hhMjU2OkQuc2hhMjU2LHdpZHRoOkQud2lkdGgsaGVpZ2h0OkQuaGVpZ2h0LG1pbWVUeXBlOkQubWltZVR5cGUsaG90c3BvdDp1fSk6KGModm9pZCAwKSxkKHZvaWQgMCkpfSkuY2F0Y2goRD0+e2NvbnNvbGUuZXJyb3IoRC5tZXNzYWdlKSxvKG51bGwpLGQodm9pZCAwKSxjKHZvaWQgMCl9KX19KV19KV19KSxuJiZ5LmpzeChtbCx7bG9hZGluZzpsLGVuYWJsZWQ6ISFpfHwoKG09KGc9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOmcuaG90c3BvdCk9PW51bGw/dm9pZCAwOm0uaGVpZ2h0KSE9PSh1PT1udWxsP3ZvaWQgMDp1LmhlaWdodCl8fCgodj0odz1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6dy5ob3RzcG90KT09bnVsbD92b2lkIDA6di53aWR0aCkhPT0odT09bnVsbD92b2lkIDA6dS53aWR0aCl8fCgoXz0oeD1lPT1udWxsP3ZvaWQgMDplLm1ldGFkYXRhKT09bnVsbD92b2lkIDA6eC5ob3RzcG90KT09bnVsbD92b2lkIDA6Xy54KSE9PSh1PT1udWxsP3ZvaWQgMDp1LngpfHwoKEU9KFM9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOlMuaG90c3BvdCk9PW51bGw/dm9pZCAwOkUueSkhPT0odT09bnVsbD92b2lkIDA6dS55KXx8KChrPWU9PW51bGw/dm9pZCAwOmUubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDprLndpZHRoKSE9PShhPT1udWxsP3ZvaWQgMDphLndpZHRoKXx8KChDPWU9PW51bGw/dm9pZCAwOmUubWV0YWRhdGEpPT1udWxsP3ZvaWQgMDpDLmhlaWdodCkhPT0oYT09bnVsbD92b2lkIDA6YS5oZWlnaHQpfHwoKE49ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOk4ubWltZVR5cGUpIT09KGE9PW51bGw/dm9pZCAwOmEubWltZVR5cGUpfHwoKEE9ZT09bnVsbD92b2lkIDA6ZS5tZXRhZGF0YSk9PW51bGw/dm9pZCAwOkEuc2hhMjU2KSE9PShhPT1udWxsP3ZvaWQgMDphLnNoYTI1Niksb25DbGljazooKT0+e2k/KHMoITApLG4oVD0+UHJvbWlzZS5yZXNvbHZlKG9mKFQsaS5zcmMsaS5maWxlbmFtZT8/bnVsbCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLGModm9pZCAwKX0pKTphJiYocyghMCksbihUPT5Qcm9taXNlLnJlc29sdmUoS2IoVCxhKSkpLmZpbmFsbHkoKCk9PntzKCExKSxvKG51bGwpLGModm9pZCAwKX0pKX19KV19KX1mdW5jdGlvbiBmMSh0LGUpe2NvbnN0e3RlbXBsYXRlU3RyaW5nczpuLGV4cHJzOnIsZmlsZXM6aX09ZT9NTyhlLmdldEVkaXRvclN0YXRlKCkudG9KU09OKCkucm9vdCk6e1tubl06InJpY2h0ZXh0Iix0ZW1wbGF0ZVN0cmluZ3M6WyIiXSxleHByczpbXSxmaWxlczp7fX07cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDp0LHZhbHVlOnt0ZW1wbGF0ZVN0cmluZ3M6bixleHByczpyLFtubl06InJpY2h0ZXh0In19LC4uLk9iamVjdC5lbnRyaWVzKGkpLm1hcCgoW28sbF0pPT4oe29wOiJmaWxlIixwYXRoOnQsZmlsZVBhdGg6byx2YWx1ZTpsfSkpXX1mdW5jdGlvbiBqTCh7ZGVmYXVsdFZhbHVlOnQsb25TdWJtaXQ6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bn0pe2NvbnN0W3IsaV09aC51c2VTdGF0ZShudWxsKSxbbyxsXT1oLnVzZVN0YXRlKCExKSxbcyxhXT1oLnVzZVN0YXRlKCExKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntyJiYobCghMSksci5yZWdpc3RlclRleHRDb250ZW50TGlzdGVuZXIoKCk9PntsKCEwKX0pLHIucmVnaXN0ZXJEZWNvcmF0b3JMaXN0ZW5lcigoKT0+e2woITApfSksci5yZWdpc3Rlck11dGF0aW9uTGlzdGVuZXIodGwuTGlua05vZGUsKCk9PntsKCEwKX0pLHIucmVnaXN0ZXJNdXRhdGlvbkxpc3RlbmVyKHpzLCgpPT57bCghMCl9KSxyLnJlZ2lzdGVyTXV0YXRpb25MaXN0ZW5lcihfZS5UZXh0Tm9kZSwoKT0+e2woITApfSkpfSxbcl0pLGgudXNlRWZmZWN0KCgpPT57ciYmbiYmbihhc3luYyBjPT5mMShjLHIpKX0sW3JdKSx5LmpzeHMoQ28se2NoaWxkcmVuOlt5LmpzeChnNCx7b25FZGl0b3I6Yz0+e2koYyl9LHJpY2h0ZXh0OnR8fHtjaGlsZHJlbjpbXSxbbm5dOiJyb290In19KSxlJiZ5LmpzeChtbCx7bG9hZGluZzpzfHwhcixlbmFibGVkOm8sb25DbGljazooKT0+e3ImJihhKCEwKSxlKGFzeW5jIGM9PmYxKGMscikpLmZpbmFsbHkoKCk9PnthKCExKSxsKCExKX0pKX19KV19KX1mdW5jdGlvbiBwMSh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyLHNlbGVjdG9yOml9KXtjb25zdCBvPWFJKGkpLHM9KHA9PkFycmF5LmlzQXJyYXkocC5tb2R1bGVTb3VyY2UpP3t0eXBlOiJudW1iZXIiLHZhbHVlczpPYmplY3Qua2V5cyhwLm1vZHVsZVNvdXJjZSkubWFwKGc9PnBhcnNlSW50KGcpKX06e3R5cGU6InN0cmluZyIsdmFsdWVzOk9iamVjdC5rZXlzKHAubW9kdWxlU291cmNlPz9bIkVSUk9SIGZldGNoaW5nIHNvdXJjZSJdKX0pKG8pLFthLGNdPWgudXNlU3RhdGUoZXx8cy52YWx1ZXNbMF0pLFt1LGRdPWgudXNlU3RhdGUoITEpO2gudXNlRWZmZWN0KCgpPT57ZCh0KX0sW3RdKTtjb25zdCBmPXA9PntpZihzLnR5cGU9PT0ibnVtYmVyIil7aWYocD09PSIiKXRocm93IG5ldyBFcnJvcigiVmFsdWUgY2Fubm90IGJlIGVtcHR5Iik7aWYoTnVtYmVyLmlzTmFOKE51bWJlcihwKSkpdGhyb3cgbmV3IEVycm9yKCJWYWx1ZSB3YXMgbm90IGEgbnVtYmVyOiAiK0pTT04uc3RyaW5naWZ5KHApKTtyZXR1cm4gTnVtYmVyKHApfXJldHVybiBwfTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9PntuJiZuKGFzeW5jIHA9Plt7b3A6InJlcGxhY2UiLHBhdGg6cCx2YWx1ZTphfV0pfSxbYV0pLHkuanN4cyhDbyx7Y2hpbGRyZW46W3kuanN4cyhXYix7ZGVmYXVsdFZhbHVlOmEudG9TdHJpbmcoKSxkaXNhYmxlZDp1LG9uVmFsdWVDaGFuZ2U6cD0+e2MoZihwKSl9LGNoaWxkcmVuOlt5LmpzeChseSx7Y2hpbGRyZW46eS5qc3goSGIse3BsYWNlaG9sZGVyOiJTZWxlY3QgYSB2YWx1ZSJ9KX0pLHkuanN4KHN5LHtjaGlsZHJlbjpzLnZhbHVlcy5tYXAocD0+eS5qc3goYXkse3ZhbHVlOnAudG9TdHJpbmcoKSxjaGlsZHJlbjpwLnRvU3RyaW5nKCl9LHApKX0pXX0pLHImJnkuanN4KG1sLHtsb2FkaW5nOnUsZW5hYmxlZDplIT09YSxvbkNsaWNrOigpPT57ZCghMCkscihhc3luYyBwPT5be29wOiJyZXBsYWNlIixwYXRoOnAsdmFsdWU6YX1dKS5maW5hbGx5KCgpPT57ZCghMSl9KX19KV19KX1mdW5jdGlvbiBoMSh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxyZWdpc3RlclBhdGNoQ2FsbGJhY2s6bixvblN1Ym1pdDpyfSl7Y29uc3RbaSxvXT1oLnVzZVN0YXRlKGV8fDApLFtsLHNdPWgudXNlU3RhdGUoITEpO2gudXNlRWZmZWN0KCgpPT57cyh0KX0sW3RdKTtjb25zdCBhPWgudXNlUmVmKG51bGwpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e24mJm4oYXN5bmMgYz0+e3ZhciB1O3JldHVyblt7b3A6InJlcGxhY2UiLHBhdGg6Yyx2YWx1ZTpOdW1iZXIoKHU9YS5jdXJyZW50KT09bnVsbD92b2lkIDA6dS52YWx1ZSl8fDB9XX0pfSxbXSkseS5qc3hzKENvLHtjaGlsZHJlbjpbeS5qc3goSnYse3JlZjphLGRpc2FibGVkOmwsZGVmYXVsdFZhbHVlOmk/PzAsb25DaGFuZ2U6Yz0+byhOdW1iZXIoYy50YXJnZXQudmFsdWUpKSx0eXBlOiJudW1iZXIifSksciYmeS5qc3gobWwse2xvYWRpbmc6bCxlbmFibGVkOmUhPT1pLG9uQ2xpY2s6KCk9PntzKCEwKSxyKGFzeW5jIGM9Pnt2YXIgdTtyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOmMsdmFsdWU6TnVtYmVyKCh1PWEuY3VycmVudCk9PW51bGw/dm9pZCAwOnUudmFsdWUpfHwwfV19KS5maW5hbGx5KCgpPT57cyghMSl9KX19KV19KX1mdW5jdGlvbiB6TCh7ZGlzYWJsZWQ6dCxkZWZhdWx0VmFsdWU6ZSxwYXRoOm4sc2NoZW1hOnIscmVnaXN0ZXJQYXRjaENhbGxiYWNrOmksb25TdWJtaXQ6b30pe2NvbnN0W2wsc109aC51c2VTdGF0ZShlfHwiIiksW2EsY109aC51c2VTdGF0ZSghMSk7aC51c2VFZmZlY3QoKCk9PntjKHQpfSxbdF0pO2NvbnN0IHU9aC51c2VSZWYobnVsbCk7aC51c2VFZmZlY3QoKCk9PntpJiZpKGFzeW5jIHA9Pnt2YXIgZztyZXR1cm5be29wOiJyZXBsYWNlIixwYXRoOnAsdmFsdWU6KChnPXUuY3VycmVudCk9PW51bGw/dm9pZCAwOmcudmFsdWUpfHwiIn1dfSl9LFtdKTtjb25zdCBmPW5ldyBJTihyLm9wdGlvbnM/ey4uLnIub3B0aW9ucyxyZWdleHA6ci5vcHRpb25zLnJlZ2V4cD9uZXcgUmVnRXhwKHIub3B0aW9ucy5yZWdleHAuc291cmNlLHIub3B0aW9ucy5yZWdleHAuZmxhZ3MpOnZvaWQgMH06dm9pZCAwKS52YWxpZGF0ZShuLGwpO3JldHVybiB5LmpzeHMoQ28se2NoaWxkcmVuOlt5LmpzeChKdix7cmVmOnUsZGlzYWJsZWQ6YSxkZWZhdWx0VmFsdWU6bD8/IiIsb25DaGFuZ2U6cD0+cyhwLnRhcmdldC52YWx1ZSl9KSxvJiZ5LmpzeChtbCx7dmFsaWRhdGlvbkVycm9yczpmJiZmW25dLGxvYWRpbmc6YSxlbmFibGVkOmUhPT1sJiYhZixvbkNsaWNrOigpPT57YyghMCksbyhhc3luYyBwPT57dmFyIGc7cmV0dXJuW3tvcDoicmVwbGFjZSIscGF0aDpwLHZhbHVlOigoZz11LmN1cnJlbnQpPT1udWxsP3ZvaWQgMDpnLnZhbHVlKXx8IiJ9XX0pLmZpbmFsbHkoKCk9PntjKCExKX0pfX0pXX0pfWZ1bmN0aW9uIEZMKHtlcnJvcnM6dH0pe3JldHVybiB5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGZsZXgtY29sIHAtMiB0ZXh0LXNtIHJvdW5kZWQtbWQgZ2FwLXktMSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOnQubWFwKChlLG4pPT55LmpzeCgiZGl2Iix7Y2hpbGRyZW46ZS5tZXNzYWdlfSxuKSl9KX1mdW5jdGlvbiBDbyh7Y2hpbGRyZW46dCxjbGFzc05hbWU6ZX0pe3JldHVybiB5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOkZuKCJyZWxhdGl2ZSBtYXgtdy1sZyBweC00IHB0LTQiLGUpLGNoaWxkcmVuOnR9KX1mdW5jdGlvbiBtbCh7bG9hZGluZzp0LGVuYWJsZWQ6ZSx2YWxpZGF0aW9uRXJyb3JzOm4sb25DbGljazpyfSl7Y29uc3R7c2Vzc2lvbjppfT1IZigpLG89aS5zdGF0dXM9PT0ic3VjY2VzcyImJmkuZGF0YS5tb2RlPT09InByb3h5IjtyZXR1cm4geS5qc3goImRpdiIse2NsYXNzTmFtZToic3RpY2t5IGJvdHRvbS0wIG0tNCBtdC0yIG1sLTAiLGNoaWxkcmVuOnkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGp1c3RpZnktc3RhcnQgdy1mdWxsIGdhcC0yIHRleHQtc20iLGNoaWxkcmVuOlt5LmpzeChRZCx7ZGlzYWJsZWQ6dHx8IWUsb25DbGljazpyLGNoaWxkcmVuOnQ/bz8iU3RhZ2luZy4uLiI6IlNhdmluZy4uLiI6bz8iU3RhZ2UiOiJTYXZlIn0pLCIgIixuP3kuanN4KEZMLHtlcnJvcnM6bnx8W119KTp5LmpzeCgic3BhbiIse30pXX0pfSl9Y29uc3QgQkw9KHtjbGFzc05hbWU6dH0pPT55LmpzeHMoInN2ZyIse3dpZHRoOiI1OCIsaGVpZ2h0OiIzNCIsdmlld0JveDoiMCAwIDU4IDM0IixmaWxsOiJub25lIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGNsYXNzTmFtZTp0LGNoaWxkcmVuOlt5LmpzeCgiZyIse2ZpbHRlcjoidXJsKCNmaWx0ZXIwX2RfMjFfMTY3NykiLGNoaWxkcmVuOnkuanN4KCJwYXRoIix7ZDoiTTUgNS4zNjQyNkM1IDUuMTYzMDkgNS4xNjMwOSA1IDUuMzY0MjYgNUgxNy42NTgxQzE3Ljg1OTMgNSAxOC4wMjIzIDUuMTYzMDkgMTguMDIyMyA1LjM2NDI2VjI4LjQ5NDlDMTguMDIyMyAyOC42OTYgMTcuODU5MyAyOC44NTkxIDE3LjY1ODEgMjguODU5MUg1LjM2NDI2QzUuMTYzMDkgMjguODU5MSA1IDI4LjY5NiA1IDI4LjQ5NDlWNS4zNjQyNloiLGZpbGw6ImhzbCh2YXIoLS1hY2NlbnQpKSJ9KX0pLHkuanN4KCJnIix7ZmlsdGVyOiJ1cmwoI2ZpbHRlcjFfaV8yMV8xNjc3KSIsY2hpbGRyZW46eS5qc3goImNpcmNsZSIse2N4OiIxMS40NjU2IixjeToiMjMuNzU5NSIscjoiMi4xODU1NyIsZmlsbDoiY3VycmVudENvbG9yIn0pfSkseS5qc3goInBhdGgiLHtmaWxsUnVsZToiZXZlbm9kZCIsY2xpcFJ1bGU6ImV2ZW5vZGQiLGQ6Ik01Mi44NTg4IDIzLjgzOUg0OC43MjU3SDQ4LjUzN0g0OC4xMTI4QzQ3LjY3MTUgMjMuODM5IDQ3LjQ1MDggMjMuNTk0MiA0Ny40NTA4IDIzLjEwNDRWMTMuNzI5M0M0Ny40NTA4IDEzLjU3ODQgNDcuMzI4NSAxMy40NTYxIDQ3LjE3NzcgMTMuNDU2MUg0NS44MTE4QzQ1LjY2MDkgMTMuNDU2MSA0NS41Mzg2IDEzLjU3ODQgNDUuNTM4NiAxMy43MjkzVjE1LjE4MzZDNDUuNTM4NiAxNS4yODQ0IDQ1LjQ1NjkgMTUuMzY2MSA0NS4zNTYxIDE1LjM2NjFDNDUuMjg3NiAxNS4zNjYxIDQ1LjIyNSAxNS4zMjc1IDQ1LjE5MjQgMTUuMjY3MkM0NC44MDUgMTQuNTUwMyA0NC4yODMgMTQuMDIgNDMuNjI2NCAxMy42NzY1QzQyLjk1NjMgMTMuMzAxIDQyLjIwNDUgMTMuMTEzMiA0MS4zNzA5IDEzLjExMzJDNDAuNjAyOCAxMy4xMTMyIDM5Ljg3NTUgMTMuMjUyIDM5LjE4OSAxMy41Mjk1QzM4LjUwMjYgMTMuODA3MSAzNy44OTc5IDE0LjIxNTIgMzcuMzc0OCAxNC43NTM5QzM2Ljg2ODIgMTUuMjc2NCAzNi40Njc4IDE1LjkyMTIgMzYuMTczNiAxNi42ODg1QzM1Ljg3OTQgMTcuNDU1OCAzNS43MzIzIDE4LjMzNzQgMzUuNzMyMyAxOS4zMzMyVjE5LjcyNUMzNS43MzIzIDIwLjczNzIgMzUuODc5NCAyMS42MjcgMzYuMTczNiAyMi4zOTQyQzM2LjQ2NzggMjMuMTYxNSAzNi44NjgyIDIzLjgxNDYgMzcuMzc0OCAyNC4zNTMzQzM3Ljg5NzkgMjQuODc1NyAzOC41MDI2IDI1LjI3NTcgMzkuMTg5IDI1LjU1MzJDMzkuODc1NSAyNS44MTQ0IDQwLjYxOTEgMjUuOTQ1IDQxLjQyIDI1Ljk0NUM0Mi4xODgxIDI1Ljk0NSA0Mi45MTU0IDI1Ljc0OTEgNDMuNjAxOSAyNS4zNTczQzQ0LjI3NTEgMjQuOTgyIDQ0LjgwNTggMjQuNDExOSA0NS4xOTQxIDIzLjY0NzFDNDUuMjI1NSAyMy41ODUyIDQ1LjI4ODYgMjMuNTQ1MiA0NS4zNTggMjMuNTQ1Mkg0NS4zOTE3QzQ1LjQ3MjggMjMuNTQ1MiA0NS41Mzg2IDIzLjYxMSA0NS41Mzg2IDIzLjY5MjFDNDUuNTM4NiAyMy43OTA0IDQ1LjU0NCAyMy44ODU2IDQ1LjU1NDcgMjMuOTc3N1YyNS4xMzkyQzQ1LjU1NDcgMjUuMzkwNCA0NS43NTg0IDI1LjU5NDEgNDYuMDA5NiAyNS41OTQxSDQ3LjIyNjFDNDcuMjkxNCAyNS41OTk1IDQ3LjM1ODEgMjUuNjAyMiA0Ny40MjYzIDI1LjYwMjJINDguNTM3SDQ4LjcyNTdINTcuNzI2OEM1Ny44Nzc3IDI1LjYwMjIgNTggMjUuNDc5OSA1OCAyNS4zMjlWMjQuMTEyMkM1OCAyMy45NjE0IDU3Ljg3NzcgMjMuODM5IDU3LjcyNjggMjMuODM5SDU1LjMxNzRDNTUuMTY2NSAyMy44MzkgNTUuMDQ0MiAyMy43MTY3IDU1LjA0NDIgMjMuNTY1OVY4LjczMzY4QzU1LjA0NDIgOC41ODI3OSA1NC45MjE5IDguNDYwNDggNTQuNzcxIDguNDYwNDhINTAuNTA1NEM1MC4zNTQ1IDguNDYwNDggNTAuMjMyMiA4LjU4Mjc5IDUwLjIzMjIgOC43MzM2OFY5Ljk1MDQzQzUwLjIzMjIgMTAuMTAxMyA1MC4zNTQ1IDEwLjIyMzYgNTAuNTA1NCAxMC4yMjM2SDUyLjg1ODhDNTMuMDA5NyAxMC4yMjM2IDUzLjEzMiAxMC4zNDU5IDUzLjEzMiAxMC40OTY4VjIzLjU2NTlDNTMuMTMyIDIzLjcxNjcgNTMuMDA5NyAyMy44MzkgNTIuODU4OCAyMy44MzlaTTQxLjYxNjEgMjQuMTMyOUM0Mi4xODgxIDI0LjEzMjkgNDIuNzExMSAyNC4wMjY4IDQzLjE4NTEgMjMuODE0NkM0My42NzU0IDIzLjYwMjMgNDQuMDkyMiAyMy4zMDAzIDQ0LjQzNTQgMjIuOTA4NUM0NC43Nzg2IDIyLjUxNjcgNDUuMDQ4MyAyMi4wNTE0IDQ1LjI0NDQgMjEuNTEyN0M0NS40NDA2IDIwLjk1NzYgNDUuNTM4NiAyMC4zNDU0IDQ1LjUzODYgMTkuNjc2MVYxOS4zODIyQzQ1LjUzODYgMTguNzI5MiA0NS40NDA2IDE4LjEzMzMgNDUuMjQ0NCAxNy41OTQ2QzQ1LjA0ODMgMTcuMDM5NSA0NC43NzA1IDE2LjU2NjEgNDQuNDEwOSAxNi4xNzQzQzQ0LjA2NzcgMTUuNzgyNCA0My42NTA5IDE1LjQ4MDQgNDMuMTYwNiAxNS4yNjgyQzQyLjY4NjYgMTUuMDM5NiA0Mi4xNzE4IDE0LjkyNTQgNDEuNjE2MSAxNC45MjU0QzQxLjA0NCAxNC45MjU0IDQwLjUyMSAxNS4wMzE1IDQwLjA0NzEgMTUuMjQzN0MzOS41NzMxIDE1LjQ1NTkgMzkuMTU2MyAxNS43NTggMzguNzk2OCAxNi4xNDk4QzM4LjQ1MzUgMTYuNTI1MiAzOC4xODM5IDE2Ljk5MDUgMzcuOTg3NyAxNy41NDU2QzM3Ljc5MTYgMTguMDg0MyAzNy42OTM2IDE4LjY4MDIgMzcuNjkzNiAxOS4zMzMyVjE5LjcyNUMzNy42OTM2IDIxLjExMjcgMzguMDUzMSAyMi4xOTgzIDM4Ljc3MjIgMjIuOTgyQzM5LjUwNzcgMjMuNzQ5MyA0MC40NTU3IDI0LjEzMjkgNDEuNjE2MSAyNC4xMzI5Wk0zMS4xMTE1IDI1LjQxOTFDMzEuMDczMiAyNS41Mjg3IDMwLjk2OTggMjUuNjAyMiAzMC44NTM2IDI1LjYwMjJIMjcuNDY2MUMyNy4zNSAyNS42MDIyIDI3LjI0NjUgMjUuNTI4NyAyNy4yMDgyIDI1LjQxOTFMMjMuMTU3OCAxMy44MTkzQzIzLjA5NTggMTMuNjQxNyAyMy4yMjc2IDEzLjQ1NjEgMjMuNDE1NyAxMy40NTYxSDI1LjA4OUMyNS4yMDY4IDEzLjQ1NjEgMjUuMzExNCAxMy41MzE2IDI1LjM0ODQgMTMuNjQzNUwyOC45NjY2IDI0LjU4MUMyOC45OTQyIDI0LjY2NDMgMjkuMDcyMSAyNC43MjA2IDI5LjE1OTkgMjQuNzIwNkMyOS4yNDc3IDI0LjcyMDYgMjkuMzI1NiAyNC42NjQzIDI5LjM1MzIgMjQuNTgxTDMyLjk3MTQgMTMuNjQzNUMzMy4wMDg0IDEzLjUzMTYgMzMuMTEyOSAxMy40NTYxIDMzLjIzMDggMTMuNDU2MUgzNC45MDQxQzM1LjA5MjIgMTMuNDU2MSAzNS4yMjQgMTMuNjQxNyAzNS4xNjIgMTMuODE5M0wzMS4xMTE1IDI1LjQxOTFaIixmaWxsOiJjdXJyZW50Q29sb3IifSkseS5qc3hzKCJkZWZzIix7Y2hpbGRyZW46W3kuanN4cygiZmlsdGVyIix7aWQ6ImZpbHRlcjBfZF8yMV8xNjc3Iix4OiIwLjEyNDcyMiIseToiMC4xMjQ3MjIiLHdpZHRoOiIyMi43NzI5IixoZWlnaHQ6IjMzLjYwOTciLGZpbHRlclVuaXRzOiJ1c2VyU3BhY2VPblVzZSIsY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVyczoic1JHQiIsY2hpbGRyZW46W3kuanN4KCJmZUZsb29kIix7Zmxvb2RPcGFjaXR5OiIwIixyZXN1bHQ6IkJhY2tncm91bmRJbWFnZUZpeCJ9KSx5LmpzeCgiZmVDb2xvck1hdHJpeCIse2luOiJTb3VyY2VBbHBoYSIsdHlwZToibWF0cml4Iix2YWx1ZXM6IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIixyZXN1bHQ6ImhhcmRBbHBoYSJ9KSx5LmpzeCgiZmVPZmZzZXQiLHt9KSx5LmpzeCgiZmVHYXVzc2lhbkJsdXIiLHtzdGREZXZpYXRpb246IjIuNDM3NjQifSkseS5qc3goImZlQ29tcG9zaXRlIix7aW4yOiJoYXJkQWxwaGEiLG9wZXJhdG9yOiJvdXQifSkseS5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSkseS5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoiQmFja2dyb3VuZEltYWdlRml4IixyZXN1bHQ6ImVmZmVjdDFfZHJvcFNoYWRvd18yMV8xNjc3In0pLHkuanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJlZmZlY3QxX2Ryb3BTaGFkb3dfMjFfMTY3NyIscmVzdWx0OiJzaGFwZSJ9KV19KSx5LmpzeHMoImZpbHRlciIse2lkOiJmaWx0ZXIxX2lfMjFfMTY3NyIseDoiOS4yODAwMyIseToiMjEuNTczOSIsd2lkdGg6IjQuMzcxMTIiLGhlaWdodDoiNC4zNzExMiIsZmlsdGVyVW5pdHM6InVzZXJTcGFjZU9uVXNlIixjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiJzUkdCIixjaGlsZHJlbjpbeS5qc3goImZlRmxvb2QiLHtmbG9vZE9wYWNpdHk6IjAiLHJlc3VsdDoiQmFja2dyb3VuZEltYWdlRml4In0pLHkuanN4KCJmZUJsZW5kIix7bW9kZToibm9ybWFsIixpbjoiU291cmNlR3JhcGhpYyIsaW4yOiJCYWNrZ3JvdW5kSW1hZ2VGaXgiLHJlc3VsdDoic2hhcGUifSkseS5qc3goImZlQ29sb3JNYXRyaXgiLHtpbjoiU291cmNlQWxwaGEiLHR5cGU6Im1hdHJpeCIsdmFsdWVzOiIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIscmVzdWx0OiJoYXJkQWxwaGEifSkseS5qc3goImZlT2Zmc2V0Iix7fSkseS5qc3goImZlR2F1c3NpYW5CbHVyIix7c3RkRGV2aWF0aW9uOiIwLjU0NjM5MiJ9KSx5LmpzeCgiZmVDb21wb3NpdGUiLHtpbjI6ImhhcmRBbHBoYSIsb3BlcmF0b3I6ImFyaXRobWV0aWMiLGsyOiItMSIsazM6IjEifSkseS5qc3goImZlQ29sb3JNYXRyaXgiLHt0eXBlOiJtYXRyaXgiLHZhbHVlczoiMCAwIDAgMCAwLjIxOTYwOCAwIDAgMCAwIDAuODAzOTIyIDAgMCAwIDAgMC41MDE5NjEgMCAwIDAgMC4zIDAifSkseS5qc3goImZlQmxlbmQiLHttb2RlOiJub3JtYWwiLGluMjoic2hhcGUiLHJlc3VsdDoiZWZmZWN0MV9pbm5lclNoYWRvd18yMV8xNjc3In0pXX0pXX0pXX0pLFpiPUJMLEdiPSJTd2l0Y2giLFtVTCxVSV09Y2woR2IpLFtXTCxITF09VUwoR2IpLFZMPWguZm9yd2FyZFJlZigodCxlKT0+e2NvbnN0e19fc2NvcGVTd2l0Y2g6bixuYW1lOnIsY2hlY2tlZDppLGRlZmF1bHRDaGVja2VkOm8scmVxdWlyZWQ6bCxkaXNhYmxlZDpzLHZhbHVlOmE9Im9uIixvbkNoZWNrZWRDaGFuZ2U6YywuLi51fT10LFtkLGZdPWgudXNlU3RhdGUobnVsbCkscD1zdChlLHg9PmYoeCkpLGc9aC51c2VSZWYoITEpLG09ZD8hIWQuY2xvc2VzdCgiZm9ybSIpOiEwLFt3PSExLHZdPV9zKHtwcm9wOmksZGVmYXVsdFByb3A6byxvbkNoYW5nZTpjfSk7cmV0dXJuIGguY3JlYXRlRWxlbWVudChXTCx7c2NvcGU6bixjaGVja2VkOncsZGlzYWJsZWQ6c30saC5jcmVhdGVFbGVtZW50KEtlLmJ1dHRvbixvZSh7dHlwZToiYnV0dG9uIixyb2xlOiJzd2l0Y2giLCJhcmlhLWNoZWNrZWQiOncsImFyaWEtcmVxdWlyZWQiOmwsImRhdGEtc3RhdGUiOlliKHcpLCJkYXRhLWRpc2FibGVkIjpzPyIiOnZvaWQgMCxkaXNhYmxlZDpzLHZhbHVlOmF9LHUse3JlZjpwLG9uQ2xpY2s6bnQodC5vbkNsaWNrLHg9Pnt2KF89PiFfKSxtJiYoZy5jdXJyZW50PXguaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxnLmN1cnJlbnR8fHguc3RvcFByb3BhZ2F0aW9uKCkpfSl9KSksbSYmaC5jcmVhdGVFbGVtZW50KEdMLHtjb250cm9sOmQsYnViYmxlczohZy5jdXJyZW50LG5hbWU6cix2YWx1ZTphLGNoZWNrZWQ6dyxyZXF1aXJlZDpsLGRpc2FibGVkOnMsc3R5bGU6e3RyYW5zZm9ybToidHJhbnNsYXRlWCgtMTAwJSkifX0pKX0pLEtMPSJTd2l0Y2hUaHVtYiIsWkw9aC5mb3J3YXJkUmVmKCh0LGUpPT57Y29uc3R7X19zY29wZVN3aXRjaDpuLC4uLnJ9PXQsaT1ITChLTCxuKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KEtlLnNwYW4sb2UoeyJkYXRhLXN0YXRlIjpZYihpLmNoZWNrZWQpLCJkYXRhLWRpc2FibGVkIjppLmRpc2FibGVkPyIiOnZvaWQgMH0scix7cmVmOmV9KSl9KSxHTD10PT57Y29uc3R7Y29udHJvbDplLGNoZWNrZWQ6bixidWJibGVzOnI9ITAsLi4uaX09dCxvPWgudXNlUmVmKG51bGwpLGw9U2Iobikscz1tYihlKTtyZXR1cm4gaC51c2VFZmZlY3QoKCk9Pntjb25zdCBhPW8uY3VycmVudCxjPXdpbmRvdy5IVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZSxkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYywiY2hlY2tlZCIpLnNldDtpZihsIT09biYmZCl7Y29uc3QgZj1uZXcgRXZlbnQoImNsaWNrIix7YnViYmxlczpyfSk7ZC5jYWxsKGEsbiksYS5kaXNwYXRjaEV2ZW50KGYpfX0sW2wsbixyXSksaC5jcmVhdGVFbGVtZW50KCJpbnB1dCIsb2Uoe3R5cGU6ImNoZWNrYm94IiwiYXJpYS1oaWRkZW4iOiEwLGRlZmF1bHRDaGVja2VkOm59LGkse3RhYkluZGV4Oi0xLHJlZjpvLHN0eWxlOnsuLi50LnN0eWxlLC4uLnMscG9zaXRpb246ImFic29sdXRlIixwb2ludGVyRXZlbnRzOiJub25lIixvcGFjaXR5OjAsbWFyZ2luOjB9fSkpfTtmdW5jdGlvbiBZYih0KXtyZXR1cm4gdD8iY2hlY2tlZCI6InVuY2hlY2tlZCJ9Y29uc3QgWGI9VkwsWUw9WkwsSmI9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsLi4uZX0sbik9PnkuanN4KFhiLHtjbGFzc05hbWU6eHQoInBlZXIgaW5saW5lLWZsZXggaC1bMjJweF0gdy1bNDRweF0gc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtYmFja2dyb3VuZCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCBkYXRhLVtzdGF0ZT1jaGVja2VkXTpiZy1hY2NlbnQgZGF0YS1bc3RhdGU9dW5jaGVja2VkXTpiZy1wcmltYXJ5Iix0KSwuLi5lLHJlZjpuLGNoaWxkcmVuOnkuanN4KFlMLHtjbGFzc05hbWU6eHQoInBvaW50ZXItZXZlbnRzLW5vbmUgYmxvY2sgaC1bMThweF0gdy01IHJvdW5kZWQtZnVsbCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1sZyByaW5nLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0gZGF0YS1bc3RhdGU9Y2hlY2tlZF06dHJhbnNsYXRlLXgtNSBkYXRhLVtzdGF0ZT11bmNoZWNrZWRdOnRyYW5zbGF0ZS14LTAiKX0pfSkpO0piLmRpc3BsYXlOYW1lPVhiLmRpc3BsYXlOYW1lO2NvbnN0IGN5PWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJyb3VuZGVkLWxnIGJvcmRlciBiZy1jYXJkIHRleHQtY2FyZC1mb3JlZ3JvdW5kIHNoYWRvdy1zbSIsdCksLi4uZX0pKTtjeS5kaXNwbGF5TmFtZT0iQ2FyZCI7Y29uc3QgWEw9aC5mb3J3YXJkUmVmKCh7Y2xhc3NOYW1lOnQsLi4uZX0sbik9PnkuanN4KCJkaXYiLHtyZWY6bixjbGFzc05hbWU6eHQoImZsZXggZmxleC1jb2wgc3BhY2UteS0xLjUgcC02Iix0KSwuLi5lfSkpO1hMLmRpc3BsYXlOYW1lPSJDYXJkSGVhZGVyIjtjb25zdCBKTD1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eS5qc3goImgzIix7cmVmOm4sY2xhc3NOYW1lOnh0KCJ0ZXh0LTJ4bCBmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCIsdCksLi4uZX0pKTtKTC5kaXNwbGF5TmFtZT0iQ2FyZFRpdGxlIjtjb25zdCBRTD1oLmZvcndhcmRSZWYoKHtjbGFzc05hbWU6dCwuLi5lfSxuKT0+eS5qc3goInAiLHtyZWY6bixjbGFzc05hbWU6eHQoInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIix0KSwuLi5lfSkpO1FMLmRpc3BsYXlOYW1lPSJDYXJkRGVzY3JpcHRpb24iO2NvbnN0IHFMPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJwLTYgcHQtMCIsdCksLi4uZX0pKTtxTC5kaXNwbGF5TmFtZT0iQ2FyZENvbnRlbnQiO2NvbnN0IGVEPWguZm9yd2FyZFJlZigoe2NsYXNzTmFtZTp0LC4uLmV9LG4pPT55LmpzeCgiZGl2Iix7cmVmOm4sY2xhc3NOYW1lOnh0KCJmbGV4IGl0ZW1zLWNlbnRlciBwLTYgcHQtMCIsdCksLi4uZX0pKTtlRC5kaXNwbGF5TmFtZT0iQ2FyZEZvb3RlciI7LyoqCiAqIEByZW1peC1ydW4vcm91dGVyIHYxLjEzLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiB5dCgpe3JldHVybiB5dD1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LHl0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgd3Q7KGZ1bmN0aW9uKHQpe3QuUG9wPSJQT1AiLHQuUHVzaD0iUFVTSCIsdC5SZXBsYWNlPSJSRVBMQUNFIn0pKHd0fHwod3Q9e30pKTtjb25zdCBtMT0icG9wc3RhdGUiO2Z1bmN0aW9uIHREKHQpe3Q9PT12b2lkIDAmJih0PXt9KTtmdW5jdGlvbiBlKHIsaSl7bGV0e3BhdGhuYW1lOm8sc2VhcmNoOmwsaGFzaDpzfT1yLmxvY2F0aW9uO3JldHVybiBUYygiIix7cGF0aG5hbWU6byxzZWFyY2g6bCxoYXNoOnN9LGkuc3RhdGUmJmkuc3RhdGUudXNyfHxudWxsLGkuc3RhdGUmJmkuc3RhdGUua2V5fHwiZGVmYXVsdCIpfWZ1bmN0aW9uIG4ocixpKXtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciP2k6S2MoaSl9cmV0dXJuIHJEKGUsbixudWxsLHQpfWZ1bmN0aW9uIE9lKHQsZSl7aWYodD09PSExfHx0PT09bnVsbHx8dHlwZW9mIHQ+InUiKXRocm93IG5ldyBFcnJvcihlKX1mdW5jdGlvbiBsbCh0LGUpe2lmKCF0KXt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybihlKTt0cnl7dGhyb3cgbmV3IEVycm9yKGUpfWNhdGNoe319fWZ1bmN0aW9uIG5EKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDgpfWZ1bmN0aW9uIGcxKHQsZSl7cmV0dXJue3Vzcjp0LnN0YXRlLGtleTp0LmtleSxpZHg6ZX19ZnVuY3Rpb24gVGModCxlLG4scil7cmV0dXJuIG49PT12b2lkIDAmJihuPW51bGwpLHl0KHtwYXRobmFtZTp0eXBlb2YgdD09InN0cmluZyI/dDp0LnBhdGhuYW1lLHNlYXJjaDoiIixoYXNoOiIifSx0eXBlb2YgZT09InN0cmluZyI/TmkoZSk6ZSx7c3RhdGU6bixrZXk6ZSYmZS5rZXl8fHJ8fG5EKCl9KX1mdW5jdGlvbiBLYyh0KXtsZXR7cGF0aG5hbWU6ZT0iLyIsc2VhcmNoOm49IiIsaGFzaDpyPSIifT10O3JldHVybiBuJiZuIT09Ij8iJiYoZSs9bi5jaGFyQXQoMCk9PT0iPyI/bjoiPyIrbiksciYmciE9PSIjIiYmKGUrPXIuY2hhckF0KDApPT09IiMiP3I6IiMiK3IpLGV9ZnVuY3Rpb24gTmkodCl7bGV0IGU9e307aWYodCl7bGV0IG49dC5pbmRleE9mKCIjIik7bj49MCYmKGUuaGFzaD10LnN1YnN0cihuKSx0PXQuc3Vic3RyKDAsbikpO2xldCByPXQuaW5kZXhPZigiPyIpO3I+PTAmJihlLnNlYXJjaD10LnN1YnN0cihyKSx0PXQuc3Vic3RyKDAscikpLHQmJihlLnBhdGhuYW1lPXQpfXJldHVybiBlfWZ1bmN0aW9uIHJEKHQsZSxuLHIpe3I9PT12b2lkIDAmJihyPXt9KTtsZXR7d2luZG93Omk9ZG9jdW1lbnQuZGVmYXVsdFZpZXcsdjVDb21wYXQ6bz0hMX09cixsPWkuaGlzdG9yeSxzPXd0LlBvcCxhPW51bGwsYz11KCk7Yz09bnVsbCYmKGM9MCxsLnJlcGxhY2VTdGF0ZSh5dCh7fSxsLnN0YXRlLHtpZHg6Y30pLCIiKSk7ZnVuY3Rpb24gdSgpe3JldHVybihsLnN0YXRlfHx7aWR4Om51bGx9KS5pZHh9ZnVuY3Rpb24gZCgpe3M9d3QuUG9wO2xldCB3PXUoKSx2PXc9PW51bGw/bnVsbDp3LWM7Yz13LGEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOm0ubG9jYXRpb24sZGVsdGE6dn0pfWZ1bmN0aW9uIGYodyx2KXtzPXd0LlB1c2g7bGV0IHg9VGMobS5sb2NhdGlvbix3LHYpO24mJm4oeCx3KSxjPXUoKSsxO2xldCBfPWcxKHgsYyksUz1tLmNyZWF0ZUhyZWYoeCk7dHJ5e2wucHVzaFN0YXRlKF8sIiIsUyl9Y2F0Y2goRSl7aWYoRSBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbiYmRS5uYW1lPT09IkRhdGFDbG9uZUVycm9yIil0aHJvdyBFO2kubG9jYXRpb24uYXNzaWduKFMpfW8mJmEmJmEoe2FjdGlvbjpzLGxvY2F0aW9uOm0ubG9jYXRpb24sZGVsdGE6MX0pfWZ1bmN0aW9uIHAodyx2KXtzPXd0LlJlcGxhY2U7bGV0IHg9VGMobS5sb2NhdGlvbix3LHYpO24mJm4oeCx3KSxjPXUoKTtsZXQgXz1nMSh4LGMpLFM9bS5jcmVhdGVIcmVmKHgpO2wucmVwbGFjZVN0YXRlKF8sIiIsUyksbyYmYSYmYSh7YWN0aW9uOnMsbG9jYXRpb246bS5sb2NhdGlvbixkZWx0YTowfSl9ZnVuY3Rpb24gZyh3KXtsZXQgdj1pLmxvY2F0aW9uLm9yaWdpbiE9PSJudWxsIj9pLmxvY2F0aW9uLm9yaWdpbjppLmxvY2F0aW9uLmhyZWYseD10eXBlb2Ygdz09InN0cmluZyI/dzpLYyh3KTtyZXR1cm4gT2UodiwiTm8gd2luZG93LmxvY2F0aW9uLihvcmlnaW58aHJlZikgYXZhaWxhYmxlIHRvIGNyZWF0ZSBVUkwgZm9yIGhyZWY6ICIreCksbmV3IFVSTCh4LHYpfWxldCBtPXtnZXQgYWN0aW9uKCl7cmV0dXJuIHN9LGdldCBsb2NhdGlvbigpe3JldHVybiB0KGksbCl9LGxpc3Rlbih3KXtpZihhKXRocm93IG5ldyBFcnJvcigiQSBoaXN0b3J5IG9ubHkgYWNjZXB0cyBvbmUgYWN0aXZlIGxpc3RlbmVyIik7cmV0dXJuIGkuYWRkRXZlbnRMaXN0ZW5lcihtMSxkKSxhPXcsKCk9PntpLnJlbW92ZUV2ZW50TGlzdGVuZXIobTEsZCksYT1udWxsfX0sY3JlYXRlSHJlZih3KXtyZXR1cm4gZShpLHcpfSxjcmVhdGVVUkw6ZyxlbmNvZGVMb2NhdGlvbih3KXtsZXQgdj1nKHcpO3JldHVybntwYXRobmFtZTp2LnBhdGhuYW1lLHNlYXJjaDp2LnNlYXJjaCxoYXNoOnYuaGFzaH19LHB1c2g6ZixyZXBsYWNlOnAsZ28odyl7cmV0dXJuIGwuZ28odyl9fTtyZXR1cm4gbX12YXIgU3Q7KGZ1bmN0aW9uKHQpe3QuZGF0YT0iZGF0YSIsdC5kZWZlcnJlZD0iZGVmZXJyZWQiLHQucmVkaXJlY3Q9InJlZGlyZWN0Iix0LmVycm9yPSJlcnJvciJ9KShTdHx8KFN0PXt9KSk7Y29uc3QgaUQ9bmV3IFNldChbImxhenkiLCJjYXNlU2Vuc2l0aXZlIiwicGF0aCIsImlkIiwiaW5kZXgiLCJjaGlsZHJlbiJdKTtmdW5jdGlvbiBvRCh0KXtyZXR1cm4gdC5pbmRleD09PSEwfWZ1bmN0aW9uIHJnKHQsZSxuLHIpe3JldHVybiBuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9e30pLHQubWFwKChpLG8pPT57bGV0IGw9Wy4uLm4sb10scz10eXBlb2YgaS5pZD09InN0cmluZyI/aS5pZDpsLmpvaW4oIi0iKTtpZihPZShpLmluZGV4IT09ITB8fCFpLmNoaWxkcmVuLCJDYW5ub3Qgc3BlY2lmeSBjaGlsZHJlbiBvbiBhbiBpbmRleCByb3V0ZSIpLE9lKCFyW3NdLCdGb3VuZCBhIHJvdXRlIGlkIGNvbGxpc2lvbiBvbiBpZCAiJytzK2AiLiAgUm91dGUgaWQncyBtdXN0IGJlIGdsb2JhbGx5IHVuaXF1ZSB3aXRoaW4gRGF0YSBSb3V0ZXIgdXNhZ2VzYCksb0QoaSkpe2xldCBhPXl0KHt9LGksZShpKSx7aWQ6c30pO3JldHVybiByW3NdPWEsYX1lbHNle2xldCBhPXl0KHt9LGksZShpKSx7aWQ6cyxjaGlsZHJlbjp2b2lkIDB9KTtyZXR1cm4gcltzXT1hLGkuY2hpbGRyZW4mJihhLmNoaWxkcmVuPXJnKGkuY2hpbGRyZW4sZSxsLHIpKSxhfX0pfWZ1bmN0aW9uIEtsKHQsZSxuKXtuPT09dm9pZCAwJiYobj0iLyIpO2xldCByPXR5cGVvZiBlPT0ic3RyaW5nIj9OaShlKTplLGk9WmMoci5wYXRobmFtZXx8Ii8iLG4pO2lmKGk9PW51bGwpcmV0dXJuIG51bGw7bGV0IG89UWIodCk7c0Qobyk7bGV0IGw9bnVsbDtmb3IobGV0IHM9MDtsPT1udWxsJiZzPG8ubGVuZ3RoOysrcylsPWdEKG9bc10seEQoaSkpO3JldHVybiBsfWZ1bmN0aW9uIGxEKHQsZSl7bGV0e3JvdXRlOm4scGF0aG5hbWU6cixwYXJhbXM6aX09dDtyZXR1cm57aWQ6bi5pZCxwYXRobmFtZTpyLHBhcmFtczppLGRhdGE6ZVtuLmlkXSxoYW5kbGU6bi5oYW5kbGV9fWZ1bmN0aW9uIFFiKHQsZSxuLHIpe2U9PT12b2lkIDAmJihlPVtdKSxuPT09dm9pZCAwJiYobj1bXSkscj09PXZvaWQgMCYmKHI9IiIpO2xldCBpPShvLGwscyk9PntsZXQgYT17cmVsYXRpdmVQYXRoOnM9PT12b2lkIDA/by5wYXRofHwiIjpzLGNhc2VTZW5zaXRpdmU6by5jYXNlU2Vuc2l0aXZlPT09ITAsY2hpbGRyZW5JbmRleDpsLHJvdXRlOm99O2EucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoIi8iKSYmKE9lKGEucmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgociksJ0Fic29sdXRlIHJvdXRlIHBhdGggIicrYS5yZWxhdGl2ZVBhdGgrJyIgbmVzdGVkIHVuZGVyIHBhdGggJysoJyInK3IrJyIgaXMgbm90IHZhbGlkLiBBbiBhYnNvbHV0ZSBjaGlsZCByb3V0ZSBwYXRoICcpKyJtdXN0IHN0YXJ0IHdpdGggdGhlIGNvbWJpbmVkIHBhdGggb2YgYWxsIGl0cyBwYXJlbnQgcm91dGVzLiIpLGEucmVsYXRpdmVQYXRoPWEucmVsYXRpdmVQYXRoLnNsaWNlKHIubGVuZ3RoKSk7bGV0IGM9aW8oW3IsYS5yZWxhdGl2ZVBhdGhdKSx1PW4uY29uY2F0KGEpO28uY2hpbGRyZW4mJm8uY2hpbGRyZW4ubGVuZ3RoPjAmJihPZShvLmluZGV4IT09ITAsIkluZGV4IHJvdXRlcyBtdXN0IG5vdCBoYXZlIGNoaWxkIHJvdXRlcy4gUGxlYXNlIHJlbW92ZSAiKygnYWxsIGNoaWxkIHJvdXRlcyBmcm9tIHJvdXRlIHBhdGggIicrYysnIi4nKSksUWIoby5jaGlsZHJlbixlLHUsYykpLCEoby5wYXRoPT1udWxsJiYhby5pbmRleCkmJmUucHVzaCh7cGF0aDpjLHNjb3JlOmhEKGMsby5pbmRleCkscm91dGVzTWV0YTp1fSl9O3JldHVybiB0LmZvckVhY2goKG8sbCk9Pnt2YXIgcztpZihvLnBhdGg9PT0iInx8ISgocz1vLnBhdGgpIT1udWxsJiZzLmluY2x1ZGVzKCI/IikpKWkobyxsKTtlbHNlIGZvcihsZXQgYSBvZiBxYihvLnBhdGgpKWkobyxsLGEpfSksZX1mdW5jdGlvbiBxYih0KXtsZXQgZT10LnNwbGl0KCIvIik7aWYoZS5sZW5ndGg9PT0wKXJldHVybltdO2xldFtuLC4uLnJdPWUsaT1uLmVuZHNXaXRoKCI/Iiksbz1uLnJlcGxhY2UoL1w/JC8sIiIpO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gaT9bbywiIl06W29dO2xldCBsPXFiKHIuam9pbigiLyIpKSxzPVtdO3JldHVybiBzLnB1c2goLi4ubC5tYXAoYT0+YT09PSIiP286W28sYV0uam9pbigiLyIpKSksaSYmcy5wdXNoKC4uLmwpLHMubWFwKGE9PnQuc3RhcnRzV2l0aCgiLyIpJiZhPT09IiI/Ii8iOmEpfWZ1bmN0aW9uIHNEKHQpe3Quc29ydCgoZSxuKT0+ZS5zY29yZSE9PW4uc2NvcmU/bi5zY29yZS1lLnNjb3JlOm1EKGUucm91dGVzTWV0YS5tYXAocj0+ci5jaGlsZHJlbkluZGV4KSxuLnJvdXRlc01ldGEubWFwKHI9PnIuY2hpbGRyZW5JbmRleCkpKX1jb25zdCBhRD0vXjpcdyskLyxjRD0zLHVEPTIsZEQ9MSxmRD0xMCxwRD0tMix2MT10PT50PT09IioiO2Z1bmN0aW9uIGhEKHQsZSl7bGV0IG49dC5zcGxpdCgiLyIpLHI9bi5sZW5ndGg7cmV0dXJuIG4uc29tZSh2MSkmJihyKz1wRCksZSYmKHIrPXVEKSxuLmZpbHRlcihpPT4hdjEoaSkpLnJlZHVjZSgoaSxvKT0+aSsoYUQudGVzdChvKT9jRDpvPT09IiI/ZEQ6ZkQpLHIpfWZ1bmN0aW9uIG1EKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZS5sZW5ndGgmJnQuc2xpY2UoMCwtMSkuZXZlcnkoKHIsaSk9PnI9PT1lW2ldKT90W3QubGVuZ3RoLTFdLWVbZS5sZW5ndGgtMV06MH1mdW5jdGlvbiBnRCh0LGUpe2xldHtyb3V0ZXNNZXRhOm59PXQscj17fSxpPSIvIixvPVtdO2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7KytsKXtsZXQgcz1uW2xdLGE9bD09PW4ubGVuZ3RoLTEsYz1pPT09Ii8iP2U6ZS5zbGljZShpLmxlbmd0aCl8fCIvIix1PXZEKHtwYXRoOnMucmVsYXRpdmVQYXRoLGNhc2VTZW5zaXRpdmU6cy5jYXNlU2Vuc2l0aXZlLGVuZDphfSxjKTtpZighdSlyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKHIsdS5wYXJhbXMpO2xldCBkPXMucm91dGU7by5wdXNoKHtwYXJhbXM6cixwYXRobmFtZTppbyhbaSx1LnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOkVEKGlvKFtpLHUucGF0aG5hbWVCYXNlXSkpLHJvdXRlOmR9KSx1LnBhdGhuYW1lQmFzZSE9PSIvIiYmKGk9aW8oW2ksdS5wYXRobmFtZUJhc2VdKSl9cmV0dXJuIG99ZnVuY3Rpb24gdkQodCxlKXt0eXBlb2YgdD09InN0cmluZyImJih0PXtwYXRoOnQsY2FzZVNlbnNpdGl2ZTohMSxlbmQ6ITB9KTtsZXRbbixyXT15RCh0LnBhdGgsdC5jYXNlU2Vuc2l0aXZlLHQuZW5kKSxpPWUubWF0Y2gobik7aWYoIWkpcmV0dXJuIG51bGw7bGV0IG89aVswXSxsPW8ucmVwbGFjZSgvKC4pXC8rJC8sIiQxIikscz1pLnNsaWNlKDEpO3JldHVybntwYXJhbXM6ci5yZWR1Y2UoKGMsdSxkKT0+e2xldHtwYXJhbU5hbWU6Zixpc09wdGlvbmFsOnB9PXU7aWYoZj09PSIqIil7bGV0IG09c1tkXXx8IiI7bD1vLnNsaWNlKDAsby5sZW5ndGgtbS5sZW5ndGgpLnJlcGxhY2UoLyguKVwvKyQvLCIkMSIpfWNvbnN0IGc9c1tkXTtyZXR1cm4gcCYmIWc/Y1tmXT12b2lkIDA6Y1tmXT1fRChnfHwiIixmKSxjfSx7fSkscGF0aG5hbWU6byxwYXRobmFtZUJhc2U6bCxwYXR0ZXJuOnR9fWZ1bmN0aW9uIHlEKHQsZSxuKXtlPT09dm9pZCAwJiYoZT0hMSksbj09PXZvaWQgMCYmKG49ITApLGxsKHQ9PT0iKiJ8fCF0LmVuZHNXaXRoKCIqIil8fHQuZW5kc1dpdGgoIi8qIiksJ1JvdXRlIHBhdGggIicrdCsnIiB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZSAnKygnIicrdC5yZXBsYWNlKC9cKiQvLCIvKiIpKyciIGJlY2F1c2UgdGhlIGAqYCBjaGFyYWN0ZXIgbXVzdCAnKSsiYWx3YXlzIGZvbGxvdyBhIGAvYCBpbiB0aGUgcGF0dGVybi4gVG8gZ2V0IHJpZCBvZiB0aGlzIHdhcm5pbmcsICIrKCdwbGVhc2UgY2hhbmdlIHRoZSByb3V0ZSBwYXRoIHRvICInK3QucmVwbGFjZSgvXCokLywiLyoiKSsnIi4nKSk7bGV0IHI9W10saT0iXiIrdC5yZXBsYWNlKC9cLypcKj8kLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKS5yZXBsYWNlKC9bXFwuKiteJHt9fCgpW1xdXS9nLCJcXCQmIikucmVwbGFjZSgvXC86KFx3KykoXD8pPy9nLChsLHMsYSk9PihyLnB1c2goe3BhcmFtTmFtZTpzLGlzT3B0aW9uYWw6YSE9bnVsbH0pLGE/Ii8/KFteXFwvXSspPyI6Ii8oW15cXC9dKykiKSk7cmV0dXJuIHQuZW5kc1dpdGgoIioiKT8oci5wdXNoKHtwYXJhbU5hbWU6IioifSksaSs9dD09PSIqInx8dD09PSIvKiI/IiguKikkIjoiKD86XFwvKC4rKXxcXC8qKSQiKTpuP2krPSJcXC8qJCI6dCE9PSIiJiZ0IT09Ii8iJiYoaSs9Iig/Oig/PVxcL3wkKSkiKSxbbmV3IFJlZ0V4cChpLGU/dm9pZCAwOiJpIikscl19ZnVuY3Rpb24geEQodCl7dHJ5e3JldHVybiBkZWNvZGVVUkkodCl9Y2F0Y2goZSl7cmV0dXJuIGxsKCExLCdUaGUgVVJMIHBhdGggIicrdCsnIiBjb3VsZCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlIGl0IGlzIGlzIGEgbWFsZm9ybWVkIFVSTCBzZWdtZW50LiBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byBhIGJhZCBwZXJjZW50ICcrKCJlbmNvZGluZyAoIitlKyIpLiIpKSx0fX1mdW5jdGlvbiBfRCh0LGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHQpfWNhdGNoKG4pe3JldHVybiBsbCghMSwnVGhlIHZhbHVlIGZvciB0aGUgVVJMIHBhcmFtICInK2UrJyIgd2lsbCBub3QgYmUgZGVjb2RlZCBiZWNhdXNlJysoJyB0aGUgc3RyaW5nICInK3QrJyIgaXMgYSBtYWxmb3JtZWQgVVJMIHNlZ21lbnQuIFRoaXMgaXMgcHJvYmFibHknKSsoIiBkdWUgdG8gYSBiYWQgcGVyY2VudCBlbmNvZGluZyAoIituKyIpLiIpKSx0fX1mdW5jdGlvbiBaYyh0LGUpe2lmKGU9PT0iLyIpcmV0dXJuIHQ7aWYoIXQudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIG51bGw7bGV0IG49ZS5lbmRzV2l0aCgiLyIpP2UubGVuZ3RoLTE6ZS5sZW5ndGgscj10LmNoYXJBdChuKTtyZXR1cm4gciYmciE9PSIvIj9udWxsOnQuc2xpY2Uobil8fCIvIn1mdW5jdGlvbiB3RCh0LGUpe2U9PT12b2lkIDAmJihlPSIvIik7bGV0e3BhdGhuYW1lOm4sc2VhcmNoOnI9IiIsaGFzaDppPSIifT10eXBlb2YgdD09InN0cmluZyI/TmkodCk6dDtyZXR1cm57cGF0aG5hbWU6bj9uLnN0YXJ0c1dpdGgoIi8iKT9uOlNEKG4sZSk6ZSxzZWFyY2g6Q0QociksaGFzaDpiRChpKX19ZnVuY3Rpb24gU0QodCxlKXtsZXQgbj1lLnJlcGxhY2UoL1wvKyQvLCIiKS5zcGxpdCgiLyIpO3JldHVybiB0LnNwbGl0KCIvIikuZm9yRWFjaChpPT57aT09PSIuLiI/bi5sZW5ndGg+MSYmbi5wb3AoKTppIT09Ii4iJiZuLnB1c2goaSl9KSxuLmxlbmd0aD4xP24uam9pbigiLyIpOiIvIn1mdW5jdGlvbiB0aCh0LGUsbixyKXtyZXR1cm4iQ2Fubm90IGluY2x1ZGUgYSAnIit0KyInIGNoYXJhY3RlciBpbiBhIG1hbnVhbGx5IHNwZWNpZmllZCAiKygiYHRvLiIrZSsiYCBmaWVsZCBbIitKU09OLnN0cmluZ2lmeShyKSsiXS4gIFBsZWFzZSBzZXBhcmF0ZSBpdCBvdXQgdG8gdGhlICIpKygiYHRvLiIrbisiYCBmaWVsZC4gQWx0ZXJuYXRpdmVseSB5b3UgbWF5IHByb3ZpZGUgdGhlIGZ1bGwgcGF0aCBhcyAiKSsnYSBzdHJpbmcgaW4gPExpbmsgdG89Ii4uLiI+IGFuZCB0aGUgcm91dGVyIHdpbGwgcGFyc2UgaXQgZm9yIHlvdS4nfWZ1bmN0aW9uIGVrKHQpe3JldHVybiB0LmZpbHRlcigoZSxuKT0+bj09PTB8fGUucm91dGUucGF0aCYmZS5yb3V0ZS5wYXRoLmxlbmd0aD4wKX1mdW5jdGlvbiB0ayh0KXtyZXR1cm4gZWsodCkubWFwKChlLG4pPT5uPT09dC5sZW5ndGgtMT9lLnBhdGhuYW1lOmUucGF0aG5hbWVCYXNlKX1mdW5jdGlvbiBuayh0LGUsbixyKXtyPT09dm9pZCAwJiYocj0hMSk7bGV0IGk7dHlwZW9mIHQ9PSJzdHJpbmciP2k9TmkodCk6KGk9eXQoe30sdCksT2UoIWkucGF0aG5hbWV8fCFpLnBhdGhuYW1lLmluY2x1ZGVzKCI/IiksdGgoIj8iLCJwYXRobmFtZSIsInNlYXJjaCIsaSkpLE9lKCFpLnBhdGhuYW1lfHwhaS5wYXRobmFtZS5pbmNsdWRlcygiIyIpLHRoKCIjIiwicGF0aG5hbWUiLCJoYXNoIixpKSksT2UoIWkuc2VhcmNofHwhaS5zZWFyY2guaW5jbHVkZXMoIiMiKSx0aCgiIyIsInNlYXJjaCIsImhhc2giLGkpKSk7bGV0IG89dD09PSIifHxpLnBhdGhuYW1lPT09IiIsbD1vPyIvIjppLnBhdGhuYW1lLHM7aWYobD09bnVsbClzPW47ZWxzZSBpZihyKXtsZXQgZD1lW2UubGVuZ3RoLTFdLnJlcGxhY2UoL15cLy8sIiIpLnNwbGl0KCIvIik7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQucG9wKCk7aS5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPSIvIitkLmpvaW4oIi8iKX1lbHNle2xldCBkPWUubGVuZ3RoLTE7aWYobC5zdGFydHNXaXRoKCIuLiIpKXtsZXQgZj1sLnNwbGl0KCIvIik7Zm9yKDtmWzBdPT09Ii4uIjspZi5zaGlmdCgpLGQtPTE7aS5wYXRobmFtZT1mLmpvaW4oIi8iKX1zPWQ+PTA/ZVtkXToiLyJ9bGV0IGE9d0QoaSxzKSxjPWwmJmwhPT0iLyImJmwuZW5kc1dpdGgoIi8iKSx1PShvfHxsPT09Ii4iKSYmbi5lbmRzV2l0aCgiLyIpO3JldHVybiFhLnBhdGhuYW1lLmVuZHNXaXRoKCIvIikmJihjfHx1KSYmKGEucGF0aG5hbWUrPSIvIiksYX1jb25zdCBpbz10PT50LmpvaW4oIi8iKS5yZXBsYWNlKC9cL1wvKy9nLCIvIiksRUQ9dD0+dC5yZXBsYWNlKC9cLyskLywiIikucmVwbGFjZSgvXlwvKi8sIi8iKSxDRD10PT4hdHx8dD09PSI/Ij8iIjp0LnN0YXJ0c1dpdGgoIj8iKT90OiI/Iit0LGJEPXQ9PiF0fHx0PT09IiMiPyIiOnQuc3RhcnRzV2l0aCgiIyIpP3Q6IiMiK3Q7Y2xhc3MgdXl7Y29uc3RydWN0b3IoZSxuLHIsaSl7aT09PXZvaWQgMCYmKGk9ITEpLHRoaXMuc3RhdHVzPWUsdGhpcy5zdGF0dXNUZXh0PW58fCIiLHRoaXMuaW50ZXJuYWw9aSxyIGluc3RhbmNlb2YgRXJyb3I/KHRoaXMuZGF0YT1yLnRvU3RyaW5nKCksdGhpcy5lcnJvcj1yKTp0aGlzLmRhdGE9cn19ZnVuY3Rpb24gcmsodCl7cmV0dXJuIHQhPW51bGwmJnR5cGVvZiB0LnN0YXR1cz09Im51bWJlciImJnR5cGVvZiB0LnN0YXR1c1RleHQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5pbnRlcm5hbD09ImJvb2xlYW4iJiYiZGF0YSJpbiB0fWNvbnN0IGlrPVsicG9zdCIsInB1dCIsInBhdGNoIiwiZGVsZXRlIl0sa0Q9bmV3IFNldChpayksJEQ9WyJnZXQiLC4uLmlrXSxURD1uZXcgU2V0KCREKSxORD1uZXcgU2V0KFszMDEsMzAyLDMwMywzMDcsMzA4XSksUkQ9bmV3IFNldChbMzA3LDMwOF0pLG5oPXtzdGF0ZToiaWRsZSIsbG9jYXRpb246dm9pZCAwLGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9LE9EPXtzdGF0ZToiaWRsZSIsZGF0YTp2b2lkIDAsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMH0sb2E9e3N0YXRlOiJ1bmJsb2NrZWQiLHByb2NlZWQ6dm9pZCAwLHJlc2V0OnZvaWQgMCxsb2NhdGlvbjp2b2lkIDB9LG9rPS9eKD86W2Etel1bYS16MC05Ky4tXSo6fFwvXC8pL2ksUEQ9dD0+KHtoYXNFcnJvckJvdW5kYXJ5OiEhdC5oYXNFcnJvckJvdW5kYXJ5fSksbGs9InJlbWl4LXJvdXRlci10cmFuc2l0aW9ucyI7ZnVuY3Rpb24gQUQodCl7Y29uc3QgZT10LndpbmRvdz90LndpbmRvdzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwLG49dHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5kb2N1bWVudDwidSImJnR5cGVvZiBlLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQ8InUiLHI9IW47T2UodC5yb3V0ZXMubGVuZ3RoPjAsIllvdSBtdXN0IHByb3ZpZGUgYSBub24tZW1wdHkgcm91dGVzIGFycmF5IHRvIGNyZWF0ZVJvdXRlciIpO2xldCBpO2lmKHQubWFwUm91dGVQcm9wZXJ0aWVzKWk9dC5tYXBSb3V0ZVByb3BlcnRpZXM7ZWxzZSBpZih0LmRldGVjdEVycm9yQm91bmRhcnkpe2xldCAkPXQuZGV0ZWN0RXJyb3JCb3VuZGFyeTtpPU09Pih7aGFzRXJyb3JCb3VuZGFyeTokKE0pfSl9ZWxzZSBpPVBEO2xldCBvPXt9LGw9cmcodC5yb3V0ZXMsaSx2b2lkIDAsbykscyxhPXQuYmFzZW5hbWV8fCIvIixjPXl0KHt2N19mZXRjaGVyUGVyc2lzdDohMSx2N19ub3JtYWxpemVGb3JtTWV0aG9kOiExLHY3X3ByZXBlbmRCYXNlbmFtZTohMX0sdC5mdXR1cmUpLHU9bnVsbCxkPW5ldyBTZXQsZj1udWxsLHA9bnVsbCxnPW51bGwsbT10Lmh5ZHJhdGlvbkRhdGEhPW51bGwsdz1LbChsLHQuaGlzdG9yeS5sb2NhdGlvbixhKSx2PW51bGw7aWYodz09bnVsbCl7bGV0ICQ9Sm4oNDA0LHtwYXRobmFtZTp0Lmhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWV9KSx7bWF0Y2hlczpNLHJvdXRlOkZ9PWIxKGwpO3c9TSx2PXtbRi5pZF06JH19bGV0IHg9IXcuc29tZSgkPT4kLnJvdXRlLmxhenkpJiYoIXcuc29tZSgkPT4kLnJvdXRlLmxvYWRlcil8fHQuaHlkcmF0aW9uRGF0YSE9bnVsbCksXyxTPXtoaXN0b3J5QWN0aW9uOnQuaGlzdG9yeS5hY3Rpb24sbG9jYXRpb246dC5oaXN0b3J5LmxvY2F0aW9uLG1hdGNoZXM6dyxpbml0aWFsaXplZDp4LG5hdmlnYXRpb246bmgscmVzdG9yZVNjcm9sbFBvc2l0aW9uOnQuaHlkcmF0aW9uRGF0YSE9bnVsbD8hMTpudWxsLHByZXZlbnRTY3JvbGxSZXNldDohMSxyZXZhbGlkYXRpb246ImlkbGUiLGxvYWRlckRhdGE6dC5oeWRyYXRpb25EYXRhJiZ0Lmh5ZHJhdGlvbkRhdGEubG9hZGVyRGF0YXx8e30sYWN0aW9uRGF0YTp0Lmh5ZHJhdGlvbkRhdGEmJnQuaHlkcmF0aW9uRGF0YS5hY3Rpb25EYXRhfHxudWxsLGVycm9yczp0Lmh5ZHJhdGlvbkRhdGEmJnQuaHlkcmF0aW9uRGF0YS5lcnJvcnN8fHYsZmV0Y2hlcnM6bmV3IE1hcCxibG9ja2VyczpuZXcgTWFwfSxFPXd0LlBvcCxrPSExLEMsTj0hMSxBPW5ldyBNYXAsVD1udWxsLEQ9ITEsTD0hMSxLPVtdLEI9W10sWj1uZXcgTWFwLFI9MCxQPS0xLGI9bmV3IE1hcCxqPW5ldyBTZXQsej1uZXcgTWFwLEc9bmV3IE1hcCxyZT1uZXcgU2V0LGJlPW5ldyBNYXAseWU9bmV3IE1hcCxXZT0hMTtmdW5jdGlvbiBGZSgpe2lmKHU9dC5oaXN0b3J5Lmxpc3RlbigkPT57bGV0e2FjdGlvbjpNLGxvY2F0aW9uOkYsZGVsdGE6WX09JDtpZihXZSl7V2U9ITE7cmV0dXJufWxsKHllLnNpemU9PT0wfHxZIT1udWxsLCJZb3UgYXJlIHRyeWluZyB0byB1c2UgYSBibG9ja2VyIG9uIGEgUE9QIG5hdmlnYXRpb24gdG8gYSBsb2NhdGlvbiB0aGF0IHdhcyBub3QgY3JlYXRlZCBieSBAcmVtaXgtcnVuL3JvdXRlci4gVGhpcyB3aWxsIGZhaWwgc2lsZW50bHkgaW4gcHJvZHVjdGlvbi4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBhcmUgbmF2aWdhdGluZyBvdXRzaWRlIHRoZSByb3V0ZXIgdmlhIGB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGVgL2B3aW5kb3cubG9jYXRpb24uaGFzaGAgaW5zdGVhZCBvZiB1c2luZyByb3V0ZXIgbmF2aWdhdGlvbiBBUElzLiAgVGhpcyBjYW4gYWxzbyBoYXBwZW4gaWYgeW91IGFyZSB1c2luZyBjcmVhdGVIYXNoUm91dGVyIGFuZCB0aGUgdXNlciBtYW51YWxseSBjaGFuZ2VzIHRoZSBVUkwuIik7bGV0IGxlPWd5KHtjdXJyZW50TG9jYXRpb246Uy5sb2NhdGlvbixuZXh0TG9jYXRpb246RixoaXN0b3J5QWN0aW9uOk19KTtpZihsZSYmWSE9bnVsbCl7V2U9ITAsdC5oaXN0b3J5LmdvKFkqLTEpLEdjKGxlLHtzdGF0ZToiYmxvY2tlZCIsbG9jYXRpb246Rixwcm9jZWVkKCl7R2MobGUse3N0YXRlOiJwcm9jZWVkaW5nIixwcm9jZWVkOnZvaWQgMCxyZXNldDp2b2lkIDAsbG9jYXRpb246Rn0pLHQuaGlzdG9yeS5nbyhZKX0scmVzZXQoKXtsZXQga2U9bmV3IE1hcChTLmJsb2NrZXJzKTtrZS5zZXQobGUsb2EpLCRlKHtibG9ja2VyczprZX0pfX0pO3JldHVybn1yZXR1cm4gSmUoTSxGKX0pLG4pe0hEKGUsQSk7bGV0ICQ9KCk9PlZEKGUsQSk7ZS5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsJCksVD0oKT0+ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsJCl9cmV0dXJuIFMuaW5pdGlhbGl6ZWR8fEplKHd0LlBvcCxTLmxvY2F0aW9uKSxffWZ1bmN0aW9uIG5lKCl7dSYmdSgpLFQmJlQoKSxkLmNsZWFyKCksQyYmQy5hYm9ydCgpLFMuZmV0Y2hlcnMuZm9yRWFjaCgoJCxNKT0+TW4oTSkpLFMuYmxvY2tlcnMuZm9yRWFjaCgoJCxNKT0+bXkoTSkpfWZ1bmN0aW9uIEllKCQpe3JldHVybiBkLmFkZCgkKSwoKT0+ZC5kZWxldGUoJCl9ZnVuY3Rpb24gJGUoJCxNKXtNPT09dm9pZCAwJiYoTT17fSksUz15dCh7fSxTLCQpO2xldCBGPVtdLFk9W107Yy52N19mZXRjaGVyUGVyc2lzdCYmUy5mZXRjaGVycy5mb3JFYWNoKChsZSxrZSk9PntsZS5zdGF0ZT09PSJpZGxlIiYmKHJlLmhhcyhrZSk/WS5wdXNoKGtlKTpGLnB1c2goa2UpKX0pLFsuLi5kXS5mb3JFYWNoKGxlPT5sZShTLHtkZWxldGVkRmV0Y2hlcnM6WSx1bnN0YWJsZV92aWV3VHJhbnNpdGlvbk9wdHM6TS52aWV3VHJhbnNpdGlvbk9wdHMsdW5zdGFibGVfZmx1c2hTeW5jOk0uZmx1c2hTeW5jPT09ITB9KSksYy52N19mZXRjaGVyUGVyc2lzdCYmKEYuZm9yRWFjaChsZT0+Uy5mZXRjaGVycy5kZWxldGUobGUpKSxZLmZvckVhY2gobGU9Pk1uKGxlKSkpfWZ1bmN0aW9uIFJlKCQsTSxGKXt2YXIgWSxsZTtsZXR7Zmx1c2hTeW5jOmtlfT1GPT09dm9pZCAwP3t9OkYscGU9Uy5hY3Rpb25EYXRhIT1udWxsJiZTLm5hdmlnYXRpb24uZm9ybU1ldGhvZCE9bnVsbCYmeXIoUy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QpJiZTLm5hdmlnYXRpb24uc3RhdGU9PT0ibG9hZGluZyImJigoWT0kLnN0YXRlKT09bnVsbD92b2lkIDA6WS5faXNSZWRpcmVjdCkhPT0hMCxmZTtNLmFjdGlvbkRhdGE/T2JqZWN0LmtleXMoTS5hY3Rpb25EYXRhKS5sZW5ndGg+MD9mZT1NLmFjdGlvbkRhdGE6ZmU9bnVsbDpwZT9mZT1TLmFjdGlvbkRhdGE6ZmU9bnVsbDtsZXQgYWU9TS5sb2FkZXJEYXRhP0MxKFMubG9hZGVyRGF0YSxNLmxvYWRlckRhdGEsTS5tYXRjaGVzfHxbXSxNLmVycm9ycyk6Uy5sb2FkZXJEYXRhLEFlPVMuYmxvY2tlcnM7QWUuc2l6ZT4wJiYoQWU9bmV3IE1hcChBZSksQWUuZm9yRWFjaCgoWmUsY3QpPT5BZS5zZXQoY3Qsb2EpKSk7bGV0IEh0PWs9PT0hMHx8Uy5uYXZpZ2F0aW9uLmZvcm1NZXRob2QhPW51bGwmJnlyKFMubmF2aWdhdGlvbi5mb3JtTWV0aG9kKSYmKChsZT0kLnN0YXRlKT09bnVsbD92b2lkIDA6bGUuX2lzUmVkaXJlY3QpIT09ITA7cyYmKGw9cyxzPXZvaWQgMCksRHx8RT09PXd0LlBvcHx8KEU9PT13dC5QdXNoP3QuaGlzdG9yeS5wdXNoKCQsJC5zdGF0ZSk6RT09PXd0LlJlcGxhY2UmJnQuaGlzdG9yeS5yZXBsYWNlKCQsJC5zdGF0ZSkpO2xldCBUZTtpZihFPT09d3QuUG9wKXtsZXQgWmU9QS5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7WmUmJlplLmhhcygkLnBhdGhuYW1lKT9UZT17Y3VycmVudExvY2F0aW9uOlMubG9jYXRpb24sbmV4dExvY2F0aW9uOiR9OkEuaGFzKCQucGF0aG5hbWUpJiYoVGU9e2N1cnJlbnRMb2NhdGlvbjokLG5leHRMb2NhdGlvbjpTLmxvY2F0aW9ufSl9ZWxzZSBpZihOKXtsZXQgWmU9QS5nZXQoUy5sb2NhdGlvbi5wYXRobmFtZSk7WmU/WmUuYWRkKCQucGF0aG5hbWUpOihaZT1uZXcgU2V0KFskLnBhdGhuYW1lXSksQS5zZXQoUy5sb2NhdGlvbi5wYXRobmFtZSxaZSkpLFRlPXtjdXJyZW50TG9jYXRpb246Uy5sb2NhdGlvbixuZXh0TG9jYXRpb246JH19JGUoeXQoe30sTSx7YWN0aW9uRGF0YTpmZSxsb2FkZXJEYXRhOmFlLGhpc3RvcnlBY3Rpb246RSxsb2NhdGlvbjokLGluaXRpYWxpemVkOiEwLG5hdmlnYXRpb246bmgscmV2YWxpZGF0aW9uOiJpZGxlIixyZXN0b3JlU2Nyb2xsUG9zaXRpb246eXkoJCxNLm1hdGNoZXN8fFMubWF0Y2hlcykscHJldmVudFNjcm9sbFJlc2V0Okh0LGJsb2NrZXJzOkFlfSkse3ZpZXdUcmFuc2l0aW9uT3B0czpUZSxmbHVzaFN5bmM6a2U9PT0hMH0pLEU9d3QuUG9wLGs9ITEsTj0hMSxEPSExLEw9ITEsSz1bXSxCPVtdfWFzeW5jIGZ1bmN0aW9uIFNlKCQsTSl7aWYodHlwZW9mICQ9PSJudW1iZXIiKXt0Lmhpc3RvcnkuZ28oJCk7cmV0dXJufWxldCBGPWlnKFMubG9jYXRpb24sUy5tYXRjaGVzLGEsYy52N19wcmVwZW5kQmFzZW5hbWUsJCxNPT1udWxsP3ZvaWQgMDpNLmZyb21Sb3V0ZUlkLE09PW51bGw/dm9pZCAwOk0ucmVsYXRpdmUpLHtwYXRoOlksc3VibWlzc2lvbjpsZSxlcnJvcjprZX09eTEoYy52N19ub3JtYWxpemVGb3JtTWV0aG9kLCExLEYsTSkscGU9Uy5sb2NhdGlvbixmZT1UYyhTLmxvY2F0aW9uLFksTSYmTS5zdGF0ZSk7ZmU9eXQoe30sZmUsdC5oaXN0b3J5LmVuY29kZUxvY2F0aW9uKGZlKSk7bGV0IGFlPU0mJk0ucmVwbGFjZSE9bnVsbD9NLnJlcGxhY2U6dm9pZCAwLEFlPXd0LlB1c2g7YWU9PT0hMD9BZT13dC5SZXBsYWNlOmFlPT09ITF8fGxlIT1udWxsJiZ5cihsZS5mb3JtTWV0aG9kKSYmbGUuZm9ybUFjdGlvbj09PVMubG9jYXRpb24ucGF0aG5hbWUrUy5sb2NhdGlvbi5zZWFyY2gmJihBZT13dC5SZXBsYWNlKTtsZXQgSHQ9TSYmInByZXZlbnRTY3JvbGxSZXNldCJpbiBNP00ucHJldmVudFNjcm9sbFJlc2V0PT09ITA6dm9pZCAwLFRlPShNJiZNLnVuc3RhYmxlX2ZsdXNoU3luYyk9PT0hMCxaZT1neSh7Y3VycmVudExvY2F0aW9uOnBlLG5leHRMb2NhdGlvbjpmZSxoaXN0b3J5QWN0aW9uOkFlfSk7aWYoWmUpe0djKFplLHtzdGF0ZToiYmxvY2tlZCIsbG9jYXRpb246ZmUscHJvY2VlZCgpe0djKFplLHtzdGF0ZToicHJvY2VlZGluZyIscHJvY2VlZDp2b2lkIDAscmVzZXQ6dm9pZCAwLGxvY2F0aW9uOmZlfSksU2UoJCxNKX0scmVzZXQoKXtsZXQgY3Q9bmV3IE1hcChTLmJsb2NrZXJzKTtjdC5zZXQoWmUsb2EpLCRlKHtibG9ja2VyczpjdH0pfX0pO3JldHVybn1yZXR1cm4gYXdhaXQgSmUoQWUsZmUse3N1Ym1pc3Npb246bGUscGVuZGluZ0Vycm9yOmtlLHByZXZlbnRTY3JvbGxSZXNldDpIdCxyZXBsYWNlOk0mJk0ucmVwbGFjZSxlbmFibGVWaWV3VHJhbnNpdGlvbjpNJiZNLnVuc3RhYmxlX3ZpZXdUcmFuc2l0aW9uLGZsdXNoU3luYzpUZX0pfWZ1bmN0aW9uIExlKCl7aWYoYm4oKSwkZSh7cmV2YWxpZGF0aW9uOiJsb2FkaW5nIn0pLFMubmF2aWdhdGlvbi5zdGF0ZSE9PSJzdWJtaXR0aW5nIil7aWYoUy5uYXZpZ2F0aW9uLnN0YXRlPT09ImlkbGUiKXtKZShTLmhpc3RvcnlBY3Rpb24sUy5sb2NhdGlvbix7c3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uOiEwfSk7cmV0dXJufUplKEV8fFMuaGlzdG9yeUFjdGlvbixTLm5hdmlnYXRpb24ubG9jYXRpb24se292ZXJyaWRlTmF2aWdhdGlvbjpTLm5hdmlnYXRpb259KX19YXN5bmMgZnVuY3Rpb24gSmUoJCxNLEYpe0MmJkMuYWJvcnQoKSxDPW51bGwsRT0kLEQ9KEYmJkYuc3RhcnRVbmludGVycnVwdGVkUmV2YWxpZGF0aW9uKT09PSEwLEVrKFMubG9jYXRpb24sUy5tYXRjaGVzKSxrPShGJiZGLnByZXZlbnRTY3JvbGxSZXNldCk9PT0hMCxOPShGJiZGLmVuYWJsZVZpZXdUcmFuc2l0aW9uKT09PSEwO2xldCBZPXN8fGwsbGU9RiYmRi5vdmVycmlkZU5hdmlnYXRpb24sa2U9S2woWSxNLGEpLHBlPShGJiZGLmZsdXNoU3luYyk9PT0hMDtpZigha2Upe2xldCBjdD1Kbig0MDQse3BhdGhuYW1lOk0ucGF0aG5hbWV9KSx7bWF0Y2hlczp1bixyb3V0ZTpPcn09YjEoWSk7b3AoKSxSZShNLHttYXRjaGVzOnVuLGxvYWRlckRhdGE6e30sZXJyb3JzOntbT3IuaWRdOmN0fX0se2ZsdXNoU3luYzpwZX0pO3JldHVybn1pZihTLmluaXRpYWxpemVkJiYhTCYmakQoUy5sb2NhdGlvbixNKSYmIShGJiZGLnN1Ym1pc3Npb24mJnlyKEYuc3VibWlzc2lvbi5mb3JtTWV0aG9kKSkpe1JlKE0se21hdGNoZXM6a2V9LHtmbHVzaFN5bmM6cGV9KTtyZXR1cm59Qz1uZXcgQWJvcnRDb250cm9sbGVyO2xldCBmZT1zYSh0Lmhpc3RvcnksTSxDLnNpZ25hbCxGJiZGLnN1Ym1pc3Npb24pLGFlLEFlO2lmKEYmJkYucGVuZGluZ0Vycm9yKUFlPXtbamEoa2UpLnJvdXRlLmlkXTpGLnBlbmRpbmdFcnJvcn07ZWxzZSBpZihGJiZGLnN1Ym1pc3Npb24mJnlyKEYuc3VibWlzc2lvbi5mb3JtTWV0aG9kKSl7bGV0IGN0PWF3YWl0IFd0KGZlLE0sRi5zdWJtaXNzaW9uLGtlLHtyZXBsYWNlOkYucmVwbGFjZSxmbHVzaFN5bmM6cGV9KTtpZihjdC5zaG9ydENpcmN1aXRlZClyZXR1cm47YWU9Y3QucGVuZGluZ0FjdGlvbkRhdGEsQWU9Y3QucGVuZGluZ0FjdGlvbkVycm9yLGxlPXJoKE0sRi5zdWJtaXNzaW9uKSxwZT0hMSxmZT1uZXcgUmVxdWVzdChmZS51cmwse3NpZ25hbDpmZS5zaWduYWx9KX1sZXR7c2hvcnRDaXJjdWl0ZWQ6SHQsbG9hZGVyRGF0YTpUZSxlcnJvcnM6WmV9PWF3YWl0IENuKGZlLE0sa2UsbGUsRiYmRi5zdWJtaXNzaW9uLEYmJkYuZmV0Y2hlclN1Ym1pc3Npb24sRiYmRi5yZXBsYWNlLHBlLGFlLEFlKTtIdHx8KEM9bnVsbCxSZShNLHl0KHttYXRjaGVzOmtlfSxhZT97YWN0aW9uRGF0YTphZX06e30se2xvYWRlckRhdGE6VGUsZXJyb3JzOlplfSkpKX1hc3luYyBmdW5jdGlvbiBXdCgkLE0sRixZLGxlKXtsZT09PXZvaWQgMCYmKGxlPXt9KSxibigpO2xldCBrZT1VRChNLEYpOyRlKHtuYXZpZ2F0aW9uOmtlfSx7Zmx1c2hTeW5jOmxlLmZsdXNoU3luYz09PSEwfSk7bGV0IHBlLGZlPWxnKFksTSk7aWYoIWZlLnJvdXRlLmFjdGlvbiYmIWZlLnJvdXRlLmxhenkpcGU9e3R5cGU6U3QuZXJyb3IsZXJyb3I6Sm4oNDA1LHttZXRob2Q6JC5tZXRob2QscGF0aG5hbWU6TS5wYXRobmFtZSxyb3V0ZUlkOmZlLnJvdXRlLmlkfSl9O2Vsc2UgaWYocGU9YXdhaXQgbGEoImFjdGlvbiIsJCxmZSxZLG8saSxhKSwkLnNpZ25hbC5hYm9ydGVkKXJldHVybntzaG9ydENpcmN1aXRlZDohMH07aWYob3MocGUpKXtsZXQgYWU7cmV0dXJuIGxlJiZsZS5yZXBsYWNlIT1udWxsP2FlPWxlLnJlcGxhY2U6YWU9cGUubG9jYXRpb249PT1TLmxvY2F0aW9uLnBhdGhuYW1lK1MubG9jYXRpb24uc2VhcmNoLGF3YWl0IGF0KFMscGUse3N1Ym1pc3Npb246RixyZXBsYWNlOmFlfSkse3Nob3J0Q2lyY3VpdGVkOiEwfX1pZih6YShwZSkpe2xldCBhZT1qYShZLGZlLnJvdXRlLmlkKTtyZXR1cm4obGUmJmxlLnJlcGxhY2UpIT09ITAmJihFPXd0LlB1c2gpLHtwZW5kaW5nQWN0aW9uRGF0YTp7fSxwZW5kaW5nQWN0aW9uRXJyb3I6e1thZS5yb3V0ZS5pZF06cGUuZXJyb3J9fX1pZihJbyhwZSkpdGhyb3cgSm4oNDAwLHt0eXBlOiJkZWZlci1hY3Rpb24ifSk7cmV0dXJue3BlbmRpbmdBY3Rpb25EYXRhOntbZmUucm91dGUuaWRdOnBlLmRhdGF9fX1hc3luYyBmdW5jdGlvbiBDbigkLE0sRixZLGxlLGtlLHBlLGZlLGFlLEFlKXtsZXQgSHQ9WXx8cmgoTSxsZSksVGU9bGV8fGtlfHxUMShIdCksWmU9c3x8bCxbY3QsdW5dPXgxKHQuaGlzdG9yeSxTLEYsVGUsTSxMLEssQixyZSx6LGosWmUsYSxhZSxBZSk7aWYob3AoR2U9PiEoRiYmRi5zb21lKFhuPT5Ybi5yb3V0ZS5pZD09PUdlKSl8fGN0JiZjdC5zb21lKFhuPT5Ybi5yb3V0ZS5pZD09PUdlKSksUD0rK1IsY3QubGVuZ3RoPT09MCYmdW4ubGVuZ3RoPT09MCl7bGV0IEdlPWJvKCk7cmV0dXJuIFJlKE0seXQoe21hdGNoZXM6Rixsb2FkZXJEYXRhOnt9LGVycm9yczpBZXx8bnVsbH0sYWU/e2FjdGlvbkRhdGE6YWV9Ont9LEdlP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSkse2ZsdXNoU3luYzpmZX0pLHtzaG9ydENpcmN1aXRlZDohMH19aWYoIUQpe3VuLmZvckVhY2goWG49PntsZXQgYnQ9Uy5mZXRjaGVycy5nZXQoWG4ua2V5KSxrbz1hYSh2b2lkIDAsYnQ/YnQuZGF0YTp2b2lkIDApO1MuZmV0Y2hlcnMuc2V0KFhuLmtleSxrbyl9KTtsZXQgR2U9YWV8fFMuYWN0aW9uRGF0YTskZSh5dCh7bmF2aWdhdGlvbjpIdH0sR2U/T2JqZWN0LmtleXMoR2UpLmxlbmd0aD09PTA/e2FjdGlvbkRhdGE6bnVsbH06e2FjdGlvbkRhdGE6R2V9Ont9LHVuLmxlbmd0aD4wP3tmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfTp7fSkse2ZsdXNoU3luYzpmZX0pfXVuLmZvckVhY2goR2U9PntaLmhhcyhHZS5rZXkpJiZndChHZS5rZXkpLEdlLmNvbnRyb2xsZXImJlouc2V0KEdlLmtleSxHZS5jb250cm9sbGVyKX0pO2xldCBPcj0oKT0+dW4uZm9yRWFjaChHZT0+Z3QoR2Uua2V5KSk7QyYmQy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLE9yKTtsZXR7cmVzdWx0czpIcyxsb2FkZXJSZXN1bHRzOmxwLGZldGNoZXJSZXN1bHRzOnZsfT1hd2FpdCBhbihTLm1hdGNoZXMsRixjdCx1biwkKTtpZigkLnNpZ25hbC5hYm9ydGVkKXJldHVybntzaG9ydENpcmN1aXRlZDohMH07QyYmQy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLE9yKSx1bi5mb3JFYWNoKEdlPT5aLmRlbGV0ZShHZS5rZXkpKTtsZXQgZHI9azEoSHMpO2lmKGRyKXtpZihkci5pZHg+PWN0Lmxlbmd0aCl7bGV0IEdlPXVuW2RyLmlkeC1jdC5sZW5ndGhdLmtleTtqLmFkZChHZSl9cmV0dXJuIGF3YWl0IGF0KFMsZHIucmVzdWx0LHtyZXBsYWNlOnBlfSkse3Nob3J0Q2lyY3VpdGVkOiEwfX1sZXR7bG9hZGVyRGF0YTpZYyxlcnJvcnM6c3B9PUUxKFMsRixjdCxscCxBZSx1bix2bCxiZSk7YmUuZm9yRWFjaCgoR2UsWG4pPT57R2Uuc3Vic2NyaWJlKGJ0PT57KGJ0fHxHZS5kb25lKSYmYmUuZGVsZXRlKFhuKX0pfSk7bGV0IGFwPWJvKCksY3A9V3MoUCkseWw9YXB8fGNwfHx1bi5sZW5ndGg+MDtyZXR1cm4geXQoe2xvYWRlckRhdGE6WWMsZXJyb3JzOnNwfSx5bD97ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX06e30pfWZ1bmN0aW9uIHVyKCQsTSxGLFkpe2lmKHIpdGhyb3cgbmV3IEVycm9yKCJyb3V0ZXIuZmV0Y2goKSB3YXMgY2FsbGVkIGR1cmluZyB0aGUgc2VydmVyIHJlbmRlciwgYnV0IGl0IHNob3VsZG4ndCBiZS4gWW91IGFyZSBsaWtlbHkgY2FsbGluZyBhIHVzZUZldGNoZXIoKSBtZXRob2QgaW4gdGhlIGJvZHkgb2YgeW91ciBjb21wb25lbnQuIFRyeSBtb3ZpbmcgaXQgdG8gYSB1c2VFZmZlY3Qgb3IgYSBjYWxsYmFjay4iKTtaLmhhcygkKSYmZ3QoJCk7bGV0IGxlPShZJiZZLnVuc3RhYmxlX2ZsdXNoU3luYyk9PT0hMCxrZT1zfHxsLHBlPWlnKFMubG9jYXRpb24sUy5tYXRjaGVzLGEsYy52N19wcmVwZW5kQmFzZW5hbWUsRixNLFk9PW51bGw/dm9pZCAwOlkucmVsYXRpdmUpLGZlPUtsKGtlLHBlLGEpO2lmKCFmZSl7QXQoJCxNLEpuKDQwNCx7cGF0aG5hbWU6cGV9KSx7Zmx1c2hTeW5jOmxlfSk7cmV0dXJufWxldHtwYXRoOmFlLHN1Ym1pc3Npb246QWUsZXJyb3I6SHR9PXkxKGMudjdfbm9ybWFsaXplRm9ybU1ldGhvZCwhMCxwZSxZKTtpZihIdCl7QXQoJCxNLEh0LHtmbHVzaFN5bmM6bGV9KTtyZXR1cm59bGV0IFRlPWxnKGZlLGFlKTtpZihrPShZJiZZLnByZXZlbnRTY3JvbGxSZXNldCk9PT0hMCxBZSYmeXIoQWUuZm9ybU1ldGhvZCkpe2plKCQsTSxhZSxUZSxmZSxsZSxBZSk7cmV0dXJufXouc2V0KCQse3JvdXRlSWQ6TSxwYXRoOmFlfSksVHQoJCxNLGFlLFRlLGZlLGxlLEFlKX1hc3luYyBmdW5jdGlvbiBqZSgkLE0sRixZLGxlLGtlLHBlKXtpZihibigpLHouZGVsZXRlKCQpLCFZLnJvdXRlLmFjdGlvbiYmIVkucm91dGUubGF6eSl7bGV0IGJ0PUpuKDQwNSx7bWV0aG9kOnBlLmZvcm1NZXRob2QscGF0aG5hbWU6Rixyb3V0ZUlkOk19KTtBdCgkLE0sYnQse2ZsdXNoU3luYzprZX0pO3JldHVybn1sZXQgZmU9Uy5mZXRjaGVycy5nZXQoJCk7X3QoJCxXRChwZSxmZSkse2ZsdXNoU3luYzprZX0pO2xldCBhZT1uZXcgQWJvcnRDb250cm9sbGVyLEFlPXNhKHQuaGlzdG9yeSxGLGFlLnNpZ25hbCxwZSk7Wi5zZXQoJCxhZSk7bGV0IEh0PVIsVGU9YXdhaXQgbGEoImFjdGlvbiIsQWUsWSxsZSxvLGksYSk7aWYoQWUuc2lnbmFsLmFib3J0ZWQpe1ouZ2V0KCQpPT09YWUmJlouZGVsZXRlKCQpO3JldHVybn1pZihyZS5oYXMoJCkpe190KCQsRGkodm9pZCAwKSk7cmV0dXJufWlmKG9zKFRlKSlpZihaLmRlbGV0ZSgkKSxQPkh0KXtfdCgkLERpKHZvaWQgMCkpO3JldHVybn1lbHNlIHJldHVybiBqLmFkZCgkKSxfdCgkLGFhKHBlKSksYXQoUyxUZSx7ZmV0Y2hlclN1Ym1pc3Npb246cGV9KTtpZih6YShUZSkpe0F0KCQsTSxUZS5lcnJvcik7cmV0dXJufWlmKElvKFRlKSl0aHJvdyBKbig0MDAse3R5cGU6ImRlZmVyLWFjdGlvbiJ9KTtsZXQgWmU9Uy5uYXZpZ2F0aW9uLmxvY2F0aW9ufHxTLmxvY2F0aW9uLGN0PXNhKHQuaGlzdG9yeSxaZSxhZS5zaWduYWwpLHVuPXN8fGwsT3I9Uy5uYXZpZ2F0aW9uLnN0YXRlIT09ImlkbGUiP0tsKHVuLFMubmF2aWdhdGlvbi5sb2NhdGlvbixhKTpTLm1hdGNoZXM7T2UoT3IsIkRpZG4ndCBmaW5kIGFueSBtYXRjaGVzIGFmdGVyIGZldGNoZXIgYWN0aW9uIik7bGV0IEhzPSsrUjtiLnNldCgkLEhzKTtsZXQgbHA9YWEocGUsVGUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoJCxscCk7bGV0W3ZsLGRyXT14MSh0Lmhpc3RvcnksUyxPcixwZSxaZSxMLEssQixyZSx6LGosdW4sYSx7W1kucm91dGUuaWRdOlRlLmRhdGF9LHZvaWQgMCk7ZHIuZmlsdGVyKGJ0PT5idC5rZXkhPT0kKS5mb3JFYWNoKGJ0PT57bGV0IGtvPWJ0LmtleSx4eT1TLmZldGNoZXJzLmdldChrbyksYms9YWEodm9pZCAwLHh5P3h5LmRhdGE6dm9pZCAwKTtTLmZldGNoZXJzLnNldChrbyxiayksWi5oYXMoa28pJiZndChrbyksYnQuY29udHJvbGxlciYmWi5zZXQoa28sYnQuY29udHJvbGxlcil9KSwkZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pO2xldCBZYz0oKT0+ZHIuZm9yRWFjaChidD0+Z3QoYnQua2V5KSk7YWUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixZYyk7bGV0e3Jlc3VsdHM6c3AsbG9hZGVyUmVzdWx0czphcCxmZXRjaGVyUmVzdWx0czpjcH09YXdhaXQgYW4oUy5tYXRjaGVzLE9yLHZsLGRyLGN0KTtpZihhZS5zaWduYWwuYWJvcnRlZClyZXR1cm47YWUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixZYyksYi5kZWxldGUoJCksWi5kZWxldGUoJCksZHIuZm9yRWFjaChidD0+Wi5kZWxldGUoYnQua2V5KSk7bGV0IHlsPWsxKHNwKTtpZih5bCl7aWYoeWwuaWR4Pj12bC5sZW5ndGgpe2xldCBidD1kclt5bC5pZHgtdmwubGVuZ3RoXS5rZXk7ai5hZGQoYnQpfXJldHVybiBhdChTLHlsLnJlc3VsdCl9bGV0e2xvYWRlckRhdGE6R2UsZXJyb3JzOlhufT1FMShTLFMubWF0Y2hlcyx2bCxhcCx2b2lkIDAsZHIsY3AsYmUpO2lmKFMuZmV0Y2hlcnMuaGFzKCQpKXtsZXQgYnQ9RGkoVGUuZGF0YSk7Uy5mZXRjaGVycy5zZXQoJCxidCl9V3MoSHMpLFMubmF2aWdhdGlvbi5zdGF0ZT09PSJsb2FkaW5nIiYmSHM+UD8oT2UoRSwiRXhwZWN0ZWQgcGVuZGluZyBhY3Rpb24iKSxDJiZDLmFib3J0KCksUmUoUy5uYXZpZ2F0aW9uLmxvY2F0aW9uLHttYXRjaGVzOk9yLGxvYWRlckRhdGE6R2UsZXJyb3JzOlhuLGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSk6KCRlKHtlcnJvcnM6WG4sbG9hZGVyRGF0YTpDMShTLmxvYWRlckRhdGEsR2UsT3IsWG4pLGZldGNoZXJzOm5ldyBNYXAoUy5mZXRjaGVycyl9KSxMPSExKX1hc3luYyBmdW5jdGlvbiBUdCgkLE0sRixZLGxlLGtlLHBlKXtsZXQgZmU9Uy5mZXRjaGVycy5nZXQoJCk7X3QoJCxhYShwZSxmZT9mZS5kYXRhOnZvaWQgMCkse2ZsdXNoU3luYzprZX0pO2xldCBhZT1uZXcgQWJvcnRDb250cm9sbGVyLEFlPXNhKHQuaGlzdG9yeSxGLGFlLnNpZ25hbCk7Wi5zZXQoJCxhZSk7bGV0IEh0PVIsVGU9YXdhaXQgbGEoImxvYWRlciIsQWUsWSxsZSxvLGksYSk7aWYoSW8oVGUpJiYoVGU9YXdhaXQgY2soVGUsQWUuc2lnbmFsLCEwKXx8VGUpLFouZ2V0KCQpPT09YWUmJlouZGVsZXRlKCQpLCFBZS5zaWduYWwuYWJvcnRlZCl7aWYocmUuaGFzKCQpKXtfdCgkLERpKHZvaWQgMCkpO3JldHVybn1pZihvcyhUZSkpaWYoUD5IdCl7X3QoJCxEaSh2b2lkIDApKTtyZXR1cm59ZWxzZXtqLmFkZCgkKSxhd2FpdCBhdChTLFRlKTtyZXR1cm59aWYoemEoVGUpKXtBdCgkLE0sVGUuZXJyb3IpO3JldHVybn1PZSghSW8oVGUpLCJVbmhhbmRsZWQgZmV0Y2hlciBkZWZlcnJlZCBkYXRhIiksX3QoJCxEaShUZS5kYXRhKSl9fWFzeW5jIGZ1bmN0aW9uIGF0KCQsTSxGKXtsZXR7c3VibWlzc2lvbjpZLGZldGNoZXJTdWJtaXNzaW9uOmxlLHJlcGxhY2U6a2V9PUY9PT12b2lkIDA/e306RjtNLnJldmFsaWRhdGUmJihMPSEwKTtsZXQgcGU9VGMoJC5sb2NhdGlvbixNLmxvY2F0aW9uLHtfaXNSZWRpcmVjdDohMH0pO2lmKE9lKHBlLCJFeHBlY3RlZCBhIGxvY2F0aW9uIG9uIHRoZSByZWRpcmVjdCBuYXZpZ2F0aW9uIiksbil7bGV0IFplPSExO2lmKE0ucmVsb2FkRG9jdW1lbnQpWmU9ITA7ZWxzZSBpZihvay50ZXN0KE0ubG9jYXRpb24pKXtjb25zdCBjdD10Lmhpc3RvcnkuY3JlYXRlVVJMKE0ubG9jYXRpb24pO1plPWN0Lm9yaWdpbiE9PWUubG9jYXRpb24ub3JpZ2lufHxaYyhjdC5wYXRobmFtZSxhKT09bnVsbH1pZihaZSl7a2U/ZS5sb2NhdGlvbi5yZXBsYWNlKE0ubG9jYXRpb24pOmUubG9jYXRpb24uYXNzaWduKE0ubG9jYXRpb24pO3JldHVybn19Qz1udWxsO2xldCBmZT1rZT09PSEwP3d0LlJlcGxhY2U6d3QuUHVzaCx7Zm9ybU1ldGhvZDphZSxmb3JtQWN0aW9uOkFlLGZvcm1FbmNUeXBlOkh0fT0kLm5hdmlnYXRpb247IVkmJiFsZSYmYWUmJkFlJiZIdCYmKFk9VDEoJC5uYXZpZ2F0aW9uKSk7bGV0IFRlPVl8fGxlO2lmKFJELmhhcyhNLnN0YXR1cykmJlRlJiZ5cihUZS5mb3JtTWV0aG9kKSlhd2FpdCBKZShmZSxwZSx7c3VibWlzc2lvbjp5dCh7fSxUZSx7Zm9ybUFjdGlvbjpNLmxvY2F0aW9ufSkscHJldmVudFNjcm9sbFJlc2V0Omt9KTtlbHNle2xldCBaZT1yaChwZSxZKTthd2FpdCBKZShmZSxwZSx7b3ZlcnJpZGVOYXZpZ2F0aW9uOlplLGZldGNoZXJTdWJtaXNzaW9uOmxlLHByZXZlbnRTY3JvbGxSZXNldDprfSl9fWFzeW5jIGZ1bmN0aW9uIGFuKCQsTSxGLFksbGUpe2xldCBrZT1hd2FpdCBQcm9taXNlLmFsbChbLi4uRi5tYXAoYWU9PmxhKCJsb2FkZXIiLGxlLGFlLE0sbyxpLGEpKSwuLi5ZLm1hcChhZT0+YWUubWF0Y2hlcyYmYWUubWF0Y2gmJmFlLmNvbnRyb2xsZXI/bGEoImxvYWRlciIsc2EodC5oaXN0b3J5LGFlLnBhdGgsYWUuY29udHJvbGxlci5zaWduYWwpLGFlLm1hdGNoLGFlLm1hdGNoZXMsbyxpLGEpOnt0eXBlOlN0LmVycm9yLGVycm9yOkpuKDQwNCx7cGF0aG5hbWU6YWUucGF0aH0pfSldKSxwZT1rZS5zbGljZSgwLEYubGVuZ3RoKSxmZT1rZS5zbGljZShGLmxlbmd0aCk7cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFskMSgkLEYscGUscGUubWFwKCgpPT5sZS5zaWduYWwpLCExLFMubG9hZGVyRGF0YSksJDEoJCxZLm1hcChhZT0+YWUubWF0Y2gpLGZlLFkubWFwKGFlPT5hZS5jb250cm9sbGVyP2FlLmNvbnRyb2xsZXIuc2lnbmFsOm51bGwpLCEwKV0pLHtyZXN1bHRzOmtlLGxvYWRlclJlc3VsdHM6cGUsZmV0Y2hlclJlc3VsdHM6ZmV9fWZ1bmN0aW9uIGJuKCl7TD0hMCxLLnB1c2goLi4ub3AoKSksei5mb3JFYWNoKCgkLE0pPT57Wi5oYXMoTSkmJihCLnB1c2goTSksZ3QoTSkpfSl9ZnVuY3Rpb24gX3QoJCxNLEYpe0Y9PT12b2lkIDAmJihGPXt9KSxTLmZldGNoZXJzLnNldCgkLE0pLCRlKHtmZXRjaGVyczpuZXcgTWFwKFMuZmV0Y2hlcnMpfSx7Zmx1c2hTeW5jOihGJiZGLmZsdXNoU3luYyk9PT0hMH0pfWZ1bmN0aW9uIEF0KCQsTSxGLFkpe1k9PT12b2lkIDAmJihZPXt9KTtsZXQgbGU9amEoUy5tYXRjaGVzLE0pO01uKCQpLCRlKHtlcnJvcnM6e1tsZS5yb3V0ZS5pZF06Rn0sZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0se2ZsdXNoU3luYzooWSYmWS5mbHVzaFN5bmMpPT09ITB9KX1mdW5jdGlvbiBjbigkKXtyZXR1cm4gYy52N19mZXRjaGVyUGVyc2lzdCYmKEcuc2V0KCQsKEcuZ2V0KCQpfHwwKSsxKSxyZS5oYXMoJCkmJnJlLmRlbGV0ZSgkKSksUy5mZXRjaGVycy5nZXQoJCl8fE9EfWZ1bmN0aW9uIE1uKCQpe2xldCBNPVMuZmV0Y2hlcnMuZ2V0KCQpO1ouaGFzKCQpJiYhKE0mJk0uc3RhdGU9PT0ibG9hZGluZyImJmIuaGFzKCQpKSYmZ3QoJCksei5kZWxldGUoJCksYi5kZWxldGUoJCksai5kZWxldGUoJCkscmUuZGVsZXRlKCQpLFMuZmV0Y2hlcnMuZGVsZXRlKCQpfWZ1bmN0aW9uIGVpKCQpe2lmKGMudjdfZmV0Y2hlclBlcnNpc3Qpe2xldCBNPShHLmdldCgkKXx8MCktMTtNPD0wPyhHLmRlbGV0ZSgkKSxyZS5hZGQoJCkpOkcuc2V0KCQsTSl9ZWxzZSBNbigkKTskZSh7ZmV0Y2hlcnM6bmV3IE1hcChTLmZldGNoZXJzKX0pfWZ1bmN0aW9uIGd0KCQpe2xldCBNPVouZ2V0KCQpO09lKE0sIkV4cGVjdGVkIGZldGNoIGNvbnRyb2xsZXI6ICIrJCksTS5hYm9ydCgpLFouZGVsZXRlKCQpfWZ1bmN0aW9uIFJyKCQpe2ZvcihsZXQgTSBvZiAkKXtsZXQgRj1jbihNKSxZPURpKEYuZGF0YSk7Uy5mZXRjaGVycy5zZXQoTSxZKX19ZnVuY3Rpb24gYm8oKXtsZXQgJD1bXSxNPSExO2ZvcihsZXQgRiBvZiBqKXtsZXQgWT1TLmZldGNoZXJzLmdldChGKTtPZShZLCJFeHBlY3RlZCBmZXRjaGVyOiAiK0YpLFkuc3RhdGU9PT0ibG9hZGluZyImJihqLmRlbGV0ZShGKSwkLnB1c2goRiksTT0hMCl9cmV0dXJuIFJyKCQpLE19ZnVuY3Rpb24gV3MoJCl7bGV0IE09W107Zm9yKGxldFtGLFldb2YgYilpZihZPCQpe2xldCBsZT1TLmZldGNoZXJzLmdldChGKTtPZShsZSwiRXhwZWN0ZWQgZmV0Y2hlcjogIitGKSxsZS5zdGF0ZT09PSJsb2FkaW5nIiYmKGd0KEYpLGIuZGVsZXRlKEYpLE0ucHVzaChGKSl9cmV0dXJuIFJyKE0pLE0ubGVuZ3RoPjB9ZnVuY3Rpb24gd2soJCxNKXtsZXQgRj1TLmJsb2NrZXJzLmdldCgkKXx8b2E7cmV0dXJuIHllLmdldCgkKSE9PU0mJnllLnNldCgkLE0pLEZ9ZnVuY3Rpb24gbXkoJCl7Uy5ibG9ja2Vycy5kZWxldGUoJCkseWUuZGVsZXRlKCQpfWZ1bmN0aW9uIEdjKCQsTSl7bGV0IEY9Uy5ibG9ja2Vycy5nZXQoJCl8fG9hO09lKEYuc3RhdGU9PT0idW5ibG9ja2VkIiYmTS5zdGF0ZT09PSJibG9ja2VkInx8Ri5zdGF0ZT09PSJibG9ja2VkIiYmTS5zdGF0ZT09PSJibG9ja2VkInx8Ri5zdGF0ZT09PSJibG9ja2VkIiYmTS5zdGF0ZT09PSJwcm9jZWVkaW5nInx8Ri5zdGF0ZT09PSJibG9ja2VkIiYmTS5zdGF0ZT09PSJ1bmJsb2NrZWQifHxGLnN0YXRlPT09InByb2NlZWRpbmciJiZNLnN0YXRlPT09InVuYmxvY2tlZCIsIkludmFsaWQgYmxvY2tlciBzdGF0ZSB0cmFuc2l0aW9uOiAiK0Yuc3RhdGUrIiAtPiAiK00uc3RhdGUpO2xldCBZPW5ldyBNYXAoUy5ibG9ja2Vycyk7WS5zZXQoJCxNKSwkZSh7YmxvY2tlcnM6WX0pfWZ1bmN0aW9uIGd5KCQpe2xldHtjdXJyZW50TG9jYXRpb246TSxuZXh0TG9jYXRpb246RixoaXN0b3J5QWN0aW9uOll9PSQ7aWYoeWUuc2l6ZT09PTApcmV0dXJuO3llLnNpemU+MSYmbGwoITEsIkEgcm91dGVyIG9ubHkgc3VwcG9ydHMgb25lIGJsb2NrZXIgYXQgYSB0aW1lIik7bGV0IGxlPUFycmF5LmZyb20oeWUuZW50cmllcygpKSxba2UscGVdPWxlW2xlLmxlbmd0aC0xXSxmZT1TLmJsb2NrZXJzLmdldChrZSk7aWYoIShmZSYmZmUuc3RhdGU9PT0icHJvY2VlZGluZyIpJiZwZSh7Y3VycmVudExvY2F0aW9uOk0sbmV4dExvY2F0aW9uOkYsaGlzdG9yeUFjdGlvbjpZfSkpcmV0dXJuIGtlfWZ1bmN0aW9uIG9wKCQpe2xldCBNPVtdO3JldHVybiBiZS5mb3JFYWNoKChGLFkpPT57KCEkfHwkKFkpKSYmKEYuY2FuY2VsKCksTS5wdXNoKFkpLGJlLmRlbGV0ZShZKSl9KSxNfWZ1bmN0aW9uIFNrKCQsTSxGKXtpZihmPSQsZz1NLHA9Rnx8bnVsbCwhbSYmUy5uYXZpZ2F0aW9uPT09bmgpe209ITA7bGV0IFk9eXkoUy5sb2NhdGlvbixTLm1hdGNoZXMpO1khPW51bGwmJiRlKHtyZXN0b3JlU2Nyb2xsUG9zaXRpb246WX0pfXJldHVybigpPT57Zj1udWxsLGc9bnVsbCxwPW51bGx9fWZ1bmN0aW9uIHZ5KCQsTSl7cmV0dXJuIHAmJnAoJCxNLm1hcChZPT5sRChZLFMubG9hZGVyRGF0YSkpKXx8JC5rZXl9ZnVuY3Rpb24gRWsoJCxNKXtpZihmJiZnKXtsZXQgRj12eSgkLE0pO2ZbRl09ZygpfX1mdW5jdGlvbiB5eSgkLE0pe2lmKGYpe2xldCBGPXZ5KCQsTSksWT1mW0ZdO2lmKHR5cGVvZiBZPT0ibnVtYmVyIilyZXR1cm4gWX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBDaygkKXtvPXt9LHM9cmcoJCxpLHZvaWQgMCxvKX1yZXR1cm4gXz17Z2V0IGJhc2VuYW1lKCl7cmV0dXJuIGF9LGdldCBzdGF0ZSgpe3JldHVybiBTfSxnZXQgcm91dGVzKCl7cmV0dXJuIGx9LGdldCB3aW5kb3coKXtyZXR1cm4gZX0saW5pdGlhbGl6ZTpGZSxzdWJzY3JpYmU6SWUsZW5hYmxlU2Nyb2xsUmVzdG9yYXRpb246U2ssbmF2aWdhdGU6U2UsZmV0Y2g6dXIscmV2YWxpZGF0ZTpMZSxjcmVhdGVIcmVmOiQ9PnQuaGlzdG9yeS5jcmVhdGVIcmVmKCQpLGVuY29kZUxvY2F0aW9uOiQ9PnQuaGlzdG9yeS5lbmNvZGVMb2NhdGlvbigkKSxnZXRGZXRjaGVyOmNuLGRlbGV0ZUZldGNoZXI6ZWksZGlzcG9zZTpuZSxnZXRCbG9ja2VyOndrLGRlbGV0ZUJsb2NrZXI6bXksX2ludGVybmFsRmV0Y2hDb250cm9sbGVyczpaLF9pbnRlcm5hbEFjdGl2ZURlZmVycmVkczpiZSxfaW50ZXJuYWxTZXRSb3V0ZXM6Q2t9LF99ZnVuY3Rpb24gTUQodCl7cmV0dXJuIHQhPW51bGwmJigiZm9ybURhdGEiaW4gdCYmdC5mb3JtRGF0YSE9bnVsbHx8ImJvZHkiaW4gdCYmdC5ib2R5IT09dm9pZCAwKX1mdW5jdGlvbiBpZyh0LGUsbixyLGksbyxsKXtsZXQgcyxhO2lmKG8pe3M9W107Zm9yKGxldCB1IG9mIGUpaWYocy5wdXNoKHUpLHUucm91dGUuaWQ9PT1vKXthPXU7YnJlYWt9fWVsc2Ugcz1lLGE9ZVtlLmxlbmd0aC0xXTtsZXQgYz1uayhpfHwiLiIsdGsocyksWmModC5wYXRobmFtZSxuKXx8dC5wYXRobmFtZSxsPT09InBhdGgiKTtyZXR1cm4gaT09bnVsbCYmKGMuc2VhcmNoPXQuc2VhcmNoLGMuaGFzaD10Lmhhc2gpLChpPT1udWxsfHxpPT09IiJ8fGk9PT0iLiIpJiZhJiZhLnJvdXRlLmluZGV4JiYhZHkoYy5zZWFyY2gpJiYoYy5zZWFyY2g9Yy5zZWFyY2g/Yy5zZWFyY2gucmVwbGFjZSgvXlw/LywiP2luZGV4JiIpOiI/aW5kZXgiKSxyJiZuIT09Ii8iJiYoYy5wYXRobmFtZT1jLnBhdGhuYW1lPT09Ii8iP246aW8oW24sYy5wYXRobmFtZV0pKSxLYyhjKX1mdW5jdGlvbiB5MSh0LGUsbixyKXtpZighcnx8IU1EKHIpKXJldHVybntwYXRoOm59O2lmKHIuZm9ybU1ldGhvZCYmIUJEKHIuZm9ybU1ldGhvZCkpcmV0dXJue3BhdGg6bixlcnJvcjpKbig0MDUse21ldGhvZDpyLmZvcm1NZXRob2R9KX07bGV0IGk9KCk9Pih7cGF0aDpuLGVycm9yOkpuKDQwMCx7dHlwZToiaW52YWxpZC1ib2R5In0pfSksbz1yLmZvcm1NZXRob2R8fCJnZXQiLGw9dD9vLnRvVXBwZXJDYXNlKCk6by50b0xvd2VyQ2FzZSgpLHM9YWsobik7aWYoci5ib2R5IT09dm9pZCAwKXtpZihyLmZvcm1FbmNUeXBlPT09InRleHQvcGxhaW4iKXtpZigheXIobCkpcmV0dXJuIGkoKTtsZXQgZj10eXBlb2Ygci5ib2R5PT0ic3RyaW5nIj9yLmJvZHk6ci5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGF8fHIuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcz9BcnJheS5mcm9tKHIuYm9keS5lbnRyaWVzKCkpLnJlZHVjZSgocCxnKT0+e2xldFttLHddPWc7cmV0dXJuIiIrcCttKyI9Iit3K2AKYH0sIiIpOlN0cmluZyhyLmJvZHkpO3JldHVybntwYXRoOm4sc3VibWlzc2lvbjp7Zm9ybU1ldGhvZDpsLGZvcm1BY3Rpb246cyxmb3JtRW5jVHlwZTpyLmZvcm1FbmNUeXBlLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OmZ9fX1lbHNlIGlmKHIuZm9ybUVuY1R5cGU9PT0iYXBwbGljYXRpb24vanNvbiIpe2lmKCF5cihsKSlyZXR1cm4gaSgpO3RyeXtsZXQgZj10eXBlb2Ygci5ib2R5PT0ic3RyaW5nIj9KU09OLnBhcnNlKHIuYm9keSk6ci5ib2R5O3JldHVybntwYXRoOm4sc3VibWlzc2lvbjp7Zm9ybU1ldGhvZDpsLGZvcm1BY3Rpb246cyxmb3JtRW5jVHlwZTpyLmZvcm1FbmNUeXBlLGZvcm1EYXRhOnZvaWQgMCxqc29uOmYsdGV4dDp2b2lkIDB9fX1jYXRjaHtyZXR1cm4gaSgpfX19T2UodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iLCJGb3JtRGF0YSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQiKTtsZXQgYSxjO2lmKHIuZm9ybURhdGEpYT1vZyhyLmZvcm1EYXRhKSxjPXIuZm9ybURhdGE7ZWxzZSBpZihyLmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSlhPW9nKHIuYm9keSksYz1yLmJvZHk7ZWxzZSBpZihyLmJvZHkgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpYT1yLmJvZHksYz1TMShhKTtlbHNlIGlmKHIuYm9keT09bnVsbClhPW5ldyBVUkxTZWFyY2hQYXJhbXMsYz1uZXcgRm9ybURhdGE7ZWxzZSB0cnl7YT1uZXcgVVJMU2VhcmNoUGFyYW1zKHIuYm9keSksYz1TMShhKX1jYXRjaHtyZXR1cm4gaSgpfWxldCB1PXtmb3JtTWV0aG9kOmwsZm9ybUFjdGlvbjpzLGZvcm1FbmNUeXBlOnImJnIuZm9ybUVuY1R5cGV8fCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLGZvcm1EYXRhOmMsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9O2lmKHlyKHUuZm9ybU1ldGhvZCkpcmV0dXJue3BhdGg6bixzdWJtaXNzaW9uOnV9O2xldCBkPU5pKG4pO3JldHVybiBlJiZkLnNlYXJjaCYmZHkoZC5zZWFyY2gpJiZhLmFwcGVuZCgiaW5kZXgiLCIiKSxkLnNlYXJjaD0iPyIrYSx7cGF0aDpLYyhkKSxzdWJtaXNzaW9uOnV9fWZ1bmN0aW9uIExEKHQsZSl7bGV0IG49dDtpZihlKXtsZXQgcj10LmZpbmRJbmRleChpPT5pLnJvdXRlLmlkPT09ZSk7cj49MCYmKG49dC5zbGljZSgwLHIpKX1yZXR1cm4gbn1mdW5jdGlvbiB4MSh0LGUsbixyLGksbyxsLHMsYSxjLHUsZCxmLHAsZyl7bGV0IG09Zz9PYmplY3QudmFsdWVzKGcpWzBdOnA/T2JqZWN0LnZhbHVlcyhwKVswXTp2b2lkIDAsdz10LmNyZWF0ZVVSTChlLmxvY2F0aW9uKSx2PXQuY3JlYXRlVVJMKGkpLHg9Zz9PYmplY3Qua2V5cyhnKVswXTp2b2lkIDAsUz1MRChuLHgpLmZpbHRlcigoayxDKT0+e2lmKGsucm91dGUubGF6eSlyZXR1cm4hMDtpZihrLnJvdXRlLmxvYWRlcj09bnVsbClyZXR1cm4hMTtpZihERChlLmxvYWRlckRhdGEsZS5tYXRjaGVzW0NdLGspfHxsLnNvbWUoVD0+VD09PWsucm91dGUuaWQpKXJldHVybiEwO2xldCBOPWUubWF0Y2hlc1tDXSxBPWs7cmV0dXJuIF8xKGsseXQoe2N1cnJlbnRVcmw6dyxjdXJyZW50UGFyYW1zOk4ucGFyYW1zLG5leHRVcmw6dixuZXh0UGFyYW1zOkEucGFyYW1zfSxyLHthY3Rpb25SZXN1bHQ6bSxkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZTpvfHx3LnBhdGhuYW1lK3cuc2VhcmNoPT09di5wYXRobmFtZSt2LnNlYXJjaHx8dy5zZWFyY2ghPT12LnNlYXJjaHx8c2soTixBKX0pKX0pLEU9W107cmV0dXJuIGMuZm9yRWFjaCgoayxDKT0+e2lmKCFuLnNvbWUoTD0+TC5yb3V0ZS5pZD09PWsucm91dGVJZCl8fGEuaGFzKEMpKXJldHVybjtsZXQgTj1LbChkLGsucGF0aCxmKTtpZighTil7RS5wdXNoKHtrZXk6Qyxyb3V0ZUlkOmsucm91dGVJZCxwYXRoOmsucGF0aCxtYXRjaGVzOm51bGwsbWF0Y2g6bnVsbCxjb250cm9sbGVyOm51bGx9KTtyZXR1cm59bGV0IEE9ZS5mZXRjaGVycy5nZXQoQyksVD1sZyhOLGsucGF0aCksRD0hMTt1LmhhcyhDKT9EPSExOnMuaW5jbHVkZXMoQyk/RD0hMDpBJiZBLnN0YXRlIT09ImlkbGUiJiZBLmRhdGE9PT12b2lkIDA/RD1vOkQ9XzEoVCx5dCh7Y3VycmVudFVybDp3LGN1cnJlbnRQYXJhbXM6ZS5tYXRjaGVzW2UubWF0Y2hlcy5sZW5ndGgtMV0ucGFyYW1zLG5leHRVcmw6dixuZXh0UGFyYW1zOm5bbi5sZW5ndGgtMV0ucGFyYW1zfSxyLHthY3Rpb25SZXN1bHQ6bSxkZWZhdWx0U2hvdWxkUmV2YWxpZGF0ZTpvfSkpLEQmJkUucHVzaCh7a2V5OkMscm91dGVJZDprLnJvdXRlSWQscGF0aDprLnBhdGgsbWF0Y2hlczpOLG1hdGNoOlQsY29udHJvbGxlcjpuZXcgQWJvcnRDb250cm9sbGVyfSl9KSxbUyxFXX1mdW5jdGlvbiBERCh0LGUsbil7bGV0IHI9IWV8fG4ucm91dGUuaWQhPT1lLnJvdXRlLmlkLGk9dFtuLnJvdXRlLmlkXT09PXZvaWQgMDtyZXR1cm4gcnx8aX1mdW5jdGlvbiBzayh0LGUpe2xldCBuPXQucm91dGUucGF0aDtyZXR1cm4gdC5wYXRobmFtZSE9PWUucGF0aG5hbWV8fG4hPW51bGwmJm4uZW5kc1dpdGgoIioiKSYmdC5wYXJhbXNbIioiXSE9PWUucGFyYW1zWyIqIl19ZnVuY3Rpb24gXzEodCxlKXtpZih0LnJvdXRlLnNob3VsZFJldmFsaWRhdGUpe2xldCBuPXQucm91dGUuc2hvdWxkUmV2YWxpZGF0ZShlKTtpZih0eXBlb2Ygbj09ImJvb2xlYW4iKXJldHVybiBufXJldHVybiBlLmRlZmF1bHRTaG91bGRSZXZhbGlkYXRlfWFzeW5jIGZ1bmN0aW9uIHcxKHQsZSxuKXtpZighdC5sYXp5KXJldHVybjtsZXQgcj1hd2FpdCB0LmxhenkoKTtpZighdC5sYXp5KXJldHVybjtsZXQgaT1uW3QuaWRdO09lKGksIk5vIHJvdXRlIGZvdW5kIGluIG1hbmlmZXN0Iik7bGV0IG89e307Zm9yKGxldCBsIGluIHIpe2xldCBhPWlbbF0hPT12b2lkIDAmJmwhPT0iaGFzRXJyb3JCb3VuZGFyeSI7bGwoIWEsJ1JvdXRlICInK2kuaWQrJyIgaGFzIGEgc3RhdGljIHByb3BlcnR5ICInK2wrJyIgZGVmaW5lZCBidXQgaXRzIGxhenkgZnVuY3Rpb24gaXMgYWxzbyByZXR1cm5pbmcgYSB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eS4gJysoJ1RoZSBsYXp5IHJvdXRlIHByb3BlcnR5ICInK2wrJyIgd2lsbCBiZSBpZ25vcmVkLicpKSwhYSYmIWlELmhhcyhsKSYmKG9bbF09cltsXSl9T2JqZWN0LmFzc2lnbihpLG8pLE9iamVjdC5hc3NpZ24oaSx5dCh7fSxlKGkpLHtsYXp5OnZvaWQgMH0pKX1hc3luYyBmdW5jdGlvbiBsYSh0LGUsbixyLGksbyxsLHMpe3M9PT12b2lkIDAmJihzPXt9KTtsZXQgYSxjLHUsZD1nPT57bGV0IG0sdz1uZXcgUHJvbWlzZSgodix4KT0+bT14KTtyZXR1cm4gdT0oKT0+bSgpLGUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0Iix1KSxQcm9taXNlLnJhY2UoW2coe3JlcXVlc3Q6ZSxwYXJhbXM6bi5wYXJhbXMsY29udGV4dDpzLnJlcXVlc3RDb250ZXh0fSksd10pfTt0cnl7bGV0IGc9bi5yb3V0ZVt0XTtpZihuLnJvdXRlLmxhenkpaWYoZyl7bGV0IG0sdz1hd2FpdCBQcm9taXNlLmFsbChbZChnKS5jYXRjaCh2PT57bT12fSksdzEobi5yb3V0ZSxvLGkpXSk7aWYobSl0aHJvdyBtO2M9d1swXX1lbHNlIGlmKGF3YWl0IHcxKG4ucm91dGUsbyxpKSxnPW4ucm91dGVbdF0sZyljPWF3YWl0IGQoZyk7ZWxzZSBpZih0PT09ImFjdGlvbiIpe2xldCBtPW5ldyBVUkwoZS51cmwpLHc9bS5wYXRobmFtZSttLnNlYXJjaDt0aHJvdyBKbig0MDUse21ldGhvZDplLm1ldGhvZCxwYXRobmFtZTp3LHJvdXRlSWQ6bi5yb3V0ZS5pZH0pfWVsc2UgcmV0dXJue3R5cGU6U3QuZGF0YSxkYXRhOnZvaWQgMH07ZWxzZSBpZihnKWM9YXdhaXQgZChnKTtlbHNle2xldCBtPW5ldyBVUkwoZS51cmwpLHc9bS5wYXRobmFtZSttLnNlYXJjaDt0aHJvdyBKbig0MDQse3BhdGhuYW1lOnd9KX1PZShjIT09dm9pZCAwLCJZb3UgZGVmaW5lZCAiKyh0PT09ImFjdGlvbiI/ImFuIGFjdGlvbiI6ImEgbG9hZGVyIikrIiBmb3Igcm91dGUgIisoJyInK24ucm91dGUuaWQrIlwiIGJ1dCBkaWRuJ3QgcmV0dXJuIGFueXRoaW5nIGZyb20geW91ciBgIit0KyJgICIpKyJmdW5jdGlvbi4gUGxlYXNlIHJldHVybiBhIHZhbHVlIG9yIGBudWxsYC4iKX1jYXRjaChnKXthPVN0LmVycm9yLGM9Z31maW5hbGx5e3UmJmUuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iix1KX1pZihGRChjKSl7bGV0IGc9Yy5zdGF0dXM7aWYoTkQuaGFzKGcpKXtsZXQgdj1jLmhlYWRlcnMuZ2V0KCJMb2NhdGlvbiIpO2lmKE9lKHYsIlJlZGlyZWN0cyByZXR1cm5lZC90aHJvd24gZnJvbSBsb2FkZXJzL2FjdGlvbnMgbXVzdCBoYXZlIGEgTG9jYXRpb24gaGVhZGVyIiksIW9rLnRlc3Qodikpdj1pZyhuZXcgVVJMKGUudXJsKSxyLnNsaWNlKDAsci5pbmRleE9mKG4pKzEpLGwsITAsdik7ZWxzZSBpZighcy5pc1N0YXRpY1JlcXVlc3Qpe2xldCB4PW5ldyBVUkwoZS51cmwpLF89di5zdGFydHNXaXRoKCIvLyIpP25ldyBVUkwoeC5wcm90b2NvbCt2KTpuZXcgVVJMKHYpLFM9WmMoXy5wYXRobmFtZSxsKSE9bnVsbDtfLm9yaWdpbj09PXgub3JpZ2luJiZTJiYodj1fLnBhdGhuYW1lK18uc2VhcmNoK18uaGFzaCl9aWYocy5pc1N0YXRpY1JlcXVlc3QpdGhyb3cgYy5oZWFkZXJzLnNldCgiTG9jYXRpb24iLHYpLGM7cmV0dXJue3R5cGU6U3QucmVkaXJlY3Qsc3RhdHVzOmcsbG9jYXRpb246dixyZXZhbGlkYXRlOmMuaGVhZGVycy5nZXQoIlgtUmVtaXgtUmV2YWxpZGF0ZSIpIT09bnVsbCxyZWxvYWREb2N1bWVudDpjLmhlYWRlcnMuZ2V0KCJYLVJlbWl4LVJlbG9hZC1Eb2N1bWVudCIpIT09bnVsbH19aWYocy5pc1JvdXRlUmVxdWVzdCl0aHJvd3t0eXBlOmE9PT1TdC5lcnJvcj9TdC5lcnJvcjpTdC5kYXRhLHJlc3BvbnNlOmN9O2xldCBtLHc9Yy5oZWFkZXJzLmdldCgiQ29udGVudC1UeXBlIik7cmV0dXJuIHcmJi9cYmFwcGxpY2F0aW9uXC9qc29uXGIvLnRlc3Qodyk/bT1hd2FpdCBjLmpzb24oKTptPWF3YWl0IGMudGV4dCgpLGE9PT1TdC5lcnJvcj97dHlwZTphLGVycm9yOm5ldyB1eShnLGMuc3RhdHVzVGV4dCxtKSxoZWFkZXJzOmMuaGVhZGVyc306e3R5cGU6U3QuZGF0YSxkYXRhOm0sc3RhdHVzQ29kZTpjLnN0YXR1cyxoZWFkZXJzOmMuaGVhZGVyc319aWYoYT09PVN0LmVycm9yKXJldHVybnt0eXBlOmEsZXJyb3I6Y307aWYoekQoYykpe3ZhciBmLHA7cmV0dXJue3R5cGU6U3QuZGVmZXJyZWQsZGVmZXJyZWREYXRhOmMsc3RhdHVzQ29kZTooZj1jLmluaXQpPT1udWxsP3ZvaWQgMDpmLnN0YXR1cyxoZWFkZXJzOigocD1jLmluaXQpPT1udWxsP3ZvaWQgMDpwLmhlYWRlcnMpJiZuZXcgSGVhZGVycyhjLmluaXQuaGVhZGVycyl9fXJldHVybnt0eXBlOlN0LmRhdGEsZGF0YTpjfX1mdW5jdGlvbiBzYSh0LGUsbixyKXtsZXQgaT10LmNyZWF0ZVVSTChhayhlKSkudG9TdHJpbmcoKSxvPXtzaWduYWw6bn07aWYociYmeXIoci5mb3JtTWV0aG9kKSl7bGV0e2Zvcm1NZXRob2Q6bCxmb3JtRW5jVHlwZTpzfT1yO28ubWV0aG9kPWwudG9VcHBlckNhc2UoKSxzPT09ImFwcGxpY2F0aW9uL2pzb24iPyhvLmhlYWRlcnM9bmV3IEhlYWRlcnMoeyJDb250ZW50LVR5cGUiOnN9KSxvLmJvZHk9SlNPTi5zdHJpbmdpZnkoci5qc29uKSk6cz09PSJ0ZXh0L3BsYWluIj9vLmJvZHk9ci50ZXh0OnM9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmci5mb3JtRGF0YT9vLmJvZHk9b2coci5mb3JtRGF0YSk6by5ib2R5PXIuZm9ybURhdGF9cmV0dXJuIG5ldyBSZXF1ZXN0KGksbyl9ZnVuY3Rpb24gb2codCl7bGV0IGU9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IobGV0W24scl1vZiB0LmVudHJpZXMoKSllLmFwcGVuZChuLHR5cGVvZiByPT0ic3RyaW5nIj9yOnIubmFtZSk7cmV0dXJuIGV9ZnVuY3Rpb24gUzEodCl7bGV0IGU9bmV3IEZvcm1EYXRhO2ZvcihsZXRbbixyXW9mIHQuZW50cmllcygpKWUuYXBwZW5kKG4scik7cmV0dXJuIGV9ZnVuY3Rpb24gSUQodCxlLG4scixpKXtsZXQgbz17fSxsPW51bGwscyxhPSExLGM9e307cmV0dXJuIG4uZm9yRWFjaCgodSxkKT0+e2xldCBmPWVbZF0ucm91dGUuaWQ7aWYoT2UoIW9zKHUpLCJDYW5ub3QgaGFuZGxlIHJlZGlyZWN0IHJlc3VsdHMgaW4gcHJvY2Vzc0xvYWRlckRhdGEiKSx6YSh1KSl7bGV0IHA9amEodCxmKSxnPXUuZXJyb3I7ciYmKGc9T2JqZWN0LnZhbHVlcyhyKVswXSxyPXZvaWQgMCksbD1sfHx7fSxsW3Aucm91dGUuaWRdPT1udWxsJiYobFtwLnJvdXRlLmlkXT1nKSxvW2ZdPXZvaWQgMCxhfHwoYT0hMCxzPXJrKHUuZXJyb3IpP3UuZXJyb3Iuc3RhdHVzOjUwMCksdS5oZWFkZXJzJiYoY1tmXT11LmhlYWRlcnMpfWVsc2UgSW8odSk/KGkuc2V0KGYsdS5kZWZlcnJlZERhdGEpLG9bZl09dS5kZWZlcnJlZERhdGEuZGF0YSk6b1tmXT11LmRhdGEsdS5zdGF0dXNDb2RlIT1udWxsJiZ1LnN0YXR1c0NvZGUhPT0yMDAmJiFhJiYocz11LnN0YXR1c0NvZGUpLHUuaGVhZGVycyYmKGNbZl09dS5oZWFkZXJzKX0pLHImJihsPXIsb1tPYmplY3Qua2V5cyhyKVswXV09dm9pZCAwKSx7bG9hZGVyRGF0YTpvLGVycm9yczpsLHN0YXR1c0NvZGU6c3x8MjAwLGxvYWRlckhlYWRlcnM6Y319ZnVuY3Rpb24gRTEodCxlLG4scixpLG8sbCxzKXtsZXR7bG9hZGVyRGF0YTphLGVycm9yczpjfT1JRChlLG4scixpLHMpO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSsrKXtsZXR7a2V5OmQsbWF0Y2g6Zixjb250cm9sbGVyOnB9PW9bdV07T2UobCE9PXZvaWQgMCYmbFt1XSE9PXZvaWQgMCwiRGlkIG5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgZmV0Y2hlciByZXN1bHQiKTtsZXQgZz1sW3VdO2lmKCEocCYmcC5zaWduYWwuYWJvcnRlZCkpaWYoemEoZykpe2xldCBtPWphKHQubWF0Y2hlcyxmPT1udWxsP3ZvaWQgMDpmLnJvdXRlLmlkKTtjJiZjW20ucm91dGUuaWRdfHwoYz15dCh7fSxjLHtbbS5yb3V0ZS5pZF06Zy5lcnJvcn0pKSx0LmZldGNoZXJzLmRlbGV0ZShkKX1lbHNlIGlmKG9zKGcpKU9lKCExLCJVbmhhbmRsZWQgZmV0Y2hlciByZXZhbGlkYXRpb24gcmVkaXJlY3QiKTtlbHNlIGlmKElvKGcpKU9lKCExLCJVbmhhbmRsZWQgZmV0Y2hlciBkZWZlcnJlZCBkYXRhIik7ZWxzZXtsZXQgbT1EaShnLmRhdGEpO3QuZmV0Y2hlcnMuc2V0KGQsbSl9fXJldHVybntsb2FkZXJEYXRhOmEsZXJyb3JzOmN9fWZ1bmN0aW9uIEMxKHQsZSxuLHIpe2xldCBpPXl0KHt9LGUpO2ZvcihsZXQgbyBvZiBuKXtsZXQgbD1vLnJvdXRlLmlkO2lmKGUuaGFzT3duUHJvcGVydHkobCk/ZVtsXSE9PXZvaWQgMCYmKGlbbF09ZVtsXSk6dFtsXSE9PXZvaWQgMCYmby5yb3V0ZS5sb2FkZXImJihpW2xdPXRbbF0pLHImJnIuaGFzT3duUHJvcGVydHkobCkpYnJlYWt9cmV0dXJuIGl9ZnVuY3Rpb24gamEodCxlKXtyZXR1cm4oZT90LnNsaWNlKDAsdC5maW5kSW5kZXgocj0+ci5yb3V0ZS5pZD09PWUpKzEpOlsuLi50XSkucmV2ZXJzZSgpLmZpbmQocj0+ci5yb3V0ZS5oYXNFcnJvckJvdW5kYXJ5PT09ITApfHx0WzBdfWZ1bmN0aW9uIGIxKHQpe2xldCBlPXQubGVuZ3RoPT09MT90WzBdOnQuZmluZChuPT5uLmluZGV4fHwhbi5wYXRofHxuLnBhdGg9PT0iLyIpfHx7aWQ6Il9fc2hpbS1lcnJvci1yb3V0ZV9fIn07cmV0dXJue21hdGNoZXM6W3twYXJhbXM6e30scGF0aG5hbWU6IiIscGF0aG5hbWVCYXNlOiIiLHJvdXRlOmV9XSxyb3V0ZTplfX1mdW5jdGlvbiBKbih0LGUpe2xldHtwYXRobmFtZTpuLHJvdXRlSWQ6cixtZXRob2Q6aSx0eXBlOm99PWU9PT12b2lkIDA/e306ZSxsPSJVbmtub3duIFNlcnZlciBFcnJvciIscz0iVW5rbm93biBAcmVtaXgtcnVuL3JvdXRlciBlcnJvciI7cmV0dXJuIHQ9PT00MDA/KGw9IkJhZCBSZXF1ZXN0IixpJiZuJiZyP3M9IllvdSBtYWRlIGEgIitpKycgcmVxdWVzdCB0byAiJytuKyciIGJ1dCAnKygnZGlkIG5vdCBwcm92aWRlIGEgYGxvYWRlcmAgZm9yIHJvdXRlICInK3IrJyIsICcpKyJzbyB0aGVyZSBpcyBubyB3YXkgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LiI6bz09PSJkZWZlci1hY3Rpb24iP3M9ImRlZmVyKCkgaXMgbm90IHN1cHBvcnRlZCBpbiBhY3Rpb25zIjpvPT09ImludmFsaWQtYm9keSImJihzPSJVbmFibGUgdG8gZW5jb2RlIHN1Ym1pc3Npb24gYm9keSIpKTp0PT09NDAzPyhsPSJGb3JiaWRkZW4iLHM9J1JvdXRlICInK3IrJyIgZG9lcyBub3QgbWF0Y2ggVVJMICInK24rJyInKTp0PT09NDA0PyhsPSJOb3QgRm91bmQiLHM9J05vIHJvdXRlIG1hdGNoZXMgVVJMICInK24rJyInKTp0PT09NDA1JiYobD0iTWV0aG9kIE5vdCBBbGxvd2VkIixpJiZuJiZyP3M9IllvdSBtYWRlIGEgIitpLnRvVXBwZXJDYXNlKCkrJyByZXF1ZXN0IHRvICInK24rJyIgYnV0ICcrKCdkaWQgbm90IHByb3ZpZGUgYW4gYGFjdGlvbmAgZm9yIHJvdXRlICInK3IrJyIsICcpKyJzbyB0aGVyZSBpcyBubyB3YXkgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LiI6aSYmKHM9J0ludmFsaWQgcmVxdWVzdCBtZXRob2QgIicraS50b1VwcGVyQ2FzZSgpKyciJykpLG5ldyB1eSh0fHw1MDAsbCxuZXcgRXJyb3IocyksITApfWZ1bmN0aW9uIGsxKHQpe2ZvcihsZXQgZT10Lmxlbmd0aC0xO2U+PTA7ZS0tKXtsZXQgbj10W2VdO2lmKG9zKG4pKXJldHVybntyZXN1bHQ6bixpZHg6ZX19fWZ1bmN0aW9uIGFrKHQpe2xldCBlPXR5cGVvZiB0PT0ic3RyaW5nIj9OaSh0KTp0O3JldHVybiBLYyh5dCh7fSxlLHtoYXNoOiIifSkpfWZ1bmN0aW9uIGpEKHQsZSl7cmV0dXJuIHQucGF0aG5hbWUhPT1lLnBhdGhuYW1lfHx0LnNlYXJjaCE9PWUuc2VhcmNoPyExOnQuaGFzaD09PSIiP2UuaGFzaCE9PSIiOnQuaGFzaD09PWUuaGFzaD8hMDplLmhhc2ghPT0iIn1mdW5jdGlvbiBJbyh0KXtyZXR1cm4gdC50eXBlPT09U3QuZGVmZXJyZWR9ZnVuY3Rpb24gemEodCl7cmV0dXJuIHQudHlwZT09PVN0LmVycm9yfWZ1bmN0aW9uIG9zKHQpe3JldHVybih0JiZ0LnR5cGUpPT09U3QucmVkaXJlY3R9ZnVuY3Rpb24gekQodCl7bGV0IGU9dDtyZXR1cm4gZSYmdHlwZW9mIGU9PSJvYmplY3QiJiZ0eXBlb2YgZS5kYXRhPT0ib2JqZWN0IiYmdHlwZW9mIGUuc3Vic2NyaWJlPT0iZnVuY3Rpb24iJiZ0eXBlb2YgZS5jYW5jZWw9PSJmdW5jdGlvbiImJnR5cGVvZiBlLnJlc29sdmVEYXRhPT0iZnVuY3Rpb24ifWZ1bmN0aW9uIEZEKHQpe3JldHVybiB0IT1udWxsJiZ0eXBlb2YgdC5zdGF0dXM9PSJudW1iZXIiJiZ0eXBlb2YgdC5zdGF0dXNUZXh0PT0ic3RyaW5nIiYmdHlwZW9mIHQuaGVhZGVycz09Im9iamVjdCImJnR5cGVvZiB0LmJvZHk8InUifWZ1bmN0aW9uIEJEKHQpe3JldHVybiBURC5oYXModC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiB5cih0KXtyZXR1cm4ga0QuaGFzKHQudG9Mb3dlckNhc2UoKSl9YXN5bmMgZnVuY3Rpb24gJDEodCxlLG4scixpLG8pe2ZvcihsZXQgbD0wO2w8bi5sZW5ndGg7bCsrKXtsZXQgcz1uW2xdLGE9ZVtsXTtpZighYSljb250aW51ZTtsZXQgYz10LmZpbmQoZD0+ZC5yb3V0ZS5pZD09PWEucm91dGUuaWQpLHU9YyE9bnVsbCYmIXNrKGMsYSkmJihvJiZvW2Eucm91dGUuaWRdKSE9PXZvaWQgMDtpZihJbyhzKSYmKGl8fHUpKXtsZXQgZD1yW2xdO09lKGQsIkV4cGVjdGVkIGFuIEFib3J0U2lnbmFsIGZvciByZXZhbGlkYXRpbmcgZmV0Y2hlciBkZWZlcnJlZCByZXN1bHQiKSxhd2FpdCBjayhzLGQsaSkudGhlbihmPT57ZiYmKG5bbF09Znx8bltsXSl9KX19fWFzeW5jIGZ1bmN0aW9uIGNrKHQsZSxuKXtpZihuPT09dm9pZCAwJiYobj0hMSksIWF3YWl0IHQuZGVmZXJyZWREYXRhLnJlc29sdmVEYXRhKGUpKXtpZihuKXRyeXtyZXR1cm57dHlwZTpTdC5kYXRhLGRhdGE6dC5kZWZlcnJlZERhdGEudW53cmFwcGVkRGF0YX19Y2F0Y2goaSl7cmV0dXJue3R5cGU6U3QuZXJyb3IsZXJyb3I6aX19cmV0dXJue3R5cGU6U3QuZGF0YSxkYXRhOnQuZGVmZXJyZWREYXRhLmRhdGF9fX1mdW5jdGlvbiBkeSh0KXtyZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh0KS5nZXRBbGwoImluZGV4Iikuc29tZShlPT5lPT09IiIpfWZ1bmN0aW9uIGxnKHQsZSl7bGV0IG49dHlwZW9mIGU9PSJzdHJpbmciP05pKGUpLnNlYXJjaDplLnNlYXJjaDtpZih0W3QubGVuZ3RoLTFdLnJvdXRlLmluZGV4JiZkeShufHwiIikpcmV0dXJuIHRbdC5sZW5ndGgtMV07bGV0IHI9ZWsodCk7cmV0dXJuIHJbci5sZW5ndGgtMV19ZnVuY3Rpb24gVDEodCl7bGV0e2Zvcm1NZXRob2Q6ZSxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cix0ZXh0OmksZm9ybURhdGE6byxqc29uOmx9PXQ7aWYoISghZXx8IW58fCFyKSl7aWYoaSE9bnVsbClyZXR1cm57Zm9ybU1ldGhvZDplLGZvcm1BY3Rpb246bixmb3JtRW5jVHlwZTpyLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0Oml9O2lmKG8hPW51bGwpcmV0dXJue2Zvcm1NZXRob2Q6ZSxmb3JtQWN0aW9uOm4sZm9ybUVuY1R5cGU6cixmb3JtRGF0YTpvLGpzb246dm9pZCAwLHRleHQ6dm9pZCAwfTtpZihsIT09dm9pZCAwKXJldHVybntmb3JtTWV0aG9kOmUsZm9ybUFjdGlvbjpuLGZvcm1FbmNUeXBlOnIsZm9ybURhdGE6dm9pZCAwLGpzb246bCx0ZXh0OnZvaWQgMH19fWZ1bmN0aW9uIHJoKHQsZSl7cmV0dXJuIGU/e3N0YXRlOiJsb2FkaW5nIixsb2NhdGlvbjp0LGZvcm1NZXRob2Q6ZS5mb3JtTWV0aG9kLGZvcm1BY3Rpb246ZS5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOmUuZm9ybUVuY1R5cGUsZm9ybURhdGE6ZS5mb3JtRGF0YSxqc29uOmUuanNvbix0ZXh0OmUudGV4dH06e3N0YXRlOiJsb2FkaW5nIixsb2NhdGlvbjp0LGZvcm1NZXRob2Q6dm9pZCAwLGZvcm1BY3Rpb246dm9pZCAwLGZvcm1FbmNUeXBlOnZvaWQgMCxmb3JtRGF0YTp2b2lkIDAsanNvbjp2b2lkIDAsdGV4dDp2b2lkIDB9fWZ1bmN0aW9uIFVEKHQsZSl7cmV0dXJue3N0YXRlOiJzdWJtaXR0aW5nIixsb2NhdGlvbjp0LGZvcm1NZXRob2Q6ZS5mb3JtTWV0aG9kLGZvcm1BY3Rpb246ZS5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOmUuZm9ybUVuY1R5cGUsZm9ybURhdGE6ZS5mb3JtRGF0YSxqc29uOmUuanNvbix0ZXh0OmUudGV4dH19ZnVuY3Rpb24gYWEodCxlKXtyZXR1cm4gdD97c3RhdGU6ImxvYWRpbmciLGZvcm1NZXRob2Q6dC5mb3JtTWV0aG9kLGZvcm1BY3Rpb246dC5mb3JtQWN0aW9uLGZvcm1FbmNUeXBlOnQuZm9ybUVuY1R5cGUsZm9ybURhdGE6dC5mb3JtRGF0YSxqc29uOnQuanNvbix0ZXh0OnQudGV4dCxkYXRhOmV9OntzdGF0ZToibG9hZGluZyIsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMCxkYXRhOmV9fWZ1bmN0aW9uIFdEKHQsZSl7cmV0dXJue3N0YXRlOiJzdWJtaXR0aW5nIixmb3JtTWV0aG9kOnQuZm9ybU1ldGhvZCxmb3JtQWN0aW9uOnQuZm9ybUFjdGlvbixmb3JtRW5jVHlwZTp0LmZvcm1FbmNUeXBlLGZvcm1EYXRhOnQuZm9ybURhdGEsanNvbjp0Lmpzb24sdGV4dDp0LnRleHQsZGF0YTplP2UuZGF0YTp2b2lkIDB9fWZ1bmN0aW9uIERpKHQpe3JldHVybntzdGF0ZToiaWRsZSIsZm9ybU1ldGhvZDp2b2lkIDAsZm9ybUFjdGlvbjp2b2lkIDAsZm9ybUVuY1R5cGU6dm9pZCAwLGZvcm1EYXRhOnZvaWQgMCxqc29uOnZvaWQgMCx0ZXh0OnZvaWQgMCxkYXRhOnR9fWZ1bmN0aW9uIEhEKHQsZSl7dHJ5e2xldCBuPXQuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShsayk7aWYobil7bGV0IHI9SlNPTi5wYXJzZShuKTtmb3IobGV0W2ksb11vZiBPYmplY3QuZW50cmllcyhyfHx7fSkpbyYmQXJyYXkuaXNBcnJheShvKSYmZS5zZXQoaSxuZXcgU2V0KG98fFtdKSl9fWNhdGNoe319ZnVuY3Rpb24gVkQodCxlKXtpZihlLnNpemU+MCl7bGV0IG49e307Zm9yKGxldFtyLGldb2YgZSluW3JdPVsuLi5pXTt0cnl7dC5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGxrLEpTT04uc3RyaW5naWZ5KG4pKX1jYXRjaChyKXtsbCghMSwiRmFpbGVkIHRvIHNhdmUgYXBwbGllZCB2aWV3IHRyYW5zaXRpb25zIGluIHNlc3Npb25TdG9yYWdlICgiK3IrIikuIil9fX0vKioKICogUmVhY3QgUm91dGVyIHY2LjIwLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBsZigpe3JldHVybiBsZj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LGxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1jb25zdCB0cD1oLmNyZWF0ZUNvbnRleHQobnVsbCksdWs9aC5jcmVhdGVDb250ZXh0KG51bGwpLG5wPWguY3JlYXRlQ29udGV4dChudWxsKSxycD1oLmNyZWF0ZUNvbnRleHQobnVsbCksZ2w9aC5jcmVhdGVDb250ZXh0KHtvdXRsZXQ6bnVsbCxtYXRjaGVzOltdLGlzRGF0YVJvdXRlOiExfSksZGs9aC5jcmVhdGVDb250ZXh0KG51bGwpO2Z1bmN0aW9uIGlwKCl7cmV0dXJuIGgudXNlQ29udGV4dChycCkhPW51bGx9ZnVuY3Rpb24gZmsoKXtyZXR1cm4gaXAoKXx8T2UoITEpLGgudXNlQ29udGV4dChycCkubG9jYXRpb259ZnVuY3Rpb24gcGsodCl7aC51c2VDb250ZXh0KG5wKS5zdGF0aWN8fGgudXNlTGF5b3V0RWZmZWN0KHQpfWZ1bmN0aW9uIGZ5KCl7bGV0e2lzRGF0YVJvdXRlOnR9PWgudXNlQ29udGV4dChnbCk7cmV0dXJuIHQ/aUkoKTpLRCgpfWZ1bmN0aW9uIEtEKCl7aXAoKXx8T2UoITEpO2xldCB0PWgudXNlQ29udGV4dCh0cCkse2Jhc2VuYW1lOmUsbmF2aWdhdG9yOm59PWgudXNlQ29udGV4dChucCkse21hdGNoZXM6cn09aC51c2VDb250ZXh0KGdsKSx7cGF0aG5hbWU6aX09ZmsoKSxvPUpTT04uc3RyaW5naWZ5KHRrKHIpKSxsPWgudXNlUmVmKCExKTtyZXR1cm4gcGsoKCk9PntsLmN1cnJlbnQ9ITB9KSxoLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGEsYyl7aWYoYz09PXZvaWQgMCYmKGM9e30pLCFsLmN1cnJlbnQpcmV0dXJuO2lmKHR5cGVvZiBhPT0ibnVtYmVyIil7bi5nbyhhKTtyZXR1cm59bGV0IHU9bmsoYSxKU09OLnBhcnNlKG8pLGksYy5yZWxhdGl2ZT09PSJwYXRoIik7dD09bnVsbCYmZSE9PSIvIiYmKHUucGF0aG5hbWU9dS5wYXRobmFtZT09PSIvIj9lOmlvKFtlLHUucGF0aG5hbWVdKSksKGMucmVwbGFjZT9uLnJlcGxhY2U6bi5wdXNoKSh1LGMuc3RhdGUsYyl9LFtlLG4sbyxpLHRdKX1mdW5jdGlvbiBaRCgpe2xldHttYXRjaGVzOnR9PWgudXNlQ29udGV4dChnbCksZT10W3QubGVuZ3RoLTFdO3JldHVybiBlP2UucGFyYW1zOnt9fWZ1bmN0aW9uIEdEKHQsZSxuKXtpcCgpfHxPZSghMSk7bGV0e25hdmlnYXRvcjpyfT1oLnVzZUNvbnRleHQobnApLHttYXRjaGVzOml9PWgudXNlQ29udGV4dChnbCksbz1pW2kubGVuZ3RoLTFdLGw9bz9vLnBhcmFtczp7fTtvJiZvLnBhdGhuYW1lO2xldCBzPW8/by5wYXRobmFtZUJhc2U6Ii8iO28mJm8ucm91dGU7bGV0IGE9ZmsoKSxjO2lmKGUpe3ZhciB1O2xldCBtPXR5cGVvZiBlPT0ic3RyaW5nIj9OaShlKTplO3M9PT0iLyJ8fCh1PW0ucGF0aG5hbWUpIT1udWxsJiZ1LnN0YXJ0c1dpdGgocyl8fE9lKCExKSxjPW19ZWxzZSBjPWE7bGV0IGQ9Yy5wYXRobmFtZXx8Ii8iLGY9cz09PSIvIj9kOmQuc2xpY2Uocy5sZW5ndGgpfHwiLyIscD1LbCh0LHtwYXRobmFtZTpmfSksZz1xRChwJiZwLm1hcChtPT5PYmplY3QuYXNzaWduKHt9LG0se3BhcmFtczpPYmplY3QuYXNzaWduKHt9LGwsbS5wYXJhbXMpLHBhdGhuYW1lOmlvKFtzLHIuZW5jb2RlTG9jYXRpb24/ci5lbmNvZGVMb2NhdGlvbihtLnBhdGhuYW1lKS5wYXRobmFtZTptLnBhdGhuYW1lXSkscGF0aG5hbWVCYXNlOm0ucGF0aG5hbWVCYXNlPT09Ii8iP3M6aW8oW3Msci5lbmNvZGVMb2NhdGlvbj9yLmVuY29kZUxvY2F0aW9uKG0ucGF0aG5hbWVCYXNlKS5wYXRobmFtZTptLnBhdGhuYW1lQmFzZV0pfSkpLGksbik7cmV0dXJuIGUmJmc/aC5jcmVhdGVFbGVtZW50KHJwLlByb3ZpZGVyLHt2YWx1ZTp7bG9jYXRpb246bGYoe3BhdGhuYW1lOiIvIixzZWFyY2g6IiIsaGFzaDoiIixzdGF0ZTpudWxsLGtleToiZGVmYXVsdCJ9LGMpLG5hdmlnYXRpb25UeXBlOnd0LlBvcH19LGcpOmd9ZnVuY3Rpb24gWUQoKXtsZXQgdD1ySSgpLGU9cmsodCk/dC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dDp0IGluc3RhbmNlb2YgRXJyb3I/dC5tZXNzYWdlOkpTT04uc3RyaW5naWZ5KHQpLG49dCBpbnN0YW5jZW9mIEVycm9yP3Quc3RhY2s6bnVsbCxpPXtwYWRkaW5nOiIwLjVyZW0iLGJhY2tncm91bmRDb2xvcjoicmdiYSgyMDAsMjAwLDIwMCwgMC41KSJ9LG89bnVsbDtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxoLmNyZWF0ZUVsZW1lbnQoImgyIixudWxsLCJVbmV4cGVjdGVkIEFwcGxpY2F0aW9uIEVycm9yISIpLGguY3JlYXRlRWxlbWVudCgiaDMiLHtzdHlsZTp7Zm9udFN0eWxlOiJpdGFsaWMifX0sZSksbj9oLmNyZWF0ZUVsZW1lbnQoInByZSIse3N0eWxlOml9LG4pOm51bGwsbyl9Y29uc3QgWEQ9aC5jcmVhdGVFbGVtZW50KFlELG51bGwpO2NsYXNzIEpEIGV4dGVuZHMgaC5Db21wb25lbnR7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5zdGF0ZT17bG9jYXRpb246ZS5sb2NhdGlvbixyZXZhbGlkYXRpb246ZS5yZXZhbGlkYXRpb24sZXJyb3I6ZS5lcnJvcn19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlKXtyZXR1cm57ZXJyb3I6ZX19c3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhlLG4pe3JldHVybiBuLmxvY2F0aW9uIT09ZS5sb2NhdGlvbnx8bi5yZXZhbGlkYXRpb24hPT0iaWRsZSImJmUucmV2YWxpZGF0aW9uPT09ImlkbGUiP3tlcnJvcjplLmVycm9yLGxvY2F0aW9uOmUubG9jYXRpb24scmV2YWxpZGF0aW9uOmUucmV2YWxpZGF0aW9ufTp7ZXJyb3I6ZS5lcnJvcnx8bi5lcnJvcixsb2NhdGlvbjpuLmxvY2F0aW9uLHJldmFsaWRhdGlvbjplLnJldmFsaWRhdGlvbnx8bi5yZXZhbGlkYXRpb259fWNvbXBvbmVudERpZENhdGNoKGUsbil7Y29uc29sZS5lcnJvcigiUmVhY3QgUm91dGVyIGNhdWdodCB0aGUgZm9sbG93aW5nIGVycm9yIGR1cmluZyByZW5kZXIiLGUsbil9cmVuZGVyKCl7cmV0dXJuIHRoaXMuc3RhdGUuZXJyb3I/aC5jcmVhdGVFbGVtZW50KGdsLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnByb3BzLnJvdXRlQ29udGV4dH0saC5jcmVhdGVFbGVtZW50KGRrLlByb3ZpZGVyLHt2YWx1ZTp0aGlzLnN0YXRlLmVycm9yLGNoaWxkcmVuOnRoaXMucHJvcHMuY29tcG9uZW50fSkpOnRoaXMucHJvcHMuY2hpbGRyZW59fWZ1bmN0aW9uIFFEKHQpe2xldHtyb3V0ZUNvbnRleHQ6ZSxtYXRjaDpuLGNoaWxkcmVuOnJ9PXQsaT1oLnVzZUNvbnRleHQodHApO3JldHVybiBpJiZpLnN0YXRpYyYmaS5zdGF0aWNDb250ZXh0JiYobi5yb3V0ZS5lcnJvckVsZW1lbnR8fG4ucm91dGUuRXJyb3JCb3VuZGFyeSkmJihpLnN0YXRpY0NvbnRleHQuX2RlZXBlc3RSZW5kZXJlZEJvdW5kYXJ5SWQ9bi5yb3V0ZS5pZCksaC5jcmVhdGVFbGVtZW50KGdsLlByb3ZpZGVyLHt2YWx1ZTplfSxyKX1mdW5jdGlvbiBxRCh0LGUsbil7dmFyIHI7aWYoZT09PXZvaWQgMCYmKGU9W10pLG49PT12b2lkIDAmJihuPW51bGwpLHQ9PW51bGwpe3ZhciBpO2lmKChpPW4pIT1udWxsJiZpLmVycm9ycyl0PW4ubWF0Y2hlcztlbHNlIHJldHVybiBudWxsfWxldCBvPXQsbD0ocj1uKT09bnVsbD92b2lkIDA6ci5lcnJvcnM7aWYobCE9bnVsbCl7bGV0IHM9by5maW5kSW5kZXgoYT0+YS5yb3V0ZS5pZCYmKGw9PW51bGw/dm9pZCAwOmxbYS5yb3V0ZS5pZF0pKTtzPj0wfHxPZSghMSksbz1vLnNsaWNlKDAsTWF0aC5taW4oby5sZW5ndGgscysxKSl9cmV0dXJuIG8ucmVkdWNlUmlnaHQoKHMsYSxjKT0+e2xldCB1PWEucm91dGUuaWQ/bD09bnVsbD92b2lkIDA6bFthLnJvdXRlLmlkXTpudWxsLGQ9bnVsbDtuJiYoZD1hLnJvdXRlLmVycm9yRWxlbWVudHx8WEQpO2xldCBmPWUuY29uY2F0KG8uc2xpY2UoMCxjKzEpKSxwPSgpPT57bGV0IGc7cmV0dXJuIHU/Zz1kOmEucm91dGUuQ29tcG9uZW50P2c9aC5jcmVhdGVFbGVtZW50KGEucm91dGUuQ29tcG9uZW50LG51bGwpOmEucm91dGUuZWxlbWVudD9nPWEucm91dGUuZWxlbWVudDpnPXMsaC5jcmVhdGVFbGVtZW50KFFELHttYXRjaDphLHJvdXRlQ29udGV4dDp7b3V0bGV0OnMsbWF0Y2hlczpmLGlzRGF0YVJvdXRlOm4hPW51bGx9LGNoaWxkcmVuOmd9KX07cmV0dXJuIG4mJihhLnJvdXRlLkVycm9yQm91bmRhcnl8fGEucm91dGUuZXJyb3JFbGVtZW50fHxjPT09MCk/aC5jcmVhdGVFbGVtZW50KEpELHtsb2NhdGlvbjpuLmxvY2F0aW9uLHJldmFsaWRhdGlvbjpuLnJldmFsaWRhdGlvbixjb21wb25lbnQ6ZCxlcnJvcjp1LGNoaWxkcmVuOnAoKSxyb3V0ZUNvbnRleHQ6e291dGxldDpudWxsLG1hdGNoZXM6Zixpc0RhdGFSb3V0ZTohMH19KTpwKCl9LG51bGwpfXZhciBoaz1mdW5jdGlvbih0KXtyZXR1cm4gdC5Vc2VCbG9ja2VyPSJ1c2VCbG9ja2VyIix0LlVzZVJldmFsaWRhdG9yPSJ1c2VSZXZhbGlkYXRvciIsdC5Vc2VOYXZpZ2F0ZVN0YWJsZT0idXNlTmF2aWdhdGUiLHR9KGhrfHx7fSksc2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHQuVXNlQmxvY2tlcj0idXNlQmxvY2tlciIsdC5Vc2VMb2FkZXJEYXRhPSJ1c2VMb2FkZXJEYXRhIix0LlVzZUFjdGlvbkRhdGE9InVzZUFjdGlvbkRhdGEiLHQuVXNlUm91dGVFcnJvcj0idXNlUm91dGVFcnJvciIsdC5Vc2VOYXZpZ2F0aW9uPSJ1c2VOYXZpZ2F0aW9uIix0LlVzZVJvdXRlTG9hZGVyRGF0YT0idXNlUm91dGVMb2FkZXJEYXRhIix0LlVzZU1hdGNoZXM9InVzZU1hdGNoZXMiLHQuVXNlUmV2YWxpZGF0b3I9InVzZVJldmFsaWRhdG9yIix0LlVzZU5hdmlnYXRlU3RhYmxlPSJ1c2VOYXZpZ2F0ZSIsdC5Vc2VSb3V0ZUlkPSJ1c2VSb3V0ZUlkIix0fShzZnx8e30pO2Z1bmN0aW9uIGVJKHQpe2xldCBlPWgudXNlQ29udGV4dCh0cCk7cmV0dXJuIGV8fE9lKCExKSxlfWZ1bmN0aW9uIHRJKHQpe2xldCBlPWgudXNlQ29udGV4dCh1ayk7cmV0dXJuIGV8fE9lKCExKSxlfWZ1bmN0aW9uIG5JKHQpe2xldCBlPWgudXNlQ29udGV4dChnbCk7cmV0dXJuIGV8fE9lKCExKSxlfWZ1bmN0aW9uIG1rKHQpe2xldCBlPW5JKCksbj1lLm1hdGNoZXNbZS5tYXRjaGVzLmxlbmd0aC0xXTtyZXR1cm4gbi5yb3V0ZS5pZHx8T2UoITEpLG4ucm91dGUuaWR9ZnVuY3Rpb24gckkoKXt2YXIgdDtsZXQgZT1oLnVzZUNvbnRleHQoZGspLG49dEkoc2YuVXNlUm91dGVFcnJvcikscj1tayhzZi5Vc2VSb3V0ZUVycm9yKTtyZXR1cm4gZXx8KCh0PW4uZXJyb3JzKT09bnVsbD92b2lkIDA6dFtyXSl9ZnVuY3Rpb24gaUkoKXtsZXR7cm91dGVyOnR9PWVJKGhrLlVzZU5hdmlnYXRlU3RhYmxlKSxlPW1rKHNmLlVzZU5hdmlnYXRlU3RhYmxlKSxuPWgudXNlUmVmKCExKTtyZXR1cm4gcGsoKCk9PntuLmN1cnJlbnQ9ITB9KSxoLnVzZUNhbGxiYWNrKGZ1bmN0aW9uKGksbyl7bz09PXZvaWQgMCYmKG89e30pLG4uY3VycmVudCYmKHR5cGVvZiBpPT0ibnVtYmVyIj90Lm5hdmlnYXRlKGkpOnQubmF2aWdhdGUoaSxsZih7ZnJvbVJvdXRlSWQ6ZX0sbykpKX0sW3QsZV0pfWZ1bmN0aW9uIG9JKHQpe2xldHtiYXNlbmFtZTplPSIvIixjaGlsZHJlbjpuPW51bGwsbG9jYXRpb246cixuYXZpZ2F0aW9uVHlwZTppPXd0LlBvcCxuYXZpZ2F0b3I6byxzdGF0aWM6bD0hMX09dDtpcCgpJiZPZSghMSk7bGV0IHM9ZS5yZXBsYWNlKC9eXC8qLywiLyIpLGE9aC51c2VNZW1vKCgpPT4oe2Jhc2VuYW1lOnMsbmF2aWdhdG9yOm8sc3RhdGljOmx9KSxbcyxvLGxdKTt0eXBlb2Ygcj09InN0cmluZyImJihyPU5pKHIpKTtsZXR7cGF0aG5hbWU6Yz0iLyIsc2VhcmNoOnU9IiIsaGFzaDpkPSIiLHN0YXRlOmY9bnVsbCxrZXk6cD0iZGVmYXVsdCJ9PXIsZz1oLnVzZU1lbW8oKCk9PntsZXQgbT1aYyhjLHMpO3JldHVybiBtPT1udWxsP251bGw6e2xvY2F0aW9uOntwYXRobmFtZTptLHNlYXJjaDp1LGhhc2g6ZCxzdGF0ZTpmLGtleTpwfSxuYXZpZ2F0aW9uVHlwZTppfX0sW3MsYyx1LGQsZixwLGldKTtyZXR1cm4gZz09bnVsbD9udWxsOmguY3JlYXRlRWxlbWVudChucC5Qcm92aWRlcix7dmFsdWU6YX0saC5jcmVhdGVFbGVtZW50KHJwLlByb3ZpZGVyLHtjaGlsZHJlbjpuLHZhbHVlOmd9KSl9bmV3IFByb21pc2UoKCk9Pnt9KTtmdW5jdGlvbiBsSSh0KXtsZXQgZT17aGFzRXJyb3JCb3VuZGFyeTp0LkVycm9yQm91bmRhcnkhPW51bGx8fHQuZXJyb3JFbGVtZW50IT1udWxsfTtyZXR1cm4gdC5Db21wb25lbnQmJk9iamVjdC5hc3NpZ24oZSx7ZWxlbWVudDpoLmNyZWF0ZUVsZW1lbnQodC5Db21wb25lbnQpLENvbXBvbmVudDp2b2lkIDB9KSx0LkVycm9yQm91bmRhcnkmJk9iamVjdC5hc3NpZ24oZSx7ZXJyb3JFbGVtZW50OmguY3JlYXRlRWxlbWVudCh0LkVycm9yQm91bmRhcnkpLEVycm9yQm91bmRhcnk6dm9pZCAwfSksZX1mdW5jdGlvbiBWbyh7Y2hpbGRyZW46dH0pe2NvbnN0IGU9dC5zcGxpdCgiLyIpLmZpbHRlcihuPT5uKTtyZXR1cm4gZS5tYXAoKG4scik9PnIhPT1lLmxlbmd0aC0xP3kuanN4cyhoLkZyYWdtZW50LHtjaGlsZHJlbjpbeS5qc3goInNwYW4iLHtjaGlsZHJlbjpufSkseS5qc3goInNwYW4iLHtjbGFzc05hbWU6InB4LVsycHhdIHRleHQtbXV0ZWQiLGNoaWxkcmVuOiIvIn0pXX0sYCR7dH0vJHtufWApOnkuanN4KHNJLHtjaGlsZHJlbjpufSx0KSl9ZnVuY3Rpb24gc0koe2NoaWxkcmVuOnR9KXtpZih0LmluY2x1ZGVzKCIuIikpe2NvbnN0IGU9dC5zcGxpdCgiLiIpO3JldHVybiBlLm1hcCgobixyKT0+ciE9PWUubGVuZ3RoLTE/eS5qc3hzKGguRnJhZ21lbnQse2NoaWxkcmVuOlt5LmpzeCgic3BhbiIse2NoaWxkcmVuOnI9PT0wP246SlNPTi5wYXJzZShuKX0pLHkuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJweC1bMnB4XSB0ZXh0LW11dGVkIixjaGlsZHJlbjoiLiJ9KV19LGAke3R9LiR7bn1gKTp5LmpzeCgic3BhbiIse2NoaWxkcmVuOnI9PT0wP246SlNPTi5wYXJzZShuKX0sdCkpfXJldHVybiB5LmpzeCgic3BhbiIse2NoaWxkcmVuOnR9KX1jb25zdCBnaz1pZS5jcmVhdGVDb250ZXh0KG51bGwpLGFJPXQ9Pnt2YXIgcyxhO2NvbnN0IGU9aWUudXNlQ29udGV4dChnayksW24scl09cm4uc3BsaXRNb2R1bGVJZEFuZE1vZHVsZVBhdGgodCksaT0ocz1lPT1udWxsP3ZvaWQgMDplW25dKT09bnVsbD92b2lkIDA6cy5zb3VyY2Usbz0oYT1lPT1udWxsP3ZvaWQgMDplW25dKT09bnVsbD92b2lkIDA6YS5zY2hlbWE7aWYoIWl8fCFvKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBtb2R1bGU6ICIrbik7Y29uc3QgbD1ybi5yZXNvbHZlUGF0aChyLGksbyk7cmV0dXJue21vZHVsZUlkOm4sbW9kdWxlU291cmNlOmwuc291cmNlLG1vZHVsZVNjaGVtYTpsLnNjaGVtYX19LGNJPSh7YXBpOnR9KT0+e3ZhciBULEQ7Y29uc3R7IioiOmV9PVpEKCksW24scl09aC51c2VTdGF0ZShudWxsKSxbaSxvXT1oLnVzZVN0YXRlKG51bGwpLFtsLHNdPWgudXNlU3RhdGUoKSxbYV09bD9ybi5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aChsKTpbdm9pZCAwLHZvaWQgMF0sYz1hJiYoKFQ9bj09bnVsbD92b2lkIDA6blthXSk9PW51bGw/dm9pZCAwOlQuc291cmNlKSx1PWEmJigoRD1uPT1udWxsP3ZvaWQgMDpuW2FdKT09bnVsbD92b2lkIDA6RC5zY2hlbWEpLGQ9T2JqZWN0LmVudHJpZXMobnx8e30pLmZsYXRNYXAoKFtMLEtdKT0+Sy5lcnJvcnM/Sy5lcnJvcnMuZmF0YWw/Sy5lcnJvcnMuZmF0YWwubWFwKEI9Pih7aWQ6TCwuLi5CfSkpOltdOltdKSxmPU9iamVjdC5lbnRyaWVzKG58fHt9KS5mbGF0TWFwKChbLExdKT0+TC5lcnJvcnMmJkwuZXJyb3JzLnZhbGlkYXRpb24/W0wuZXJyb3JzLnZhbGlkYXRpb25dOltdKTtpZihkJiZkLmxlbmd0aD4wKXtjb25zdCBMPWQubGVuZ3RoPT09MT9kWzBdLm1lc3NhZ2U6YE11bHRpcGxlIGVycm9ycyBkZXRlY3RlZDoKJHtkLm1hcCgoQixaKT0+YCR7WisxfS4gWyR7Qi5pZH1dOiAke0IubWVzc2FnZX1gKS5qb2luKGAKYCl9CgpTaG93aW5nIHN0YWNrIHRyYWNlIG9mOiAxLiAke2RbMF0ubWVzc2FnZX1gLEs9bmV3IEVycm9yKEwpO3Rocm93IEsuc3RhY2s9ZFswXS5zdGFjayxLfWYmJmYubGVuZ3RoPjAmJmNvbnNvbGUud2FybigiVmFsIGVuY291bnRlcmVkIHZhbGlkYXRpb24gZXJyb3JzOiIsZiksaC51c2VFZmZlY3QoKCk9PntzKGU/YC8ke2V9YDpsKX0sW2VdKTtjb25zdFtwLGddPWgudXNlU3RhdGUobnVsbCk7aC51c2VFZmZlY3QoKCk9Pnt0cnl7bmV3IFdlYlNvY2tldChgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2luLnJlcGxhY2UoImh0dHA6Ly8iLCJ3czovLyIpfS9fbmV4dC93ZWJwYWNrLWhtcmApLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEs9PntsZXQgQjt0cnl7Qj1KU09OLnBhcnNlKEsuZGF0YSl9Y2F0Y2h7Y29uc29sZS5lcnJvcigiRmFpbGVkIHRvIHBhcnNlIEhNUiIpfXR5cGVvZihCPT1udWxsP3ZvaWQgMDpCLmhhc2gpPT0ic3RyaW5nIiYmKEI9PW51bGw/dm9pZCAwOkIuYWN0aW9uKT09PSJidWlsdCImJmcoQi5oYXNoKX0pfWNhdGNoKEwpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGluaXRpYWxpemUgSE1SIixMKX19LFtdKSxoLnVzZUVmZmVjdCgoKT0+e2NvbnNvbGUubG9nKCIoUmUpLWZldGNoaW5nIG1vZHVsZXMiKSx0LmdldFRyZWUoe3BhdGNoOiEwLGluY2x1ZGVTY2hlbWE6ITAsaW5jbHVkZVNvdXJjZTohMH0pLnRoZW4oTD0+e0ZvLmlzT2soTCk/cihMLnZhbHVlLm1vZHVsZXMpOihvKCJDb3VsZCBub3QgbG9hZCBtb2R1bGVzOiAiK0wuZXJyb3IubWVzc2FnZSksY29uc29sZS5lcnJvcihMLmVycm9yKSl9KX0sW3BdKTtjb25zdCBtPXhNKHQpLHc9ZnkoKSxbdix4XT14NCgpLHtwYXRjaGVzOl8sc2V0UGF0Y2hSZXNldElkOlN9PXk0KG0sdCksRT1pZS51c2VSZWYobnVsbCksaz1oLnVzZUNhbGxiYWNrKEw9PmFzeW5jIEs9Pntjb25zdFtCLFpdPXJuLnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKEwpLFI9YXdhaXQgSyhybi5jcmVhdGVQYXRjaEpTT05QYXRoKFopKTtyZXR1cm4gdC5wb3N0UGF0Y2hlcyhCLFIpLnRoZW4oUD0+e2lmKEZvLmlzRXJyKFApKXRocm93IFAuZXJyb3I7aWYoIXApcmV0dXJuIFMoYj0+YisxKSx0LmdldFRyZWUoe3RyZWVQYXRoOkIscGF0Y2g6ITAsaW5jbHVkZVNjaGVtYTohMCxpbmNsdWRlU291cmNlOiEwfSkudGhlbihiPT57Rm8uaXNPayhiKT9yKGo9Pih7Li4uaiwuLi5iLnZhbHVlLm1vZHVsZXN9KSk6KG8oIkNvdWxkIG5vdCBsb2FkIG1vZHVsZXM6ICIrYi5lcnJvci5tZXNzYWdlKSxjb25zb2xlLmVycm9yKGIuZXJyb3IpKX0pfSkuY2F0Y2goUD0+e2NvbnNvbGUuZXJyb3IoUCl9KX0sW10pLFtDLE5dPWgudXNlU3RhdGUoITEpLEE9T2JqZWN0LmVudHJpZXMobnx8e30pLmZsYXRNYXAoKFtMLEtdKT0+SyE9bnVsbCYmSy5zY2hlbWEmJihLIT1udWxsJiZLLnNvdXJjZSk/W0xdOkshPW51bGwmJksuZXJyb3JzP1tMXTpbXSk7cmV0dXJuIHkuanN4KFJDLlByb3ZpZGVyLHt2YWx1ZTp7dGhlbWU6dixzZXRUaGVtZTp4LGFwaTp0LGVkaXRNb2RlOiJmdWxsIixzZXNzaW9uOm0saGlnaGxpZ2h0OiExLHNldEhpZ2hsaWdodDooKT0+e30sc2V0RWRpdE1vZGU6KCk9Pnt9LHNldFdpbmRvd1NpemU6KCk9Pnt9fSxjaGlsZHJlbjp5LmpzeHMoImRpdiIse2lkOiJ2YWwtZnVsbHNjcmVlbi1jb250YWluZXIiLGNsYXNzTmFtZToicmVsYXRpdmUgdy1mdWxsIGgtWzEwMF0gb3ZlcmZsb3ctaGlkZGVuIGZvbnQtc2VyaWYgYW50aWFsaWFzZWQgYmctYmFja2dyb3VuZCB0ZXh0LXByaW1hcnkiLCJkYXRhLW1vZGUiOnYsY2hpbGRyZW46W0MmJnkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIHotNSB0b3AtWzE2cHhdIGxlZnQtWzE2cHhdIHctW2NhbGMoMTAwJS0zMnB4LTUwcHgtMTZweCldIGgtW2NhbGMoMTAwc3ZoLTMycHgpXSIsY2hpbGRyZW46eS5qc3goSk0se3BhdGNoZXM6XyxhcGk6dCxvbkNhbmNlbDooKT0+e04oITEpfSxvbkNvbW1pdDooKT0+e1MoTD0+TCsxKX19KX0pLHkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZpeGVkIC10cmFuc2xhdGUteS0xLzIgcmlnaHQtNCB0b3AtMS8yIHotb3ZlcmxheSIsY2hpbGRyZW46eS5qc3godjQse2RpcmVjdGlvbjoidmVydGljYWwiLGFwaTp0LHBhdGNoZXM6XyxvbkNsaWNrUGF0Y2hlczooKT0+TihMPT4hTCl9KX0pLHkuanN4KCJkaXYiLHtpZDoidmFsLWZ1bGxzY3JlZW4taG92ZXIiLHJlZjpFfSkseS5qc3godmsuUHJvdmlkZXIse3ZhbHVlOntob3ZlckVsZW06RT09bnVsbD92b2lkIDA6RS5jdXJyZW50fSxjaGlsZHJlbjp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXByaW1hcnkiLGNoaWxkcmVuOnkuanN4cyhUYSx7Y2hpbGRyZW46W3kuanN4KCJkaXYiLHtjbGFzc05hbWU6InB4LTQgaC1bNTBweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIiLGNoaWxkcmVuOnkuanN4KFpiLHt9KX0pLHkuanN4KCRhLHtjbGFzc05hbWU6InB4LTQiLGNoaWxkcmVuOm4/eS5qc3goeUkse3NlbGVjdGVkUGF0aDpsLHBhdGhzOkEsc2V0U2VsZWN0ZWRNb2R1bGVJZDpMPT57dyhMKX19KTohaSYmeS5qc3goImRpdiIse2NsYXNzTmFtZToicHktNCIsY2hpbGRyZW46IkxvYWRpbmcuLi4ifSl9KSx5LmpzeHMoImRpdiIse2NsYXNzTmFtZToiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1zdGFydCBoLVs1MHB4XSBnYXAtMiBmb250LXNlcmlmIHRleHQteHMiLGNoaWxkcmVuOlt5LmpzeCgiYnV0dG9uIix7b25DbGljazooKT0+e2hpc3RvcnkuYmFjaygpfSxjaGlsZHJlbjp5LmpzeChmUix7fSl9KSx5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsZGlyOiJydGwiLHRpdGxlOmwsY2hpbGRyZW46eS5qc3goVm8se2NoaWxkcmVuOmx8fCIvIn0pfSldfSkseS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNCIsY2hpbGRyZW46W2kmJnkuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJtYXgtdy14bCBwLTQgdGV4dC1sZyBiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOlsiRVJST1I6ICIsaV19KSxtLnN0YXR1cz09PSJzdWNjZXNzIiYmbS5kYXRhLm1vZGU9PT0idW5hdXRob3JpemVkIiYmeS5qc3goImRpdiIse2NsYXNzTmFtZToibWF4LXcteGwgcC00IHRleHQtbGcgYmctZGVzdHJ1Y3RpdmUgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIixjaGlsZHJlbjoiTm90IGF1dGhvcml6ZWQifSksbS5zdGF0dXM9PT0ic3VjY2VzcyImJm0uZGF0YS5tb2RlIT09InVuYXV0aG9yaXplZCImJm4mJmwmJmEmJmMhPT12b2lkIDAmJnUhPT12b2lkIDAmJnkuanN4KGdrLlByb3ZpZGVyLHt2YWx1ZTpuLGNoaWxkcmVuOnkuanN4KGRJLHtwYXRoOmwsc291cmNlOmMsc2NoZW1hOnUsc2V0U2VsZWN0ZWRQYXRoOnMsaW5pdE9uU3VibWl0Omt9KX0pXX0pXX0pfSl9KV19KX0pfSx2az1pZS5jcmVhdGVDb250ZXh0KHtob3ZlckVsZW06bnVsbH0pLHVJPSgpPT5pZS51c2VDb250ZXh0KHZrKTtmdW5jdGlvbiBkSSh7cGF0aDp0LHNvdXJjZTplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDppfSl7Y29uc3RbLG9dPXJuLnNwbGl0TW9kdWxlSWRBbmRNb2R1bGVQYXRoKHQpLGw9cm4ucmVzb2x2ZVBhdGgobyxlLG4pO2lmKCFsKXRocm93IEVycm9yKCJDb3VsZCBub3QgcmVzb2x2ZSBtb2R1bGU6ICIrdCk7cmV0dXJuIHkuanN4KHB5LHtwYXRoOnQsc291cmNlOmwuc291cmNlLHNjaGVtYTpsLnNjaGVtYSxzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6aSx0b3A6ITB9KX1mdW5jdGlvbiBweSh7cGF0aDp0LHNvdXJjZTplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGZpZWxkOmksaW5pdE9uU3VibWl0Om8sdG9wOmx9KXtpZihuLm9wdClyZXR1cm4geS5qc3goZ0kse3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixmaWVsZDppLGluaXRPblN1Ym1pdDpvLHNldFNlbGVjdGVkUGF0aDpyfSk7aWYoZT09PW51bGwpcmV0dXJuIHkuanN4KF9rLHtzb3VyY2U6ZSxzY2hlbWE6bixwYXRoOnQsc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Om99KTtpZihuLnR5cGU9PT0ib2JqZWN0IilyZXR1cm4gdHlwZW9mIGUhPSJvYmplY3QifHxabChlKT95LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIG9iamVjdCwgYnV0IGZvdW5kICIsdHlwZW9mIGVdfSk6eS5qc3goeWsse3NvdXJjZTplLHBhdGg6dCxzY2hlbWE6bixpbml0T25TdWJtaXQ6byxzZXRTZWxlY3RlZFBhdGg6cix0b3A6bH0pO2lmKG4udHlwZT09PSJhcnJheSIpcmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Inx8IVpsKGUpP3kuanN4cygiZGl2Iix7Y2hpbGRyZW46WyJFUlJPUjogZXhwZWN0ZWQgYXJyYXksIGJ1dCBmb3VuZCAiLHR5cGVvZiBlXX0pOnkuanN4cygiZGl2Iix7Y2hpbGRyZW46W2k/eS5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjppfSk6eS5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOnQsZGlyOiJydGwiLGNoaWxkcmVuOnkuanN4KFZvLHtjaGlsZHJlbjp0fSl9KSx5LmpzeCh4ayx7c291cmNlOmUscGF0aDp0LHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSldfSk7aWYobi50eXBlPT09InJlY29yZCIpcmV0dXJuIHR5cGVvZiBlIT0ib2JqZWN0Ij95LmpzeHMoImRpdiIse2NoaWxkcmVuOlsiRVJST1I6IGV4cGVjdGVkIG9iamVjdCBmb3IgIixuLnR5cGUsIiwgYnV0IGZvdW5kICIsdHlwZW9mIGVdfSk6WmwoZSk/eS5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIkVSUk9SOiBkaWQgbm90IGV4cGVjdCBhcnJheSBmb3IgIixuLnR5cGVdfSk6eS5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbaT95LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxlZnQiLGNoaWxkcmVuOml9KTp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsdGl0bGU6dCxkaXI6InJ0bCIsY2hpbGRyZW46eS5qc3goVm8se2NoaWxkcmVuOnR9KX0pLHkuanN4KHBJLHtzb3VyY2U6ZSxwYXRoOnQsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KV19KTtpZigobj09bnVsbD92b2lkIDA6bi50eXBlKT09PSJ1bmlvbiIpe2lmKG4ua2V5JiZ0eXBlb2YgZT09Im9iamVjdCImJiFabChlKSlyZXR1cm4geS5qc3goZkkse2ZpZWxkOmksdGFnOm4ua2V5LHNvdXJjZTplLHBhdGg6dCxzY2hlbWE6bixpbml0T25TdWJtaXQ6byxzZXRTZWxlY3RlZFBhdGg6cix0b3A6bH0pfWVsc2UgaWYoKG49PW51bGw/dm9pZCAwOm4udHlwZSk9PT0ibGl0ZXJhbCIpcmV0dXJuIHkuanN4KHkuRnJhZ21lbnQse30pO3JldHVybiB5LmpzeHMoImRpdiIse2NsYXNzTmFtZToicHktMiBnYXAteS00IixjaGlsZHJlbjpbaT95LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LWxlZnQiLGNoaWxkcmVuOml9KTp5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsdGl0bGU6dCxkaXI6InJ0bCIsY2hpbGRyZW46eS5qc3goVm8se2NoaWxkcmVuOnR9KX0pLHkuanN4KFZiLHtwYXRoOnQsZGlzYWJsZWQ6ITEsc291cmNlOmUsc2NoZW1hOm4sb25TdWJtaXQ6byh0KX0pXX0pfWZ1bmN0aW9uIGZJKHt0YWc6dCxmaWVsZDplLHBhdGg6bixzb3VyY2U6cixzY2hlbWE6aSxzZXRTZWxlY3RlZFBhdGg6byxpbml0T25TdWJtaXQ6bCx0b3A6c30pe2NvbnN0W2EsY109aC51c2VTdGF0ZShudWxsKSxbdSxkXT1oLnVzZVN0YXRlKG51bGwpLGY9aS5pdGVtcy5mbGF0TWFwKG09PntpZihtLnR5cGU9PT0ib2JqZWN0IiYmbS5pdGVtc1t0XSl7Y29uc3Qgdz1tLml0ZW1zW3RdO2lmKHcudHlwZT09PSJsaXRlcmFsIilyZXR1cm5bdy52YWx1ZV19cmV0dXJuW119KTtoLnVzZUVmZmVjdCgoKT0+e2lmKGEpe2NvbnN0IG09clt0XSx3PWkuaXRlbXMuZmluZCh2PT57aWYodi50eXBlPT09Im9iamVjdCImJnYuaXRlbXNbdF0pe2NvbnN0IHg9di5pdGVtc1t0XTtyZXR1cm4geC50eXBlPT09ImxpdGVyYWwiP3gudmFsdWU9PT1hOiExfX0pO20mJnR5cGVvZiBtPT0ic3RyaW5nIiYmdz9kKHtzb3VyY2U6cixzY2hlbWE6d30pOnc/ZCh7c2NoZW1hOnd9KTooY29uc29sZS5lcnJvcigiQ291bGQgbm90IGZpbmQgc291cmNlIG9yIHNjaGVtYSBvZiBrZXkiLGEscixpKSxkKG51bGwpKX1lbHNle2NvbnN0IG09cj09bnVsbD92b2lkIDA6clt0XTttJiZ0eXBlb2YgbT09InN0cmluZyImJmMobSl9fSxbYSxyLHQsaSxmXSksZi5sZW5ndGghPT1pLml0ZW1zLmxlbmd0aCYmY29uc29sZS53YXJuKCJOb3QgYWxsIGl0ZW1zIGhhdmUgdGFnOiIsdCk7Y29uc3QgcD0hMSxnPWwobik7cmV0dXJuIHkuanN4cyhDbyx7Y2xhc3NOYW1lOkZuKCJmbGV4IGZsZXgtY29sIGdhcC15LTQiLHsiYm9yZGVyLWwtMiBib3JkZXItYm9yZGVyIHBsLTYiOiFzfSksY2hpbGRyZW46W2U/eS5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC1sZWZ0IixjaGlsZHJlbjplfSk6eS5qc3goImRpdiIse2NsYXNzTmFtZToidHJ1bmNhdGUgbWF4LXctWzMwMHB4XSB0ZXh0LWxlZnQiLHRpdGxlOm4sZGlyOiJydGwiLGNoaWxkcmVuOnkuanN4KFZvLHtjaGlsZHJlbjpufSl9KSx5LmpzeHMoV2Ise3ZhbHVlOmE/P3ZvaWQgMCxkaXNhYmxlZDpwLG9uVmFsdWVDaGFuZ2U6bT0+e2MobSl9LGNoaWxkcmVuOlt5LmpzeChseSx7Y2hpbGRyZW46eS5qc3goSGIse3BsYWNlaG9sZGVyOiJTZWxlY3QgdHlwZSJ9KX0pLHkuanN4KHN5LHtjaGlsZHJlbjpmLm1hcChtPT55LmpzeChheSx7dmFsdWU6bS50b1N0cmluZygpLGNoaWxkcmVuOm0udG9TdHJpbmcoKX0sbSkpfSldfSkseS5qc3gobWwse2xvYWRpbmc6cCxlbmFibGVkOiExLG9uQ2xpY2s6KCk9PmcoYXN5bmMoKT0+W10pfSksdSYmeS5qc3gocHkse3BhdGg6bixzb3VyY2U6dS5zb3VyY2U/P251bGwsc2NoZW1hOnUuc2NoZW1hLHNldFNlbGVjdGVkUGF0aDpvLGluaXRPblN1Ym1pdDpsLHRvcDpzfSldfSxuKX1mdW5jdGlvbiB5ayh7cGF0aDp0LHNvdXJjZTplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyLGluaXRPblN1Ym1pdDppLHRvcDpvfSl7cmV0dXJuIHkuanN4KCJkaXYiLHtjbGFzc05hbWU6Rm4oImZsZXggZmxleC1jb2wgZ2FwLXktMSIseyJib3JkZXItbC0yIGJvcmRlci1ib3JkZXIgcGwtNiI6IW99KSxjaGlsZHJlbjpPYmplY3QuZW50cmllcyhuLml0ZW1zKS5tYXAoKFtsLHNdKT0+e2NvbnN0IGE9TmModCxsKTtyZXR1cm4geS5qc3gocHkse3BhdGg6YSxzb3VyY2U6KGU9PW51bGw/dm9pZCAwOmVbbF0pPz9udWxsLHNjaGVtYTpzLHNldFNlbGVjdGVkUGF0aDpyLGZpZWxkOmwsaW5pdE9uU3VibWl0Oml9LGEpfSl9LHQpfWZ1bmN0aW9uIHBJKHtwYXRoOnQsc291cmNlOmUsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnJ9KXtjb25zdCBpPWZ5KCk7cmV0dXJuIHkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLTQgcC0yIixjaGlsZHJlbjpPYmplY3QuZW50cmllcyhlKS5tYXAoKFtvLGxdKT0+e2NvbnN0IHM9TmModCxvKTtyZXR1cm4geS5qc3goImJ1dHRvbiIse29uQ2xpY2s6KCk9PntyKHMpLGkocyl9LGNoaWxkcmVuOnkuanN4KGhJLHtyZWNvcmRLZXk6byxwYXRoOnMsc291cmNlOmwsc2NoZW1hOm4uaXRlbX0pfSxzKX0pfSx0KX1jb25zdCBzZz0xNzA7ZnVuY3Rpb24gaEkoe3JlY29yZEtleTp0LHBhdGg6ZSxzb3VyY2U6bixzY2hlbWE6cn0pe2NvbnN0IGk9aWUudXNlUmVmKG51bGwpLFtvLGxdPWgudXNlU3RhdGUoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2kuY3VycmVudCYmaS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodD49c2cmJmwoITApfSxbXSkseS5qc3hzKGN5LHtyZWY6aSxjbGFzc05hbWU6InJlbGF0aXZlIHB4LTQgcHQtMiBwYi00IG92ZXJmbG93LWhpZGRlbiBib3JkZXIgZ2FwLXktMiIsc3R5bGU6e21heEhlaWdodDpzZ30sY2hpbGRyZW46W3kuanN4KCJkaXYiLHtjbGFzc05hbWU6InBiLTQgZm9udC1zZXJpZiB0ZXh0LWxlZnQgdGV4dC1hY2NlbnQiLGNoaWxkcmVuOnR9KSx5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0ZXh0LXhzIixjaGlsZHJlbjp5LmpzeChoeSx7cGF0aDplLHNvdXJjZTpuLHNjaGVtYTpyfSl9KSxvJiZ5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTAgdy1mdWxsIGgtWzIwcHhdIGJnLWdyYWRpZW50LXRvLWIgZnJvbS10cmFuc3BhcmVudCB0by1iYWNrZ3JvdW5kIn0pXX0sZSl9ZnVuY3Rpb24geGsoe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cn0pe2NvbnN0IGk9ZnkoKTtyZXR1cm4geS5qc3goQ28se2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCBnYXAtNCBwLTIgcGItOCIsY2hpbGRyZW46ZS5tYXAoKG8sbCk9Pntjb25zdCBzPU5jKHQsbCk7cmV0dXJuIHkuanN4KCJidXR0b24iLHtvbkNsaWNrOigpPT57cihzKSxpKHMpfSxjaGlsZHJlbjp5LmpzeChtSSx7aW5kZXg6bCxwYXRoOnMsc291cmNlOm8sc2NoZW1hOm4uaXRlbX0scyl9LHMpfSl9LHQpfWNvbnN0IE4xPXNnO2Z1bmN0aW9uIG1JKHtpbmRleDp0LHBhdGg6ZSxzb3VyY2U6bixzY2hlbWE6cn0pe2NvbnN0IGk9aWUudXNlUmVmKG51bGwpLFtvLGxdPWgudXNlU3RhdGUoITEpO3JldHVybiBoLnVzZUVmZmVjdCgoKT0+e2kuY3VycmVudCYmaS5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodD49TjEmJmwoITApfSxbXSkseS5qc3hzKGN5LHtyZWY6aSxjbGFzc05hbWU6InJlbGF0aXZlIHB4LTQgcHQtMiBwYi00IG92ZXJmbG93LWhpZGRlbiBib3JkZXIgZ2FwLXktMiIsc3R5bGU6e21heEhlaWdodDpOMX0sY2hpbGRyZW46W3kuanN4KCJkaXYiLHtjbGFzc05hbWU6InBiLTQgZm9udC1zZXJpZiB0ZXh0LWxlZnQgdXBwZXJjYXNlIHRleHQtYWNjZW50IixjaGlsZHJlbjp0KzE8MTA/YDAke3QrMX1gOnQrMX0pLHkuanN4KCJkaXYiLHtjbGFzc05hbWU6InRleHQteHMiLGNoaWxkcmVuOnkuanN4KGh5LHtwYXRoOmUsc291cmNlOm4sc2NoZW1hOnJ9KX0pLG8mJnkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImFic29sdXRlIGJvdHRvbS0wIGxlZnQtMCB3LWZ1bGwgaC1bMjBweF0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXRyYW5zcGFyZW50IHRvLWJhY2tncm91bmQifSldfSl9ZnVuY3Rpb24gTmModCxlKXtjb25zdCBuPXJuLmNyZWF0ZVZhbFBhdGhPZkl0ZW0odCxlKTtpZighbil0aHJvdyBFcnJvcihgQ291bGQgbm90IGNyZWF0ZSB2YWwgcGF0aDogJHt0fSBvZiAke2U9PW51bGw/dm9pZCAwOmUudG9TdHJpbmcoKX1gKTtyZXR1cm4gbn1mdW5jdGlvbiBoeSh7cGF0aDp0LHNvdXJjZTplLHNjaGVtYTpufSl7Y29uc3RbcixpXT1oLnVzZVN0YXRlKG51bGwpLHtob3ZlckVsZW06b309dUkoKTtpZihuLnR5cGU9PT0ib2JqZWN0IilyZXR1cm4geS5qc3goImRpdiIse2NsYXNzTmFtZToiZ3JpZCBncmlkLWNvbHMtW21pbi1jb250ZW50XzFmcl0gZ2FwLTIgdGV4dC1sZWZ0IixjaGlsZHJlbjpPYmplY3QuZW50cmllcyhuLml0ZW1zKS5tYXAoKFtsXSk9PnkuanN4cyhoLkZyYWdtZW50LHtjaGlsZHJlbjpbeS5qc3hzKCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LW11dGVkIixjaGlsZHJlbjpbbCwiOiJdfSkseS5qc3goInNwYW4iLHtjaGlsZHJlbjp5LmpzeChoeSx7c291cmNlOihlPT1udWxsP3ZvaWQgMDplW2xdKT8/bnVsbCxzY2hlbWE6bi5pdGVtc1tsXSxwYXRoOk5jKHQsbCl9KX0pXX0sTmModCxsKSkpfSx0KTtpZihuLnR5cGU9PT0iYXJyYXkiKXJldHVybiBlPT09bnVsbD95LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LHQpOkFycmF5LmlzQXJyYXkoZSk/eS5qc3hzKCJzcGFuIix7Y2hpbGRyZW46W3kuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46ZS5sZW5ndGh9KSx5LmpzeCgic3BhbiIse2NoaWxkcmVuOmUubGVuZ3RoPT09MT8iIGl0ZW0iOiIgaXRlbXMifSldfSx0KTp5LmpzeCgic3BhbiIse2NsYXNzTmFtZToicHgtMiBiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOiJVbmtub3duIGxlbmd0aCJ9LHQpO2lmKG4udHlwZT09PSJyaWNodGV4dCIpcmV0dXJuIGU9PT1udWxsP3kuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sdCk6dHlwZW9mIGUhPSJvYmplY3QiP3kuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJwLTQgdGV4dC1kZXN0cnVjdGl2ZS1mb3JlZ3JvdW5kIGJnLWRlc3RydWN0aXZlIixjaGlsZHJlbjpbIkVSUk9SOiAiLHR5cGVvZiBlLCIgbm90IGFuIG9iamVjdCJdfSx0KTohKG5uIGluIGUpfHxlW25uXSE9PSJyaWNodGV4dCI/eS5qc3goImRpdiIse2NsYXNzTmFtZToicC00IHRleHQtZGVzdHJ1Y3RpdmUtZm9yZWdyb3VuZCBiZy1kZXN0cnVjdGl2ZSIsY2hpbGRyZW46IkVSUk9SOiBvYmplY3QgaXMgbm90IHJpY2h0ZXh0In0sdCk6eS5qc3goeEkse2NoaWxkcmVuOldFKGUpfSx0KTtpZihuLnR5cGU9PT0ic3RyaW5nIilyZXR1cm4gZT09PW51bGw/eS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSx0KTp5LmpzeCgic3BhbiIse2NoaWxkcmVuOmV9KTtpZihuLnR5cGU9PT0iaW1hZ2UiKXtpZihlPT09bnVsbClyZXR1cm4geS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjoiRW1wdHkifSx0KTtpZih0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuIHkuanN4KCJkaXYiLHtjbGFzc05hbWU6InAtNCB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOiJFUlJPUjogbm90IGFuIG9iamVjdCJ9LHQpO2lmKCEoUG4gaW4gZSl8fHR5cGVvZiBlW1BuXSE9InN0cmluZyIpcmV0dXJuIHkuanN4KCJkaXYiLHtjbGFzc05hbWU6InAtNCB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgYmctZGVzdHJ1Y3RpdmUiLGNoaWxkcmVuOiJFUlJPUjogb2JqZWN0IGlzIG5vdCBhbiBpbWFnZSJ9LHQpO2NvbnN0IGw9cm4uY29udmVydEZpbGVTb3VyY2UoZSkudXJsO3JldHVybiB5LmpzeHMoInNwYW4iLHtvbk1vdXNlT3ZlcjpzPT57aSh7eDpzLmNsaWVudFgseTpzLmNsaWVudFl9KX0sb25Nb3VzZUxlYXZlOigpPT57aShudWxsKX0sY2xhc3NOYW1lOiJyZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC0xIixjaGlsZHJlbjpbeS5qc3goImEiLHtocmVmOmwsY2xhc3NOYW1lOiJvdmVyZmxvdy1oaWRkZW4gdW5kZXJsaW5lIHRydW5jYXRlICIsY2hpbGRyZW46ZVtQbl19KSxyJiZvJiZZci5jcmVhdGVQb3J0YWwoeS5qc3goImltZyIse2NsYXNzTmFtZToiYWJzb2x1dGUgei1bNV0gbWF4LXctWzEwdnddIixzdHlsZTp7bGVmdDpyLngrMTAsdG9wOnIueSsxMH0sc3JjOmx9KSxvKV19LHQpfWVsc2V7aWYobi50eXBlPT09ImJvb2xlYW4iKXJldHVybiBlPT09bnVsbD95LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LHQpOnkuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46ZT8idHJ1ZSI6ImZhbHNlIn0sdCk7aWYobi50eXBlPT09Im51bWJlciIpcmV0dXJuIGU9PT1udWxsP3kuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46IkVtcHR5In0sdCk6eS5qc3goInNwYW4iLHtjbGFzc05hbWU6InRleHQtYWNjZW50IixjaGlsZHJlbjplLnRvU3RyaW5nKCl9KTtpZihuLnR5cGU9PT0ia2V5T2YiKXJldHVybiBlPT09bnVsbD95LmpzeCgic3BhbiIse2NsYXNzTmFtZToidGV4dC1hY2NlbnQiLGNoaWxkcmVuOiJFbXB0eSJ9LHQpOnkuanN4KCJzcGFuIix7Y2xhc3NOYW1lOiJ0ZXh0LWFjY2VudCIsY2hpbGRyZW46ZS50b1N0cmluZygpfSx0KX1yZXR1cm4geS5qc3hzKCJkaXYiLHtjaGlsZHJlbjpbIlRPRE86ICIsbi50eXBlXX0sdCl9ZnVuY3Rpb24gZ0koe3BhdGg6dCxzb3VyY2U6ZSxzY2hlbWE6bixzZXRTZWxlY3RlZFBhdGg6cixpbml0T25TdWJtaXQ6aSxmaWVsZDpvfSl7Y29uc3RbbCxzXT1oLnVzZVN0YXRlKGUhPT1udWxsKSx7ZWRpdE1vZGU6YX09SGYoKTtyZXR1cm4geS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggZmxleC1jb2wgZ2FwLXktMiIsY2hpbGRyZW46W3kuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LXN0YXJ0IGdhcC14LTQiLGNoaWxkcmVuOlthPT09ImZ1bGwiJiZ5LmpzeChKYix7Y2hlY2tlZDpsLG9uQ2xpY2s6KCk9PntzKGM9PiFjKX19KSx5LmpzeCgiZGl2Iix7Y2xhc3NOYW1lOiJ0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsdGl0bGU6dCxkaXI6InJ0bCIsY2hpbGRyZW46b3x8eS5qc3goVm8se2NoaWxkcmVuOnR9KX0pXX0pLGwmJnkuanN4KF9rLHtzb3VyY2U6ZSxzY2hlbWE6bixwYXRoOnQsc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Oml9KV19LHQpfWZ1bmN0aW9uIF9rKHtzb3VyY2U6dCxwYXRoOmUsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Oml9KXtpZihuLnR5cGU9PT0iYXJyYXkiKXtpZih0eXBlb2YgdD09Im9iamVjdCImJih0PT09bnVsbHx8WmwodCkpKXJldHVybiB5LmpzeCh4ayx7c291cmNlOnQ9PT1udWxsP1tdOnQscGF0aDplLHNjaGVtYTpuLHNldFNlbGVjdGVkUGF0aDpyfSl9ZWxzZSBpZihuLnR5cGU9PT0ib2JqZWN0Iil7aWYodHlwZW9mIHQ9PSJvYmplY3QiJiYodD09PW51bGx8fCFabCh0KSkpcmV0dXJuIHkuanN4KHlrLHtzb3VyY2U6dCxwYXRoOmUsc2NoZW1hOm4sc2V0U2VsZWN0ZWRQYXRoOnIsaW5pdE9uU3VibWl0Oml9KX1lbHNlIGlmKG4udHlwZT09PSJyaWNodGV4dCJ8fG4udHlwZT09PSJzdHJpbmcifHxuLnR5cGU9PT0iaW1hZ2UifHxuLnR5cGU9PT0ibnVtYmVyInx8bi50eXBlPT09ImtleU9mIilyZXR1cm4geS5qc3goVmIse3BhdGg6ZSxkaXNhYmxlZDohMSxzb3VyY2U6dCxzY2hlbWE6bixvblN1Ym1pdDppKGUpfSxlKTtyZXR1cm4geS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InAtNCBiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQiLGNoaWxkcmVuOlsiRVJST1I6IHVuZXhwZWN0ZWQgc291cmNlIHR5cGUgIix0eXBlb2YgdCwiIGZvciBzY2hlbWEgdHlwZSIsIiAiLG4udHlwZV19KX1mdW5jdGlvbiBabCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiB2SSh0KXtjb25zdCBlPXt9O3JldHVybiB0LmZvckVhY2gobj0+e2NvbnN0IHI9bi5zcGxpdCgiLyIpLmZpbHRlcihpPT5pIT09IiIpO2lmKHIubGVuZ3RoPT09MSllWyIiXXx8KGVbIiJdPVtdKSxlWyIiXS5wdXNoKHJbMF0pO2Vsc2UgaWYoci5sZW5ndGg+MSl7Y29uc3QgaT1yLnNsaWNlKDAsci5sZW5ndGgtMSkuam9pbigiLyIpLG89ci5zbGljZSgtMSlbMF07ZVtpXXx8KGVbaV09W10pLGVbaV0ucHVzaChvKX19KSxlfWZ1bmN0aW9uIHlJKHtzZWxlY3RlZFBhdGg6dCxwYXRoczplLHNldFNlbGVjdGVkTW9kdWxlSWQ6bn0pe2NvbnN0IHI9dkkoZSksaT10JiZybi5zcGxpdE1vZHVsZUlkQW5kTW9kdWxlUGF0aCh0KVswXTtyZXR1cm4geS5qc3goImRpdiIse2NsYXNzTmFtZToiZmxleCBmbGV4LWNvbCB3LWZ1bGwgcHktMiB0ZXh0LXhzIixjaGlsZHJlbjpPYmplY3QuZW50cmllcyhyKS5tYXAoKFtvLGxdKT0+eS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6InB4LTQgcHktMiIsY2hpbGRyZW46W28mJnkuanN4KCJkaXYiLHtjbGFzc05hbWU6ImZvbnQtYm9sZCB0cnVuY2F0ZSBtYXgtdy1bMzAwcHhdIHRleHQtbGVmdCIsdGl0bGU6byxjaGlsZHJlbjp5LmpzeChWbyx7Y2hpbGRyZW46b30pfSkseS5qc3goImRpdiIse2NsYXNzTmFtZTpGbih7ImZsZXggZmxleC1jb2wgcHktMiBqdXN0aWZ5LXN0YXJ0IGl0ZW1zLXN0YXJ0IjohIW99KSxjaGlsZHJlbjpsLm1hcChzPT57Y29uc3QgYT1gLyR7b30vJHtzfWA7cmV0dXJuIHkuanN4KCJidXR0b24iLHtjbGFzc05hbWU6Rm4oImJsb2NrIHB4LTIgcHktMSByb3VuZGVkLWZ1bGwiLHsiYmctYWNjZW50IHRleHQtYWNjZW50LWZvcmVncm91bmQiOmk9PT1hfSksb25DbGljazooKT0+e24oYSl9LGNoaWxkcmVuOnN9LGEpfSl9KV19LGAvJHtvfWApKX0pfWNvbnN0IFIxPXt0YWdzOntoMToiZm9udC1ib2xkIixoMjoiZm9udC1ib2xkIixoMzoiZm9udC1ib2xkIixoNDoiZm9udC1ib2xkIixoNToiZm9udC1ib2xkIixoNjoiZm9udC1ib2xkIixwOiIifSxjbGFzc2VzOntib2xkOiJmb250LWJvbGQiLGl0YWxpYzoiaXRhbGljIixsaW5lVGhyb3VnaDoibGluZS10aHJvdWdoIn19O2Z1bmN0aW9uIHhJKHtjaGlsZHJlbjp0fSl7Y29uc3QgZT10O2Z1bmN0aW9uIG4obyxsKXtjb25zdCBzPVIxLnRhZ3Nbb107cmV0dXJuIHMmJmw/W2wsc10uam9pbigiICIpOnN8fGx9ZnVuY3Rpb24gcihvLGwpe2NvbnN0IHM9UjEuY2xhc3Nlc1tvXTtyZXR1cm4gcyYmbD9bbCxzXS5qb2luKCIgIik6c3x8bH1mdW5jdGlvbiBpKG8sbCl7dmFyIGMsdTtpZih0eXBlb2Ygbz09InN0cmluZyIpcmV0dXJuIG87aWYoby50YWc9PT0icCIpcmV0dXJuIHkuanN4KCJwIix7Y2xhc3NOYW1lOm4oInAiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaW1nIilyZXR1cm4geS5qc3goImltZyIse2NsYXNzTmFtZTpuKCJpbWciKSxzcmM6by5zcmN9LGwpO2lmKG8udGFnPT09InVsIilyZXR1cm4geS5qc3goInVsIix7Y2xhc3NOYW1lOm4oInVsIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09Im9sIilyZXR1cm4geS5qc3goIm9sIix7Y2xhc3NOYW1lOm4oIm9sIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09ImxpIilyZXR1cm4geS5qc3goImxpIix7Y2xhc3NOYW1lOm4oImxpIiksY2hpbGRyZW46by5jaGlsZHJlbi5tYXAoKGQsZik9PmkoZCxmKSl9LGwpO2lmKG8udGFnPT09InNwYW4iKXJldHVybiB5LmpzeCgic3BhbiIse2NsYXNzTmFtZTpvLmNsYXNzZXMubWFwKGQ9Pntzd2l0Y2goZCl7Y2FzZSJib2xkIjpyZXR1cm4gcigiYm9sZCIpO2Nhc2UibGluZS10aHJvdWdoIjpyZXR1cm4gcigibGluZVRocm91Z2giKTtjYXNlIml0YWxpYyI6cmV0dXJuIHIoIml0YWxpYyIpfX0pLmpvaW4oIiAiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDEiKXJldHVybiB5LmpzeCgiaDEiLHtjbGFzc05hbWU6bigiaDEiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDIiKXJldHVybiB5LmpzeCgiaDIiLHtjbGFzc05hbWU6bigiaDIiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDMiKXJldHVybiB5LmpzeCgiaDMiLHtjbGFzc05hbWU6bigiaDMiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDQiKXJldHVybiB5LmpzeCgiaDQiLHtjbGFzc05hbWU6bigiaDQiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDUiKXJldHVybiB5LmpzeCgiaDUiLHtjbGFzc05hbWU6bigiaDUiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iaDYiKXJldHVybiB5LmpzeCgiaDYiLHtjbGFzc05hbWU6bigiaDYiKSxjaGlsZHJlbjpvLmNoaWxkcmVuLm1hcCgoZCxmKT0+aShkLGYpKX0sbCk7aWYoby50YWc9PT0iYnIiKXJldHVybiB5LmpzeCgiYnIiLHt9LGwpO2lmKG8udGFnPT09ImEiKXJldHVybiB5LmpzeCgiYSIse2hyZWY6by5ocmVmLGNoaWxkcmVuOm8uY2hpbGRyZW4ubWFwKChkLGYpPT5pKGQsZikpfSxsKTtjb25zb2xlLmVycm9yKCJVbmtub3duIHRhZyIsby50YWcpO2NvbnN0IGE9by50YWc7cmV0dXJuIGEhPW51bGwmJmEudGFnP2llLmNyZWF0ZUVsZW1lbnQoYS50YWcse2tleTpsLGNsYXNzTmFtZTooYz1hLmNsYXNzKT09bnVsbD92b2lkIDA6Yy5qb2luKCIgIiksY2hpbGRyZW46KHU9YS5jaGlsZHJlbik9PW51bGw/dm9pZCAwOnUubWFwKGkpfSk6bnVsbH1yZXR1cm4geS5qc3goInNwYW4iLHsiZGF0YS12YWwtcGF0aCI6ZS52YWxQYXRoLGNoaWxkcmVuOmUuY2hpbGRyZW4ubWFwKChvLGwpPT5pKG8sbCkpfSl9Y29uc3QgX0k9aC5jcmVhdGVDb250ZXh0KG51bGwpLGloPXtkaWRDYXRjaDohMSxlcnJvcjpudWxsfTtjbGFzcyB3SSBleHRlbmRzIGguQ29tcG9uZW50e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMucmVzZXRFcnJvckJvdW5kYXJ5PXRoaXMucmVzZXRFcnJvckJvdW5kYXJ5LmJpbmQodGhpcyksdGhpcy5zdGF0ZT1paH1zdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGUpe3JldHVybntkaWRDYXRjaDohMCxlcnJvcjplfX1yZXNldEVycm9yQm91bmRhcnkoKXtjb25zdHtlcnJvcjplfT10aGlzLnN0YXRlO2lmKGUhPT1udWxsKXtmb3IodmFyIG4scixpPWFyZ3VtZW50cy5sZW5ndGgsbz1uZXcgQXJyYXkoaSksbD0wO2w8aTtsKyspb1tsXT1hcmd1bWVudHNbbF07KG49KHI9dGhpcy5wcm9wcykub25SZXNldCk9PT1udWxsfHxuPT09dm9pZCAwfHxuLmNhbGwocix7YXJnczpvLHJlYXNvbjoiaW1wZXJhdGl2ZS1hcGkifSksdGhpcy5zZXRTdGF0ZShpaCl9fWNvbXBvbmVudERpZENhdGNoKGUsbil7dmFyIHIsaTsocj0oaT10aGlzLnByb3BzKS5vbkVycm9yKT09PW51bGx8fHI9PT12b2lkIDB8fHIuY2FsbChpLGUsbil9Y29tcG9uZW50RGlkVXBkYXRlKGUsbil7Y29uc3R7ZGlkQ2F0Y2g6cn09dGhpcy5zdGF0ZSx7cmVzZXRLZXlzOml9PXRoaXMucHJvcHM7aWYociYmbi5lcnJvciE9PW51bGwmJlNJKGUucmVzZXRLZXlzLGkpKXt2YXIgbyxsOyhvPShsPXRoaXMucHJvcHMpLm9uUmVzZXQpPT09bnVsbHx8bz09PXZvaWQgMHx8by5jYWxsKGwse25leHQ6aSxwcmV2OmUucmVzZXRLZXlzLHJlYXNvbjoia2V5cyJ9KSx0aGlzLnNldFN0YXRlKGloKX19cmVuZGVyKCl7Y29uc3R7Y2hpbGRyZW46ZSxmYWxsYmFja1JlbmRlcjpuLEZhbGxiYWNrQ29tcG9uZW50OnIsZmFsbGJhY2s6aX09dGhpcy5wcm9wcyx7ZGlkQ2F0Y2g6byxlcnJvcjpsfT10aGlzLnN0YXRlO2xldCBzPWU7aWYobyl7Y29uc3QgYT17ZXJyb3I6bCxyZXNldEVycm9yQm91bmRhcnk6dGhpcy5yZXNldEVycm9yQm91bmRhcnl9O2lmKGguaXNWYWxpZEVsZW1lbnQoaSkpcz1pO2Vsc2UgaWYodHlwZW9mIG49PSJmdW5jdGlvbiIpcz1uKGEpO2Vsc2UgaWYocilzPWguY3JlYXRlRWxlbWVudChyLGEpO2Vsc2UgdGhyb3cgbH1yZXR1cm4gaC5jcmVhdGVFbGVtZW50KF9JLlByb3ZpZGVyLHt2YWx1ZTp7ZGlkQ2F0Y2g6byxlcnJvcjpsLHJlc2V0RXJyb3JCb3VuZGFyeTp0aGlzLnJlc2V0RXJyb3JCb3VuZGFyeX19LHMpfX1mdW5jdGlvbiBTSSgpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmYXJndW1lbnRzWzBdIT09dm9pZCAwP2FyZ3VtZW50c1swXTpbXSxlPWFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdIT09dm9pZCAwP2FyZ3VtZW50c1sxXTpbXTtyZXR1cm4gdC5sZW5ndGghPT1lLmxlbmd0aHx8dC5zb21lKChuLHIpPT4hT2JqZWN0LmlzKG4sZVtyXSkpfS8qKgogKiBSZWFjdCBSb3V0ZXIgRE9NIHY2LjIwLjAKICoKICogQ29weXJpZ2h0IChjKSBSZW1peCBTb2Z0d2FyZSBJbmMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFLm1kIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqCiAqIEBsaWNlbnNlIE1JVAogKi9mdW5jdGlvbiBhZigpe3JldHVybiBhZj1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ24uYmluZCgpOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuPWFyZ3VtZW50c1tlXTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKHRbcl09bltyXSl9cmV0dXJuIHR9LGFmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBFSSh0LGUpe3JldHVybiBBRCh7YmFzZW5hbWU6ZT09bnVsbD92b2lkIDA6ZS5iYXNlbmFtZSxmdXR1cmU6YWYoe30sZT09bnVsbD92b2lkIDA6ZS5mdXR1cmUse3Y3X3ByZXBlbmRCYXNlbmFtZTohMH0pLGhpc3Rvcnk6dEQoe3dpbmRvdzplPT1udWxsP3ZvaWQgMDplLndpbmRvd30pLGh5ZHJhdGlvbkRhdGE6KGU9PW51bGw/dm9pZCAwOmUuaHlkcmF0aW9uRGF0YSl8fENJKCkscm91dGVzOnQsbWFwUm91dGVQcm9wZXJ0aWVzOmxJLHdpbmRvdzplPT1udWxsP3ZvaWQgMDplLndpbmRvd30pLmluaXRpYWxpemUoKX1mdW5jdGlvbiBDSSgpe3ZhciB0O2xldCBlPSh0PXdpbmRvdyk9PW51bGw/dm9pZCAwOnQuX19zdGF0aWNSb3V0ZXJIeWRyYXRpb25EYXRhO3JldHVybiBlJiZlLmVycm9ycyYmKGU9YWYoe30sZSx7ZXJyb3JzOmJJKGUuZXJyb3JzKX0pKSxlfWZ1bmN0aW9uIGJJKHQpe2lmKCF0KXJldHVybiBudWxsO2xldCBlPU9iamVjdC5lbnRyaWVzKHQpLG49e307Zm9yKGxldFtyLGldb2YgZSlpZihpJiZpLl9fdHlwZT09PSJSb3V0ZUVycm9yUmVzcG9uc2UiKW5bcl09bmV3IHV5KGkuc3RhdHVzLGkuc3RhdHVzVGV4dCxpLmRhdGEsaS5pbnRlcm5hbD09PSEwKTtlbHNlIGlmKGkmJmkuX190eXBlPT09IkVycm9yIil7aWYoaS5fX3N1YlR5cGUpe2xldCBvPXdpbmRvd1tpLl9fc3ViVHlwZV07aWYodHlwZW9mIG89PSJmdW5jdGlvbiIpdHJ5e2xldCBsPW5ldyBvKGkubWVzc2FnZSk7bC5zdGFjaz0iIixuW3JdPWx9Y2F0Y2h7fX1pZihuW3JdPT1udWxsKXtsZXQgbz1uZXcgRXJyb3IoaS5tZXNzYWdlKTtvLnN0YWNrPSIiLG5bcl09b319ZWxzZSBuW3JdPWk7cmV0dXJuIG59Y29uc3Qga0k9aC5jcmVhdGVDb250ZXh0KHtpc1RyYW5zaXRpb25pbmc6ITF9KSwkST1oLmNyZWF0ZUNvbnRleHQobmV3IE1hcCksVEk9InN0YXJ0VHJhbnNpdGlvbiIsTzE9SDFbVEldLE5JPSJmbHVzaFN5bmMiLFAxPVpUW05JXTtmdW5jdGlvbiBSSSh0KXtPMT9PMSh0KTp0KCl9ZnVuY3Rpb24gY2EodCl7UDE/UDEodCk6dCgpfWNsYXNzIE9Je2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0dXM9InBlbmRpbmciLHRoaXMucHJvbWlzZT1uZXcgUHJvbWlzZSgoZSxuKT0+e3RoaXMucmVzb2x2ZT1yPT57dGhpcy5zdGF0dXM9PT0icGVuZGluZyImJih0aGlzLnN0YXR1cz0icmVzb2x2ZWQiLGUocikpfSx0aGlzLnJlamVjdD1yPT57dGhpcy5zdGF0dXM9PT0icGVuZGluZyImJih0aGlzLnN0YXR1cz0icmVqZWN0ZWQiLG4ocikpfX0pfX1mdW5jdGlvbiBQSSh0KXtsZXR7ZmFsbGJhY2tFbGVtZW50OmUscm91dGVyOm4sZnV0dXJlOnJ9PXQsW2ksb109aC51c2VTdGF0ZShuLnN0YXRlKSxbbCxzXT1oLnVzZVN0YXRlKCksW2EsY109aC51c2VTdGF0ZSh7aXNUcmFuc2l0aW9uaW5nOiExfSksW3UsZF09aC51c2VTdGF0ZSgpLFtmLHBdPWgudXNlU3RhdGUoKSxbZyxtXT1oLnVzZVN0YXRlKCksdz1oLnVzZVJlZihuZXcgTWFwKSx7djdfc3RhcnRUcmFuc2l0aW9uOnZ9PXJ8fHt9LHg9aC51c2VDYWxsYmFjayhDPT57dj9SSShDKTpDKCl9LFt2XSksXz1oLnVzZUNhbGxiYWNrKChDLE4pPT57bGV0e2RlbGV0ZWRGZXRjaGVyczpBLHVuc3RhYmxlX2ZsdXNoU3luYzpULHVuc3RhYmxlX3ZpZXdUcmFuc2l0aW9uT3B0czpEfT1OO0EuZm9yRWFjaChLPT53LmN1cnJlbnQuZGVsZXRlKEspKSxDLmZldGNoZXJzLmZvckVhY2goKEssQik9PntLLmRhdGEhPT12b2lkIDAmJncuY3VycmVudC5zZXQoQixLLmRhdGEpfSk7bGV0IEw9bi53aW5kb3c9PW51bGx8fHR5cGVvZiBuLndpbmRvdy5kb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uIT0iZnVuY3Rpb24iO2lmKCFEfHxMKXtUP2NhKCgpPT5vKEMpKTp4KCgpPT5vKEMpKTtyZXR1cm59aWYoVCl7Y2EoKCk9PntmJiYodSYmdS5yZXNvbHZlKCksZi5za2lwVHJhbnNpdGlvbigpKSxjKHtpc1RyYW5zaXRpb25pbmc6ITAsZmx1c2hTeW5jOiEwLGN1cnJlbnRMb2NhdGlvbjpELmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246RC5uZXh0TG9jYXRpb259KX0pO2xldCBLPW4ud2luZG93LmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oKCk9PntjYSgoKT0+byhDKSl9KTtLLmZpbmlzaGVkLmZpbmFsbHkoKCk9PntjYSgoKT0+e2Qodm9pZCAwKSxwKHZvaWQgMCkscyh2b2lkIDApLGMoe2lzVHJhbnNpdGlvbmluZzohMX0pfSl9KSxjYSgoKT0+cChLKSk7cmV0dXJufWY/KHUmJnUucmVzb2x2ZSgpLGYuc2tpcFRyYW5zaXRpb24oKSxtKHtzdGF0ZTpDLGN1cnJlbnRMb2NhdGlvbjpELmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246RC5uZXh0TG9jYXRpb259KSk6KHMoQyksYyh7aXNUcmFuc2l0aW9uaW5nOiEwLGZsdXNoU3luYzohMSxjdXJyZW50TG9jYXRpb246RC5jdXJyZW50TG9jYXRpb24sbmV4dExvY2F0aW9uOkQubmV4dExvY2F0aW9ufSkpfSxbbi53aW5kb3csZix1LHcseF0pO2gudXNlTGF5b3V0RWZmZWN0KCgpPT5uLnN1YnNjcmliZShfKSxbbixfXSksaC51c2VFZmZlY3QoKCk9PnthLmlzVHJhbnNpdGlvbmluZyYmIWEuZmx1c2hTeW5jJiZkKG5ldyBPSSl9LFthXSksaC51c2VFZmZlY3QoKCk9PntpZih1JiZsJiZuLndpbmRvdyl7bGV0IEM9bCxOPXUucHJvbWlzZSxBPW4ud2luZG93LmRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oYXN5bmMoKT0+e3goKCk9Pm8oQykpLGF3YWl0IE59KTtBLmZpbmlzaGVkLmZpbmFsbHkoKCk9PntkKHZvaWQgMCkscCh2b2lkIDApLHModm9pZCAwKSxjKHtpc1RyYW5zaXRpb25pbmc6ITF9KX0pLHAoQSl9fSxbeCxsLHUsbi53aW5kb3ddKSxoLnVzZUVmZmVjdCgoKT0+e3UmJmwmJmkubG9jYXRpb24ua2V5PT09bC5sb2NhdGlvbi5rZXkmJnUucmVzb2x2ZSgpfSxbdSxmLGkubG9jYXRpb24sbF0pLGgudXNlRWZmZWN0KCgpPT57IWEuaXNUcmFuc2l0aW9uaW5nJiZnJiYocyhnLnN0YXRlKSxjKHtpc1RyYW5zaXRpb25pbmc6ITAsZmx1c2hTeW5jOiExLGN1cnJlbnRMb2NhdGlvbjpnLmN1cnJlbnRMb2NhdGlvbixuZXh0TG9jYXRpb246Zy5uZXh0TG9jYXRpb259KSxtKHZvaWQgMCkpfSxbYS5pc1RyYW5zaXRpb25pbmcsZ10pO2xldCBTPWgudXNlTWVtbygoKT0+KHtjcmVhdGVIcmVmOm4uY3JlYXRlSHJlZixlbmNvZGVMb2NhdGlvbjpuLmVuY29kZUxvY2F0aW9uLGdvOkM9Pm4ubmF2aWdhdGUoQykscHVzaDooQyxOLEEpPT5uLm5hdmlnYXRlKEMse3N0YXRlOk4scHJldmVudFNjcm9sbFJlc2V0OkE9PW51bGw/dm9pZCAwOkEucHJldmVudFNjcm9sbFJlc2V0fSkscmVwbGFjZTooQyxOLEEpPT5uLm5hdmlnYXRlKEMse3JlcGxhY2U6ITAsc3RhdGU6TixwcmV2ZW50U2Nyb2xsUmVzZXQ6QT09bnVsbD92b2lkIDA6QS5wcmV2ZW50U2Nyb2xsUmVzZXR9KX0pLFtuXSksRT1uLmJhc2VuYW1lfHwiLyIsaz1oLnVzZU1lbW8oKCk9Pih7cm91dGVyOm4sbmF2aWdhdG9yOlMsc3RhdGljOiExLGJhc2VuYW1lOkV9KSxbbixTLEVdKTtyZXR1cm4gaC5jcmVhdGVFbGVtZW50KGguRnJhZ21lbnQsbnVsbCxoLmNyZWF0ZUVsZW1lbnQodHAuUHJvdmlkZXIse3ZhbHVlOmt9LGguY3JlYXRlRWxlbWVudCh1ay5Qcm92aWRlcix7dmFsdWU6aX0saC5jcmVhdGVFbGVtZW50KCRJLlByb3ZpZGVyLHt2YWx1ZTp3LmN1cnJlbnR9LGguY3JlYXRlRWxlbWVudChrSS5Qcm92aWRlcix7dmFsdWU6YX0saC5jcmVhdGVFbGVtZW50KG9JLHtiYXNlbmFtZTpFLGxvY2F0aW9uOmkubG9jYXRpb24sbmF2aWdhdGlvblR5cGU6aS5oaXN0b3J5QWN0aW9uLG5hdmlnYXRvcjpTfSxpLmluaXRpYWxpemVkP2guY3JlYXRlRWxlbWVudChBSSx7cm91dGVzOm4ucm91dGVzLHN0YXRlOml9KTplKSkpKSksbnVsbCl9ZnVuY3Rpb24gQUkodCl7bGV0e3JvdXRlczplLHN0YXRlOm59PXQ7cmV0dXJuIEdEKGUsdm9pZCAwLG4pfXZhciBBMTsoZnVuY3Rpb24odCl7dC5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24iLHQuVXNlU3VibWl0PSJ1c2VTdWJtaXQiLHQuVXNlU3VibWl0RmV0Y2hlcj0idXNlU3VibWl0RmV0Y2hlciIsdC5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIix0LnVzZVZpZXdUcmFuc2l0aW9uU3RhdGU9InVzZVZpZXdUcmFuc2l0aW9uU3RhdGUifSkoQTF8fChBMT17fSkpO3ZhciBNMTsoZnVuY3Rpb24odCl7dC5Vc2VGZXRjaGVyPSJ1c2VGZXRjaGVyIix0LlVzZUZldGNoZXJzPSJ1c2VGZXRjaGVycyIsdC5Vc2VTY3JvbGxSZXN0b3JhdGlvbj0idXNlU2Nyb2xsUmVzdG9yYXRpb24ifSkoTTF8fChNMT17fSkpO2Z1bmN0aW9uIE1JKHtlcnJvcjp0LHJlc2V0RXJyb3JCb3VuZGFyeTplfSl7cmV0dXJuIGNvbnNvbGUuZXJyb3IodCkseS5qc3goImRpdiIse2NsYXNzTmFtZToiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHctc2NyZWVuIGgtc2NyZWVuIGJnLWNhcmQtZm9yZWdyb3VuZCIsY2hpbGRyZW46eS5qc3goImRpdiIse2NsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBwLTEwIixjaGlsZHJlbjp5LmpzeHMoImRpdiIse2NsYXNzTmFtZToidy1mdWxsIGgtZnVsbCBwLTEwIGJnLWNhcmQgdGV4dC1wcmltYXJ5IixjaGlsZHJlbjpbeS5qc3hzKCJkaXYiLHtjbGFzc05hbWU6ImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiIsY2hpbGRyZW46W3kuanN4cygiZGl2Iix7Y2xhc3NOYW1lOiJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtWzAuNWVtXSB0ZXh0LWxnIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBweS0yIixjaGlsZHJlbjpbeS5qc3goWmIse30pLCIgZW5jb3VudGVyZWQgYW4gZXJyb3IiXX0pLHkuanN4KCJidXR0b24iLHtvbkNsaWNrOmUsY2hpbGRyZW46eS5qc3gobG0se30pfSldfSkseS5qc3goImRpdiIse2NsYXNzTmFtZToidGV4dC00eGwgZm9udC1ub3JtYWwgIixjaGlsZHJlbjoiTWVzc2FnZToifSkseS5qc3goInByZSIse2NoaWxkcmVuOnQubWVzc2FnZX0pLHQuc3RhY2smJnkuanN4KEptLHt0eXBlOiJzaW5nbGUiLGNsYXNzTmFtZToiZm9udC1zZXJpZiIsY29sbGFwc2libGU6ITAsZGVmYXVsdFZhbHVlOiJlcnJvciIsY2hpbGRyZW46eS5qc3hzKG5iLHt2YWx1ZToiZXJyb3IiLGNoaWxkcmVuOlt5LmpzeChyYix7Y2hpbGRyZW46IlN0YWNrIHRyYWNlOiJ9KSx5LmpzeChxZCx7Y2xhc3NOYW1lOiJwLTQgYmctcG9wb3ZlciB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCIsY2hpbGRyZW46dC5zdGFjayYmeS5qc3goInByZSIse2NoaWxkcmVuOnQuc3RhY2t9KX0pXX0pfSldfSl9KX0pfWZ1bmN0aW9uIExJKCl7Y29uc3QgdD1FSShbe3BhdGg6Ii8qIixlbGVtZW50OnkuanN4KHdJLHtmYWxsYmFja1JlbmRlcjpNSSxjaGlsZHJlbjp5LmpzeChjSSx7YXBpOm5ldyB0MigiL2FwaS92YWwiKX0pfSl9XSx7YmFzZW5hbWU6Ii9hcGkvdmFsL3N0YXRpYy9lZGl0In0pO3JldHVybiB5LmpzeChQSSx7cm91dGVyOnR9KX1vaC5jcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpLnJlbmRlcihpZS5jcmVhdGVFbGVtZW50KGllLlN0cmljdE1vZGUsbnVsbCxpZS5jcmVhdGVFbGVtZW50KExJLG51bGwpKSk7Cg==","/index.html":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+VmFsPC90aXRsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hcGkvdmFsL3N0YXRpYy9hc3NldHMvaW5kZXgtVVJVeEVYVXMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXBpL3ZhbC9zdGF0aWMvYXNzZXRzL2luZGV4LTJsMUp3ZHM5LmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=="}`
|
|
21
21
|
);
|
|
22
22
|
function createUIRequestHandler() {
|
|
23
23
|
if (typeof files !== "object") {
|