PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPmluZnJhc3RydVF0dXJlIMK3IFRoZSBXb3JsZCBNb2RlbDwvdGl0bGU+CjxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJSb2JvdHMgYXJlIGxlYXJuaW5nIHRoZSB3b3JsZC4gV2UgdGVhY2ggdGhlbSB5b3Vycy4gQSB3b3JraW5nIGNvbmNlcHQgZm9yIHRoZSBob21lIHRoYXQgdW5kZXJzdGFuZHMgaXRzZWxmLCB3aXRoIGEgaHVtYW4gYWx3YXlzIGluIGNoYXJnZS4iPgo8bWV0YSBuYW1lPSJ0aGVtZS1jb2xvciIgY29udGVudD0iIzA3MTAxRiI+CjxzdHlsZT4KQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9SW50ZXI6d2dodEA0MDA7NTAwOzYwMDs3MDAmZmFtaWx5PUludGVyK1RpZ2h0OndnaHRANTAwOzYwMDs3MDA7ODAwJmZhbWlseT1HZWlzdCtNb25vOndnaHRANDAwOzUwMCZkaXNwbGF5PXN3YXAnKTsKCjpyb290IHsKICAtLXBhcGVyOiAgICAgI0ZCRkNGRTsKICAtLXBhcGVyLTI6ICAgI0YyRjVGQTsKICAtLXJ1bGU6ICAgICAgI0U0RTlGMjsKICAtLXJ1bGUtMjogICAgI0Q2RENFNzsKICAtLWluazogICAgICAgIzA3MTAxRjsKICAtLWluay0yOiAgICAgIzFBMjc0MDsKICAtLXN0ZWVsOiAgICAgIzVDNkI4NTsKICAtLXN0ZWVsLTI6ICAgIzY5NzQ4QjsKICAtLWhhbG86ICAgICAgIzRGOENGRjsKICAtLWhhbG8tMjogICAgIzZGQTdGRjsKICAtLWhhbG8tZGVlcDogIzJDNUJFMDsKICAtLWhhbG8tc29mdDogI0RDRThGRjsKICAtLWlyaS1hOiAgICAgI0IxOUJGRjsKICAtLWlyaS1jOiAgICAgIzkyRTVGRjsKICAtLXNpZ25hbDogICAgI0Y0QTExQzsKICAtLWdvb2Q6ICAgICAgIzM2QzI4QjsKICAtLXdhcm46ICAgICAgI0Y0QTExQzsKICAtLWJnLWludmVydGVkOiAjMDcxMDFGOwogIC0tZmctaW52ZXJ0ZWQ6ICNGQkZDRkU7Cn0KCiogeyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9Cmh0bWwgeyBjb2xvci1zY2hlbWU6IGxpZ2h0OyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IH0KYm9keSB7CiAgbWFyZ2luOiAwOyBiYWNrZ3JvdW5kOiB2YXIoLS1wYXBlcik7IGNvbG9yOiB2YXIoLS1pbmspOwogIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAic3MwMSIsImN2MTEiOwogIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOyBsaW5lLWhlaWdodDogMS41Owp9CmEgeyBjb2xvcjogaW5oZXJpdDsgfQouc2hlbGwgeyBtYXgtd2lkdGg6IDExODBweDsgbWFyZ2luOiAwIGF1dG87IHBhZGRpbmc6IDAgMjhweDsgfQoKLyogPT09PT09PT09PT09IE5BViA9PT09PT09PT09PT0gKi8KbmF2IHsKICBwb3NpdGlvbjogc3RpY2t5OyB0b3A6IDA7IHotaW5kZXg6IDYwOwogIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KSBzYXR1cmF0ZSgxODAlKTsgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCkgc2F0dXJhdGUoMTgwJSk7CiAgYmFja2dyb3VuZDogcmdiYSgyNTEsIDI1MiwgMjU0LCAwLjcpOwogIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1ydWxlKTsKfQoubmF2LWlubmVyIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBwYWRkaW5nOiAxNnB4IDA7IH0KLmJyYW5kIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiBpbmhlcml0OyB9Ci5icmFuZC1tYXJrIHsgY29sb3I6IHZhcigtLWluayk7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KLmJyYW5kLW1hcmsgLmJtLXJpbmcsIC5icmFuZC1tYXJrIC5ibS10YWlsIHsgc3Ryb2tlOiBjdXJyZW50Q29sb3I7IH0KLmJyYW5kLW1hcmsgLmJtLXJpbmcgeyBmaWxsOiBub25lOyB9Ci5icmFuZC1tYXJrIC5ibS10YWlsIHsgZmlsbDogbm9uZTsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyB9Ci5icmFuZC10ZXh0IHsgZm9udC1mYW1pbHk6ICdJbnRlciBUaWdodCcsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTlweDsgZm9udC13ZWlnaHQ6IDUwMDsgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOyB9Ci5icmFuZC10ZXh0IC5xLWFjY2VudCB7IGZvbnQtd2VpZ2h0OiA3MDA7IGZvbnQtc3R5bGU6IGl0YWxpYzsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0taXJpLWEpIDAlLCB2YXIoLS1oYWxvKSA1NSUsIHZhcigtLWlyaS1jKSAxMDAlKTsgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7IGJhY2tncm91bmQtY2xpcDogdGV4dDsgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50OyBwYWRkaW5nOiAwIDAuMDJlbTsgfQoubmF2LWxpbmtzIHsgZGlzcGxheTogZmxleDsgZ2FwOiAzMnB4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9CkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkgeyAubmF2LWxpbmtzIHsgZ2FwOiAxOHB4OyB9IC5uYXYtbGlua3MgYTpub3QoLm5hdi1jdGEpIHsgZGlzcGxheTogbm9uZTsgfSB9Ci5uYXYtbGlua3MgYSB7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6IHZhcigtLWluay0yKTsgZm9udC13ZWlnaHQ6IDUwMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBjdXJzb3I6IHBvaW50ZXI7IH0KLm5hdi1saW5rcyBhOmhvdmVyIHsgY29sb3I6IHZhcigtLWhhbG8tZGVlcCk7IH0KLm5hdi1saW5rcyBhLmlzLWN1cnJlbnQgeyBjb2xvcjogdmFyKC0taGFsby1kZWVwKTsgZm9udC13ZWlnaHQ6IDYwMDsgfQoubmF2LWxpbmtzIGEubmF2LWN0YSB7IGNvbG9yOiB2YXIoLS1wYXBlcikgIWltcG9ydGFudDsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgcGFkZGluZzogMTBweCAxOHB4OyBib3JkZXItcmFkaXVzOiA5OTlweDsgZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogNjAwOyBsZXR0ZXItc3BhY2luZzogLTAuMDA1ZW07IHRyYW5zaXRpb246IGJhY2tncm91bmQgMTYwbXMgZWFzZTsgfQoubmF2LWxpbmtzIGEubmF2LWN0YTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWhhbG8tZGVlcCk7IH0KCi8qID09PT09PT09PT09PSBIRVJPID09PT09PT09PT09PSAqLwouaGVybyB7IHBhZGRpbmc6IDkycHggMCA1NnB4OyB9Ci5leWVicm93IHsKICBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTEuNXB4OyBsZXR0ZXItc3BhY2luZzogLjE0ZW07CiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHZhcigtLWhhbG8tZGVlcCk7IG1hcmdpbjogMCAwIDIwcHg7CiAgZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOXB4Owp9Ci5leWVicm93IC5waXAgeyB3aWR0aDogN3B4OyBoZWlnaHQ6IDdweDsgYm9yZGVyLXJhZGl1czogNTAlOyBiYWNrZ3JvdW5kOiB2YXIoLS1oYWxvKTsgYm94LXNoYWRvdzogMCAwIDAgNHB4IHZhcigtLWhhbG8tc29mdCk7IGFuaW1hdGlvbjogcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZTsgfQpAa2V5ZnJhbWVzIHB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6IDE7IH0gNTAlIHsgb3BhY2l0eTogLjM1OyB9IH0KLmhlcm8gaDEgewogIGZvbnQtZmFtaWx5OiAnSW50ZXIgVGlnaHQnOyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogLS4wMzVlbTsKICBmb250LXNpemU6IGNsYW1wKDM4cHgsIDYuNHZ3LCA3OHB4KTsgbGluZS1oZWlnaHQ6IC45ODsgbWFyZ2luOiAwIDAgMjZweDsgbWF4LXdpZHRoOiAxNmNoOwogIHRleHQtd3JhcDogYmFsYW5jZTsKfQouaGVybyBoMSAuZ3JhZCB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMDJkZWcsIHZhcigtLWhhbG8tZGVlcCksIHZhcigtLWlyaS1hKSA2MCUsIHZhcigtLWlyaS1jKSk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyBiYWNrZ3JvdW5kLWNsaXA6IHRleHQ7IGNvbG9yOiB0cmFuc3BhcmVudDsgfQouaGVyby1zdWIgeyBmb250LXNpemU6IGNsYW1wKDE3cHgsIDJ2dywgMjBweCk7IGNvbG9yOiB2YXIoLS1pbmstMik7IG1heC13aWR0aDogNjJjaDsgbWFyZ2luOiAwOyBsaW5lLWhlaWdodDogMS41NTsgfQouaGVyby1zdWIgc3Ryb25nIHsgY29sb3I6IHZhcigtLWluayk7IGZvbnQtd2VpZ2h0OiA2MDA7IH0KCi8qID09PT09PT09PT09PSBTRUNUSU9OIFNDQUZGT0xEID09PT09PT09PT09PSAqLwouYmxvY2sgeyBwYWRkaW5nOiA3MnB4IDA7IH0KLnNlYy1leWVicm93IHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDExLjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xNGVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogdmFyKC0tc3RlZWwpOyBtYXJnaW46IDAgMCAxNHB4OyB9Ci5zZWMtaCB7IGZvbnQtZmFtaWx5OiAnSW50ZXIgVGlnaHQnOyBmb250LXdlaWdodDogNzAwOyBsZXR0ZXItc3BhY2luZzogLS4wM2VtOyBmb250LXNpemU6IGNsYW1wKDI4cHgsIDR2dywgNDZweCk7IGxpbmUtaGVpZ2h0OiAxLjA0OyBtYXJnaW46IDAgMCAxNnB4OyB0ZXh0LXdyYXA6IGJhbGFuY2U7IH0KLnNlYy1sZWRlIHsgZm9udC1zaXplOiBjbGFtcCgxNnB4LCAxLjh2dywgMTlweCk7IGNvbG9yOiB2YXIoLS1pbmstMik7IG1heC13aWR0aDogNjRjaDsgbWFyZ2luOiAwOyBsaW5lLWhlaWdodDogMS41NTsgfQoKLyogPT09PT09PT09PT09IFRIRSBTVEFHRSAoaW50ZXJhY3RpdmUpID09PT09PT09PT09PSAqLwouc3RhZ2Utd3JhcCB7IG1hcmdpbi10b3A6IDM4cHg7IH0KLnN0YWdlIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1pbnZlcnRlZCk7IGNvbG9yOiB2YXIoLS1mZy1pbnZlcnRlZCk7CiAgYm9yZGVyLXJhZGl1czogMjZweDsgb3ZlcmZsb3c6IGhpZGRlbjsKICBib3gtc2hhZG93OiAwIDFweCAycHggcmdiYSg3LDE2LDMxLC41KSwgMCA0MHB4IDkwcHggLTQwcHggcmdiYSg3LDE2LDMxLC41NSksIDAgMTBweCA0MHB4IC0xNnB4IHJnYmEoNzksMTQwLDI1NSwuMjgpOwogIGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMS41NWZyIDFmcjsKfQpAbWVkaWEgKG1heC13aWR0aDogODgwcHgpIHsgLnN0YWdlIHsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IH0gfQoKLnN0YWdlLWNhbnZhcyB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYmFja2dyb3VuZDoKICByYWRpYWwtZ3JhZGllbnQoMTIwJSA5MCUgYXQgMzAlIDAlLCByZ2JhKDc5LDE0MCwyNTUsLjEyKSwgdHJhbnNwYXJlbnQgNjAlKSwKICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjMEExMzIyLCAjMDcwRDE4KTsgcGFkZGluZzogMThweDsgfQouc3RhZ2UtY2FudmFzIHN2ZyB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IGRpc3BsYXk6IGJsb2NrOyBib3JkZXItcmFkaXVzOiAxNHB4OyB9Cgouc3RhZ2UtdGFnIHsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDMwcHg7IGxlZnQ6IDMwcHg7IHotaW5kZXg6IDQ7IGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAxMC41cHg7IGxldHRlci1zcGFjaW5nOiAuMTJlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjUpOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgfQouc3RhZ2UtdGFnIC5saXZlIHsgd2lkdGg6IDdweDsgaGVpZ2h0OiA3cHg7IGJvcmRlci1yYWRpdXM6IDUwJTsgYmFja2dyb3VuZDogdmFyKC0tZ29vZCk7IGJveC1zaGFkb3c6IDAgMCAwIDRweCByZ2JhKDU0LDE5NCwxMzksLjE4KTsgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZTsgfQoKLyogd29ybGQgZ2VvbWV0cnkgKi8KLnctbG90ICAgeyBmaWxsOiAjMTYzNjFmOyB9Ci53LWxvdC0yIHsgZmlsbDogIzE0MzAxODsgfQoudy1ob3VzZSB7IGZpbGw6ICMxYjI3NDA7IHN0cm9rZTogIzM4NTA3Zjsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci53LXJvb20gIHsgc3Ryb2tlOiAjMmEzYzYzOyBzdHJva2Utd2lkdGg6IDEuNDsgZmlsbDogbm9uZTsgfQoudy1yb29tZmlsbCB7IGZpbGw6IHJnYmEoNzksMTQwLDI1NSwuMDUpOyB9Ci53LWRyaXZlIHsgZmlsbDogIzIzMmIzYjsgfQoudy10cmVlICB7IGZpbGw6ICMxZjdhM2U7IHN0cm9rZTogIzJmYWY1Yjsgc3Ryb2tlLXdpZHRoOiAxLjU7IH0KLnctYmVkICAgeyBmaWxsOiAjNWEzYTZiOyBzdHJva2U6ICM4ZDViYTY7IHN0cm9rZS13aWR0aDogMS4zOyBvcGFjaXR5OiAuODU7IH0KLnctcGF0aW8geyBmaWxsOiAjMmEzMTQyOyBzdHJva2U6ICMzZDQ2NWQ7IHN0cm9rZS13aWR0aDogMS4yOyB9Ci53LWxhYmVsIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDExcHg7IGZpbGw6IHJnYmEoMjU1LDI1NSwyNTUsLjM0KTsgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOyB9Ci53LW9iamxhYmVsIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDkuNXB4OyBmaWxsOiByZ2JhKDI1NSwyNTUsMjU1LC40Mik7IH0KLnctZ2F0ZSAgeyBzdHJva2U6IHZhcigtLXNpZ25hbCk7IHN0cm9rZS13aWR0aDogMi41OyBzdHJva2UtZGFzaGFycmF5OiA0IDQ7IH0KCi5kZXYgeyBmaWxsOiB2YXIoLS1oYWxvKTsgfQouZGV2LXJpbmcgeyBmaWxsOiBub25lOyBzdHJva2U6IHZhcigtLWhhbG8pOyBzdHJva2Utd2lkdGg6IDEuNDsgb3BhY2l0eTogLjU7IH0KLmRldi1wdWxzZSB7IGZpbGw6IG5vbmU7IHN0cm9rZTogdmFyKC0taGFsbyk7IHN0cm9rZS13aWR0aDogMS4yOyB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7IH0KCiNwcmVkaWN0ZWQgeyBmaWxsOiBub25lOyBzdHJva2U6IHZhcigtLWhhbG8tMik7IHN0cm9rZS13aWR0aDogMi40OyBzdHJva2UtZGFzaGFycmF5OiA3IDc7IG9wYWNpdHk6IC44OyB9CiN0cmFpbCB7IGZpbGw6IG5vbmU7IHN0cm9rZTogdXJsKCN0cmFpbGdyYWQpOyBzdHJva2Utd2lkdGg6IDMuNjsgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOyB9Cgoucm9ib3QtYm9keSB7IGZpbGw6ICNmZmY7IHN0cm9rZTogdmFyKC0taGFsby1kZWVwKTsgc3Ryb2tlLXdpZHRoOiAyOyB9Ci5yb2JvdC1leWUgeyBmaWxsOiB2YXIoLS1oYWxvLWRlZXApOyB9Ci5yb2JvdC1oYWxvIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiB2YXIoLS1oYWxvLTIpOyBzdHJva2Utd2lkdGg6IDEuNTsgb3BhY2l0eTogLjY7IH0KCi5kb2NrIHsgZmlsbDogbm9uZTsgc3Ryb2tlOiByZ2JhKDI1NSwyNTUsMjU1LC4zKTsgc3Ryb2tlLXdpZHRoOiAxLjY7IHN0cm9rZS1kYXNoYXJyYXk6IDMgNDsgfQouZG9jay1sYWJlbCB7IGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiA5cHg7IGZpbGw6IHJnYmEoMjU1LDI1NSwyNTUsLjQpOyB9CgovKiB1bmtub3duIG9iamVjdCAqLwoudW5rbm93biB7IG9wYWNpdHk6IDA7IHRyYW5zaXRpb246IG9wYWNpdHkgLjRzOyB9Ci51bmtub3duLnNob3cgeyBvcGFjaXR5OiAxOyB9Ci51bmtub3duLWJveCB7IGZpbGw6IHJnYmEoMjQ0LDE2MSwyOCwuMTYpOyBzdHJva2U6IHZhcigtLXNpZ25hbCk7IHN0cm9rZS13aWR0aDogMjsgc3Ryb2tlLWRhc2hhcnJheTogNSA0OyB9Ci51bmtub3duLXEgeyBmaWxsOiB2YXIoLS1zaWduYWwpOyBmb250LWZhbWlseTogJ0ludGVyIFRpZ2h0JzsgZm9udC13ZWlnaHQ6IDcwMDsgZm9udC1zaXplOiAyMHB4OyB0ZXh0LWFuY2hvcjogbWlkZGxlOyB9CgovKiA9PT09PT09PT09PT0gUkVBU09OSU5HIFBBTkVMID09PT09PT09PT09PSAqLwoucGFuZWwgeyBiYWNrZ3JvdW5kOiAjMGMxMzIyOyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjA4KTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgcGFkZGluZzogMjJweDsgZ2FwOiAxNnB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IG1pbi1oZWlnaHQ6IDUyMHB4OyB9Ci5wYW5lbC1oIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyB9Ci5wYW5lbC10aXRsZSB7IGZvbnQtZmFtaWx5OiAnSW50ZXIgVGlnaHQnOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjZmZmOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDlweDsgfQoucGFuZWwtdGl0bGUgc3ZnIHsgY29sb3I6IHZhcigtLWhhbG8tMik7IH0KLmNvbmYgeyB0ZXh0LWFsaWduOiByaWdodDsgfQouY29uZi1udW0geyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMjJweDsgZm9udC13ZWlnaHQ6IDUwMDsgY29sb3I6IHZhcigtLWdvb2QpOyBsaW5lLWhlaWdodDogMTsgdHJhbnNpdGlvbjogY29sb3IgLjNzOyB9Ci5jb25mLW51bS5sb3cgeyBjb2xvcjogdmFyKC0td2Fybik7IH0KLmNvbmYtbGJsIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDlweDsgbGV0dGVyLXNwYWNpbmc6IC4xMmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNCk7IG1hcmdpbi10b3A6IDNweDsgfQoKLnRhc2tzIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiA4cHg7IH0KLnRhc2tzLWxibCB7IGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiA5LjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xMmVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNCk7IG1hcmdpbi1ib3R0b206IDJweDsgfQoudGFzay1idG4gewogIHRleHQtYWxpZ246IGxlZnQ7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsLjA0KTsgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMSk7CiAgY29sb3I6ICNmZmY7IHBhZGRpbmc6IDEycHggMTRweDsgYm9yZGVyLXJhZGl1czogMTJweDsgY3Vyc29yOiBwb2ludGVyOwogIGZvbnQtZmFtaWx5OiAnSW50ZXInOyBmb250LXNpemU6IDEzLjVweDsgZm9udC13ZWlnaHQ6IDUwMDsKICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDExcHg7IHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuMTVzLCBiYWNrZ3JvdW5kIC4xNXMsIHRyYW5zZm9ybSAuMXM7Cn0KLnRhc2stYnRuOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiB2YXIoLS1oYWxvKTsgYmFja2dyb3VuZDogcmdiYSg3OSwxNDAsMjU1LC4xKTsgfQoudGFzay1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSguOTkpOyB9Ci50YXNrLWJ0bi5pcy1hY3RpdmUgeyBib3JkZXItY29sb3I6IHZhcigtLWhhbG8pOyBiYWNrZ3JvdW5kOiByZ2JhKDc5LDE0MCwyNTUsLjE2KTsgfQoudGFzay1idG4gLmljIHsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgYm9yZGVyLXJhZGl1czogOHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDc5LDE0MCwyNTUsLjE2KTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZsZXgtc2hyaW5rOiAwOyBjb2xvcjogdmFyKC0taGFsby0yKTsgfQoudGFzay1idG4gLnN1YiB7IGRpc3BsYXk6IGJsb2NrOyBmb250LXNpemU6IDExcHg7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC40NSk7IG1hcmdpbi10b3A6IDFweDsgZm9udC13ZWlnaHQ6IDQwMDsgfQoKLmxvZyB7IGZsZXg6IDE7IG92ZXJmbG93OiBoaWRkZW47IGRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogN3B4OyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTEuNXB4OyBsaW5lLWhlaWdodDogMS40NTsgfQoubG9nLWxpbmUgeyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNjIpOyBkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDRweCk7IGFuaW1hdGlvbjogbG9nSW4gLjNzIGZvcndhcmRzOyB9Ci5sb2ctbGluZSAudCB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC4yOCk7IGZsZXgtc2hyaW5rOiAwOyB9Ci5sb2ctbGluZS53YXJuIHsgY29sb3I6IHZhcigtLXdhcm4pOyB9Ci5sb2ctbGluZS5odW1hbiB7IGNvbG9yOiB2YXIoLS1oYWxvLTIpOyB9Ci5sb2ctbGluZS5vayB7IGNvbG9yOiB2YXIoLS1nb29kKTsgfQpAa2V5ZnJhbWVzIGxvZ0luIHsgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IG5vbmU7IH0gfQoubG9nLWVtcHR5IHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjMyKTsgZm9udC1mYW1pbHk6ICdJbnRlcic7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuNTsgbWFyZ2luOiBhdXRvIDA7IH0KCi8qIGh1bWFuIGNoZWNrcG9pbnQgY2FyZCAqLwouY2hlY2twb2ludCB7CiAgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxNnB4OyByaWdodDogMTZweDsgYm90dG9tOiAxNnB4OyB6LWluZGV4OiA4OwogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxNDIxNDIsICMwZDE4MmYpOwogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWhhbG8pOyBib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nOiAxNnB4OwogIGJveC1zaGFkb3c6IDAgLThweCA0MHB4IC0xMHB4IHJnYmEoMCwwLDAsLjYpOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTQwJSk7IHRyYW5zaXRpb246IHRyYW5zZm9ybSAuMzVzIGN1YmljLWJlemllciguMiwuOCwuMiwxKTsKfQouY2hlY2twb2ludC5zaG93IHsgdHJhbnNmb3JtOiBub25lOyB9Ci5jcC1oZWFkIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMHB4OyBtYXJnaW4tYm90dG9tOiA5cHg7IH0KLmNwLW1vbm8geyB3aWR0aDogMzRweDsgaGVpZ2h0OiAzNHB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWhhbG8pLCB2YXIoLS1pbmspKTsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGZvbnQtZmFtaWx5OiAnSW50ZXIgVGlnaHQnOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiAjZmZmOyBmbGV4LXNocmluazogMDsgfQouY3Atd2hvIHsgZm9udC1mYW1pbHk6ICdJbnRlciBUaWdodCc7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTMuNXB4OyBjb2xvcjogI2ZmZjsgfQouY3Atcm9sZSB7IGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiA5LjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1oYWxvLTIpOyBtYXJnaW4tdG9wOiAxcHg7IH0KLmNwLXEgeyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC44KTsgbGluZS1oZWlnaHQ6IDEuNDU7IG1hcmdpbjogMCAwIDEycHg7IH0KLmNwLXJvdyB7IGRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyB9Ci5jcC1idG4geyBmbGV4OiAxOyBiYWNrZ3JvdW5kOiB2YXIoLS1oYWxvKTsgY29sb3I6ICNmZmY7IGJvcmRlcjogMDsgcGFkZGluZzogMTBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgZm9udC1mYW1pbHk6ICdJbnRlcic7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTNweDsgY3Vyc29yOiBwb2ludGVyOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4xNXM7IH0KLmNwLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWhhbG8tZGVlcCk7IH0KLmNwLWJ0bi5hbHQgeyBmbGV4OiAwIDAgYXV0bzsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMDYpOyBjb2xvcjogI2ZmZjsgcGFkZGluZzogMTBweCAxNHB4OyB9Ci5jcC1idG4uYWx0OmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwuMTIpOyB9Ci5jcC1hdXRvIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDkuNXB4OyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNCk7IG1hcmdpbi10b3A6IDlweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CgovKiBtb2RlbCBzdGF0cyBzdHJpcCAqLwoubW9kZWxiYXIgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDA7IGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LC4wNyk7IHBhZGRpbmctdG9wOiAxNHB4OyB9Ci5tb2RlbGJhciAubSB7IGZsZXg6IDE7IHRleHQtYWxpZ246IGNlbnRlcjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwuMDcpOyB9Ci5tb2RlbGJhciAubTpsYXN0LWNoaWxkIHsgYm9yZGVyLXJpZ2h0OiAwOyB9Ci5tb2RlbGJhciAubXYgeyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTVweDsgY29sb3I6ICNmZmY7IH0KLm1vZGVsYmFyIC5tbCB7IGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiA4LjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC40KTsgbWFyZ2luLXRvcDogM3B4OyB9Cgouc3RhZ2UtY2FwIHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tc3RlZWwpOyBtYXJnaW46IDE2cHggMnB4IDA7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyB9Ci5zdGFnZS1jYXAgc3ZnIHsgZmxleC1zaHJpbms6IDA7IGNvbG9yOiB2YXIoLS1oYWxvLWRlZXApOyB9CgovKiA9PT09PT09PT09PT0gVFdPLUNPTFVNTiBDT01QQVJFID09PT09PT09PT09PSAqLwouY29tcGFyZSB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsgZ2FwOiAyMHB4OyBtYXJnaW4tdG9wOiA0MHB4OyB9CkBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkgeyAuY29tcGFyZSB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOyB9IH0KLmNtcC1jYXJkIHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnVsZSk7IGJvcmRlci1yYWRpdXM6IDIwcHg7IHBhZGRpbmc6IDI4cHg7IGJhY2tncm91bmQ6IHZhcigtLXBhcGVyKTsgfQouY21wLWNhcmQud29ybGQgeyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1pbnZlcnRlZCk7IGNvbG9yOiB2YXIoLS1mZy1pbnZlcnRlZCk7IGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7IH0KLmNtcC1raWNrZXIgeyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTAuNXB4OyBsZXR0ZXItc3BhY2luZzogLjEyZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1zdGVlbCk7IG1hcmdpbjogMCAwIDE0cHg7IH0KLmNtcC1jYXJkLndvcmxkIC5jbXAta2lja2VyIHsgY29sb3I6IHZhcigtLWhhbG8tMik7IH0KLmNtcC1oIHsgZm9udC1mYW1pbHk6ICdJbnRlciBUaWdodCc7IGZvbnQtd2VpZ2h0OiA3MDA7IGZvbnQtc2l6ZTogMjNweDsgbGV0dGVyLXNwYWNpbmc6IC0uMDJlbTsgbWFyZ2luOiAwIDAgMTBweDsgfQouY21wLXAgeyBmb250LXNpemU6IDE1cHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyBjb2xvcjogdmFyKC0taW5rLTIpOyBtYXJnaW46IDAgMCAxOHB4OyB9Ci5jbXAtY2FyZC53b3JsZCAuY21wLXAgeyBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwuNzIpOyB9Ci5jbXAtZWcgeyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDEuNTsgcGFkZGluZzogMTRweDsgYm9yZGVyLXJhZGl1czogMTJweDsgYmFja2dyb3VuZDogdmFyKC0tcGFwZXItMik7IGNvbG9yOiB2YXIoLS1pbmstMik7IH0KLmNtcC1jYXJkLndvcmxkIC5jbXAtZWcgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4wNSk7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC43KTsgfQouY21wLWVnIGIgeyBjb2xvcjogdmFyKC0taGFsby1kZWVwKTsgZm9udC13ZWlnaHQ6IDUwMDsgfQouY21wLWNhcmQud29ybGQgLmNtcC1lZyBiIHsgY29sb3I6IHZhcigtLWhhbG8tMik7IH0KCi8qID09PT09PT09PT09PSBTVEVQUyA9PT09PT09PT09PT0gKi8KLnN0ZXBzIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsgZ2FwOiAxOHB4OyBtYXJnaW4tdG9wOiAzOHB4OyB9CkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkgeyAuc3RlcHMgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9Ci5zdGVwIHsgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnVsZSk7IGJvcmRlci1yYWRpdXM6IDE4cHg7IHBhZGRpbmc6IDI2cHg7IGJhY2tncm91bmQ6IHZhcigtLXBhcGVyKTsgfQouc3RlcC1uIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS1oYWxvLWRlZXApOyBtYXJnaW4tYm90dG9tOiAxNHB4OyB9Ci5zdGVwLWggeyBmb250LWZhbWlseTogJ0ludGVyIFRpZ2h0JzsgZm9udC13ZWlnaHQ6IDcwMDsgZm9udC1zaXplOiAxOXB4OyBsZXR0ZXItc3BhY2luZzogLS4wMmVtOyBtYXJnaW46IDAgMCA4cHg7IH0KLnN0ZXAtcCB7IGZvbnQtc2l6ZTogMTQuNXB4OyBsaW5lLWhlaWdodDogMS41NTsgY29sb3I6IHZhcigtLWluay0yKTsgbWFyZ2luOiAwOyB9CgovKiA9PT09PT09PT09PT0gUElURkFMTFMgPT09PT09PT09PT09ICovCi5waXRmYWxscyB7IGJhY2tncm91bmQ6IHZhcigtLWJnLWludmVydGVkKTsgY29sb3I6IHZhcigtLWZnLWludmVydGVkKTsgfQoucGYtZ3JpZCB7IGRpc3BsYXk6IGdyaWQ7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7IGdhcDogMTZweDsgbWFyZ2luLXRvcDogMzhweDsgfQpAbWVkaWEgKG1heC13aWR0aDogNzYwcHgpIHsgLnBmLWdyaWQgeyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgfSB9Ci5wZiB7IGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsLjEpOyBib3JkZXItcmFkaXVzOiAxNnB4OyBwYWRkaW5nOiAyNHB4OyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LC4wMjUpOyB9Ci5wZi1yaXNrIHsgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDEwLjVweDsgbGV0dGVyLXNwYWNpbmc6IC4xZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiB2YXIoLS1zaWduYWwpOyBtYXJnaW46IDAgMCA4cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogOHB4OyB9Ci5wZi1yaXNrOjpiZWZvcmUgeyBjb250ZW50OiAnJzsgd2lkdGg6IDdweDsgaGVpZ2h0OiA3cHg7IGJvcmRlci1yYWRpdXM6IDJweDsgYmFja2dyb3VuZDogdmFyKC0tc2lnbmFsKTsgfQoucGYtaCB7IGZvbnQtZmFtaWx5OiAnSW50ZXIgVGlnaHQnOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE3cHg7IG1hcmdpbjogMCAwIDEwcHg7IGNvbG9yOiAjZmZmOyB9Ci5wZi1wIHsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMS41NTsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjY2KTsgbWFyZ2luOiAwIDAgMTRweDsgfQoucGYtYW5zIHsgZm9udC1zaXplOiAxMy41cHg7IGxpbmUtaGVpZ2h0OiAxLjU7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LC45KTsgcGFkZGluZy1sZWZ0OiAxNHB4OyBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWdvb2QpOyB9Ci5wZi1hbnMgYiB7IGNvbG9yOiB2YXIoLS1nb29kKTsgZm9udC13ZWlnaHQ6IDYwMDsgfQoKLyogPT09PT09PT09PT09IENMT1NJTkcgPT09PT09PT09PT09ICovCi5jbG9zZS1jdGEgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDk2cHggMDsgfQouY2xvc2UtY3RhIGgyIHsgZm9udC1mYW1pbHk6ICdJbnRlciBUaWdodCc7IGZvbnQtd2VpZ2h0OiA3MDA7IGZvbnQtc2l6ZTogY2xhbXAoMzBweCwgNC42dncsIDU0cHgpOyBsZXR0ZXItc3BhY2luZzogLS4wM2VtOyBsaW5lLWhlaWdodDogMS4wMjsgbWFyZ2luOiAwIDAgMThweDsgdGV4dC13cmFwOiBiYWxhbmNlOyB9Ci5jbG9zZS1jdGEgcCB7IGZvbnQtc2l6ZTogMThweDsgY29sb3I6IHZhcigtLWluay0yKTsgbWF4LXdpZHRoOiA1MmNoOyBtYXJnaW46IDAgYXV0byAzMHB4OyB9Ci5idG4tcm93IHsgZGlzcGxheTogZmxleDsgZ2FwOiAxMnB4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZmxleC13cmFwOiB3cmFwOyB9Ci5idG4geyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA5cHg7IHBhZGRpbmc6IDE1cHggMjZweDsgYm9yZGVyLXJhZGl1czogOTk5cHg7IGZvbnQtZmFtaWx5OiAnSW50ZXInOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDE1cHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xMnMsIGJhY2tncm91bmQgLjE1cywgYm9yZGVyLWNvbG9yIC4xNXM7IH0KLmJ0bi1wcmltYXJ5IHsgYmFja2dyb3VuZDogdmFyKC0taW5rKTsgY29sb3I6IHZhcigtLXBhcGVyKTsgfQouYnRuLXByaW1hcnk6aG92ZXIgeyBiYWNrZ3JvdW5kOiB2YXIoLS1oYWxvLWRlZXApOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7IH0KLmJ0bi1naG9zdCB7IGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJ1bGUtMik7IGNvbG9yOiB2YXIoLS1pbmspOyB9Ci5idG4tZ2hvc3Q6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWluayk7IH0KCmZvb3RlciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ydWxlKTsgcGFkZGluZzogMzBweCAwOyB9Ci5mb290LWluIHsgZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogMTRweDsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tc3RlZWwpOyB9Ci5mb290LW5vdGUgeyBmb250LWZhbWlseTogJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogMTFweDsgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOyB9Ci5mb290LWdyaWQgeyBkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDJmciAxZnIgMWZyIDFmciAxZnI7IGdhcDogNDBweDsgbWFyZ2luOiAyOHB4IDAgNDBweDsgfQpAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsgLmZvb3QtZ3JpZCB7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIDFmcik7IH0gLmZvb3QtZ3JpZCA+IGRpdjpmaXJzdC1jaGlsZCB7IGdyaWQtY29sdW1uOiAxIC8gLTE7IH0gfQouZm9vdC1icmFuZC10ZXh0IHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tc3RlZWwpOyBtYXJnaW4tdG9wOiAxMnB4OyBtYXgtd2lkdGg6IDI4MHB4OyBsaW5lLWhlaWdodDogMS41NTsgfQouZm9vdC1oIHsgZm9udC1mYW1pbHk6ICdJbnRlciBUaWdodCc7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luOiAwIDAgMTJweCAwOyB9Ci5mb290LWxpc3QgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDhweDsgfQouZm9vdC1saXN0IGEgeyBmb250LXNpemU6IDEzcHg7IGNvbG9yOiB2YXIoLS1zdGVlbCk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQouZm9vdC1saXN0IGE6aG92ZXIgeyBjb2xvcjogdmFyKC0taW5rKTsgfQouZm9vdC1ib3R0b20geyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyBwYWRkaW5nLXRvcDogMjRweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJ1bGUpOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiB2YXIoLS1zdGVlbC0yKTsgfQpmb290ZXI6aGFzKC5mb290LWdyaWQpIHsgcGFkZGluZzogNTZweCAwIDQwcHg7IH0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7ICogeyBhbmltYXRpb24tZHVyYXRpb246IC4wMW1zICFpbXBvcnRhbnQ7IH0gfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoKPG5hdj4KICA8ZGl2IGNsYXNzPSJzaGVsbCBuYXYtaW5uZXIiPgogICAgPGEgY2xhc3M9ImJyYW5kIiBocmVmPSJ3ZWJzaXRlLmh0bWwiPgogICAgICA8c3ZnIGNsYXNzPSJicmFuZC1tYXJrIiB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgPGNpcmNsZSBjbGFzcz0iYm0tcmluZyIgY3g9IjQ2IiBjeT0iNDYiIHI9IjMwIiBzdHJva2Utd2lkdGg9IjEuNCIgb3BhY2l0eT0iLjIyIi8+CiAgICAgICAgPGNpcmNsZSBjbGFzcz0iYm0tcmluZyIgY3g9IjQ2IiBjeT0iNDYiIHI9IjIyIiBzdHJva2Utd2lkdGg9IjIiIG9wYWNpdHk9Ii41NSIvPgogICAgICAgIDxjaXJjbGUgY2xhc3M9ImJtLXJpbmciIGN4PSI0NiIgY3k9IjQ2IiByPSIxNCIgc3Ryb2tlLXdpZHRoPSI0LjUiLz4KICAgICAgICA8bGluZSBjbGFzcz0iYm0tdGFpbCIgeDE9IjU0IiB5MT0iNTQiIHgyPSI3NiIgeTI9Ijc2IiBzdHJva2Utd2lkdGg9IjUuNSIvPgogICAgICA8L3N2Zz4KICAgICAgPGRpdiBjbGFzcz0iYnJhbmQtdGV4dCI+aW5mcmFzdHJ1PHNwYW4gY2xhc3M9InEtYWNjZW50Ij5RPC9zcGFuPnR1cmU8L2Rpdj4KICAgIDwvYT4KICAgIDxkaXYgY2xhc3M9Im5hdi1saW5rcyI+CiAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCNyZXNpZGVudGlhbCI+Rm9yIGhvbWVzPC9hPgogICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjY29tbWVyY2lhbCI+Rm9yIGJ1c2luZXNzPC9hPgogICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjcm9ib3RpY3MiPlJvYm90aWNzICZhbXA7IEFJPC9hPgogICAgICA8YSBocmVmPSJ3b3JsZG1vZGVsLmh0bWwiIGNsYXNzPSJpcy1jdXJyZW50Ij5Xb3JsZCBtb2RlbDwvYT4KICAgICAgPGEgY2xhc3M9Im5hdi1jdGEiIGhyZWY9IndlYnNpdGUuaHRtbCNlc3RpbWF0b3IiPkdldCBhIGxpdmUgcXVvdGUg4oaSPC9hPgogICAgPC9kaXY+CiAgPC9kaXY+CjwvbmF2PgoKPGhlYWRlciBjbGFzcz0iaGVybyI+CiAgPGRpdiBjbGFzcz0ic2hlbGwiPgogICAgPHAgY2xhc3M9ImV5ZWJyb3ciPjxzcGFuIGNsYXNzPSJwaXAiPjwvc3Bhbj5XaGVyZSB0aGlzIGlzIGdvaW5nIMK3IGEgd29ya2luZyBjb25jZXB0PC9wPgogICAgPGgxPlJvYm90cyBhcmUgbGVhcm5pbmcgdGhlIHdvcmxkLiBXZSB0ZWFjaCB0aGVtIDxzcGFuIGNsYXNzPSJncmFkIj55b3Vyczwvc3Bhbj4uPC9oMT4KICAgIDxwIGNsYXNzPSJoZXJvLXN1YiI+QSA8c3Ryb25nPndvcmxkIG1vZGVsPC9zdHJvbmc+IGlzIGEgcm9ib3TigJlzIHNlbnNlIG9mIHBoeXNpY2FsIHJlYWxpdHk6IHNwYWNlLCBtb3Rpb24sIGFuZCB3aGF0IGhhcHBlbnMgbmV4dCBpZiBpdCBtb3Zlcy4gVGhlIG1vZGVsIGtub3dzIHBoeXNpY3MgaW4gZ2VuZXJhbC4gSXQgZG9lcyBub3Qga25vdyB5b3VyIGhvdXNlLCB5b3VyIG9hayB0cmVlLCBvciB0aGUga2lk4oCZcyBiaWtlIGxlZnQgYnkgdGhlIGdhdGUuIDxzdHJvbmc+VGhhdCBpcyB0aGUgam9iIHdlIGFyZSBidWlsZGluZyB0b3dhcmQuPC9zdHJvbmc+IFdlIG1hcCB5b3VyIHNwYWNlLCBzaW11bGF0ZSB0aGUgd29yayBiZWZvcmUgYW55dGhpbmcgbW92ZXMsIGFuZCBzdGF5IG9uIHRoZSBob29rIHRoZSBtb21lbnQgdGhlIG1vZGVsIGlzIHVuc3VyZS4gVHJ5IGl0IGJlbG93LjwvcD4KICA8L2Rpdj4KPC9oZWFkZXI+Cgo8IS0tID09PT09PT09PT09PSBUSEUgTElWRSBTVEFHRSA9PT09PT09PT09PT0gLS0+CjxzZWN0aW9uIGNsYXNzPSJibG9jayIgc3R5bGU9InBhZGRpbmctdG9wOiA4cHg7Ij4KICA8ZGl2IGNsYXNzPSJzaGVsbCI+CiAgICA8cCBjbGFzcz0ic2VjLWV5ZWJyb3ciPkxpdmUgY29uY2VwdCDCtyBkcmFnLWZyZWUsIGp1c3QgcGljayBhIHRhc2s8L3A+CiAgICA8aDIgY2xhc3M9InNlYy1oIj5Zb3VyIGhvbWUsIGFzIGEgbW9kZWwgaXQgY2FuIHRoaW5rIHdpdGguPC9oMj4KICAgIDxwIGNsYXNzPSJzZWMtbGVkZSI+VGhpcyBpcyBhIGRpZ2l0YWwgdHdpbiBvZiBvbmUgcHJvcGVydHkuIEV2ZXJ5dGhpbmcgd2UgaGF2ZSBpbnN0YWxsZWQgaXMgYWxyZWFkeSBpbiBpdC4gR2l2ZSB0aGUgcm9ib3QgYSBqb2IgYW5kIHdhdGNoIGl0IHByZWRpY3QgdGhlIHBhdGgsIHJ1biBpdCwgYW5kIHBhdXNlIHRoZSBpbnN0YW50IGl0IHNlZXMgc29tZXRoaW5nIHRoZSBtb2RlbCBkb2VzIG5vdCByZWNvZ25pemUuPC9wPgoKICAgIDxkaXYgY2xhc3M9InN0YWdlLXdyYXAiPgogICAgICA8ZGl2IGNsYXNzPSJzdGFnZSI+CiAgICAgICAgPCEtLSBDQU5WQVMgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RhZ2UtY2FudmFzIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YWdlLXRhZyI+PHNwYW4gY2xhc3M9ImxpdmUiPjwvc3Bhbj5Xb3JsZCBtb2RlbCDCtyAxMjQwIEF1cm9yYSBBdmU8L2Rpdj4KICAgICAgICAgIDxzdmcgaWQ9InNjZW5lIiB2aWV3Qm94PSIwIDAgNzIwIDU2MCIgYXJpYS1sYWJlbD0iVG9wLWRvd24gZGlnaXRhbCB0d2luIG9mIGEgaG9tZSBhbmQgeWFyZCI+CiAgICAgICAgICAgIDxkZWZzPgogICAgICAgICAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0idHJhaWxncmFkIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+CiAgICAgICAgICAgICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MkU1RkYiLz4KICAgICAgICAgICAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzRGOENGRiIvPgogICAgICAgICAgICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICAgICAgICAgIDwvZGVmcz4KCiAgICAgICAgICAgIDwhLS0gbG90IC0tPgogICAgICAgICAgICA8cmVjdCBjbGFzcz0idy1sb3QiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjY4OCIgaGVpZ2h0PSI1MjgiIHJ4PSIxNCIvPgogICAgICAgICAgICA8cmVjdCBjbGFzcz0idy1sb3QtMiIgeD0iMzYwIiB5PSI5MiIgd2lkdGg9IjMyOCIgaGVpZ2h0PSI0MzAiIHJ4PSI4Ii8+CgogICAgICAgICAgICA8IS0tIGRyaXZld2F5ICsgc3RyZWV0IC0tPgogICAgICAgICAgICA8cmVjdCBjbGFzcz0idy1kcml2ZSIgeD0iMTUwIiB5PSI0MzAiIHdpZHRoPSI5MCIgaGVpZ2h0PSIxMTQiLz4KICAgICAgICAgICAgPHJlY3QgY2xhc3M9InctZHJpdmUiIHg9IjE2IiB5PSI1MjAiIHdpZHRoPSI2ODgiIGhlaWdodD0iMjQiLz4KCiAgICAgICAgICAgIDwhLS0gaG91c2UgLS0+CiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJ3LWhvdXNlIiB4PSI2MCIgeT0iODAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMzIwIiByeD0iNiIvPgogICAgICAgICAgICA8IS0tIHJvb21zIC0tPgogICAgICAgICAgICA8bGluZSBjbGFzcz0idy1yb29tIiB4MT0iMjEwIiB5MT0iODAiIHgyPSIyMTAiIHkyPSI0MDAiLz4KICAgICAgICAgICAgPGxpbmUgY2xhc3M9Inctcm9vbSIgeDE9IjYwIiB5MT0iMjQwIiB4Mj0iMjEwIiB5Mj0iMjQwIi8+CiAgICAgICAgICAgIDxsaW5lIGNsYXNzPSJ3LXJvb20iIHgxPSIyMTAiIHkxPSIyMDAiIHgyPSIzNjAiIHkyPSIyMDAiLz4KICAgICAgICAgICAgPHRleHQgY2xhc3M9InctbGFiZWwiIHg9Ijg0IiB5PSIxNzAiPkxJVklORzwvdGV4dD4KICAgICAgICAgICAgPHRleHQgY2xhc3M9InctbGFiZWwiIHg9Ijg0IiB5PSIzMzAiPktJVENIRU48L3RleHQ+CiAgICAgICAgICAgIDx0ZXh0IGNsYXNzPSJ3LWxhYmVsIiB4PSIyMzYiIHk9IjE1MCI+QkVEUk9PTTwvdGV4dD4KICAgICAgICAgICAgPHRleHQgY2xhc3M9InctbGFiZWwiIHg9IjIzNiIgeT0iMzEwIj5PRkZJQ0U8L3RleHQ+CiAgICAgICAgICAgIDwhLS0gZnJvbnQgZG9vciAtLT4KICAgICAgICAgICAgPHJlY3QgeD0iMTk1IiB5PSIzOTYiIHdpZHRoPSIzNCIgaGVpZ2h0PSI4IiByeD0iMyIgZmlsbD0iIzM4NTA3ZiIvPgoKICAgICAgICAgICAgPCEtLSB5YXJkIG9iamVjdHMgKGtub3duIHRvIHRoZSBtb2RlbCkgLS0+CiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9InctdHJlZSIgY3g9IjYyMCIgY3k9IjE1MCIgcj0iNDAiLz4KICAgICAgICAgICAgPHRleHQgY2xhc3M9Inctb2JqbGFiZWwiIHg9IjYyMCIgeT0iMTUzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDpyZ2JhKDI1NSwyNTUsMjU1LC41KSI+T0FLPC90ZXh0PgogICAgICAgICAgICA8cmVjdCBjbGFzcz0idy1iZWQiIHg9IjQzMCIgeT0iNDcwIiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjM0IiByeD0iOCIvPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0idy1vYmpsYWJlbCIgeD0iNTQwIiB5PSI0OTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkZMT1dFUiBCRUQ8L3RleHQ+CiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJ3LXBhdGlvIiB4PSIzOTIiIHk9IjEyMCIgd2lkdGg9IjkyIiBoZWlnaHQ9Ijc0IiByeD0iNiIvPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0idy1vYmpsYWJlbCIgeD0iNDM4IiB5PSIxNjEiIHRleHQtYW5jaG9yPSJtaWRkbGUiPlBBVElPPC90ZXh0PgogICAgICAgICAgICA8IS0tIHNpZGUgZ2F0ZSAtLT4KICAgICAgICAgICAgPGxpbmUgY2xhc3M9InctZ2F0ZSIgeDE9IjY4OCIgeTE9IjMwMCIgeDI9IjY4OCIgeTI9IjM2MCIvPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0idy1vYmpsYWJlbCIgeD0iNjQ4IiB5PSIzMzQiIHN0eWxlPSJmaWxsOnZhcigtLXNpZ25hbCkiPkdBVEU8L3RleHQ+CgogICAgICAgICAgICA8IS0tIGluc3RhbGxlZCBkZXZpY2VzICh0aGUgbW9kZWwgaXMgYnVpbHQgZnJvbSB0aGVzZSkgLS0+CiAgICAgICAgICAgIDxnIGlkPSJkZXZpY2VzIj48L2c+CgogICAgICAgICAgICA8IS0tIGRvY2sgLS0+CiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJkb2NrIiB4PSIzOTIiIHk9IjQwNCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iOCIvPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZG9jay1sYWJlbCIgeD0iNDEyIiB5PSI0NTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiPkRPQ0s8L3RleHQ+CgogICAgICAgICAgICA8IS0tIGR5bmFtaWMgcGF0aHMgLS0+CiAgICAgICAgICAgIDxwYXRoIGlkPSJwcmVkaWN0ZWQiIGQ9IiIvPgogICAgICAgICAgICA8cGF0aCBpZD0idHJhaWwiIGQ9IiIvPgoKICAgICAgICAgICAgPCEtLSB1bmtub3duIG9iamVjdCAtLT4KICAgICAgICAgICAgPGcgY2xhc3M9InVua25vd24iIGlkPSJ1bmtub3duIj4KICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0idW5rbm93bi1ib3giIHg9IjAiIHk9IjAiIHdpZHRoPSI0NiIgaGVpZ2h0PSIzNCIgcng9IjYiLz4KICAgICAgICAgICAgICA8dGV4dCBjbGFzcz0idW5rbm93bi1xIiB4PSIyMyIgeT0iMjQiPj88L3RleHQ+CiAgICAgICAgICAgIDwvZz4KCiAgICAgICAgICAgIDwhLS0gcm9ib3QgLS0+CiAgICAgICAgICAgIDxnIGlkPSJyb2JvdCIgc3R5bGU9Im9wYWNpdHk6MCI+CiAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0icm9ib3QtaGFsbyIgY3g9IjAiIGN5PSIwIiByPSIxNiIvPgogICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9InJvYm90LWJvZHkiIGN4PSIwIiBjeT0iMCIgcj0iMTAiLz4KICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJyb2JvdC1leWUiIGN4PSIwIiBjeT0iLTQiIHI9IjIuNCIvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPCEtLSBQQU5FTCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtdGl0bGUiPgogICAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xMiAyYTEwIDEwIDAgMTAwIDIwIDEwIDEwIDAgMDAwLTIweiIvPjxwYXRoIGQ9Ik0yIDEyaDIwTTEyIDJhMTUgMTUgMCAwMTAgMjBNMTIgMmExNSAxNSAwIDAwMCAyMCIvPjwvc3ZnPgogICAgICAgICAgICAgIFdvcmxkIG1vZGVsCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25mLW51bSIgaWQ9ImNvbmZOdW0iPi0tPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZi1sYmwiPmNvbmZpZGVuY2U8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrcyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhc2tzLWxibCI+R2l2ZSBpdCBhIGpvYjwvZGl2PgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJ0YXNrLWJ0biIgZGF0YS10YXNrPSJtb3ciPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYyI+PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTMgMjBoMThNNSAyMHYtNmg2djZNNSAxNGMwLTQgMy03IDctN00xMiA3bDQtMiIvPjwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj5Nb3cgdGhlIGJhY2sgbGF3bjxzcGFuIGNsYXNzPSJzdWIiPmF1dG9ub21vdXMgbW93ZXIgwrcgfjAuNCBhY3JlPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRhc2stYnRuIiBkYXRhLXRhc2s9InBhdHJvbCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImljIj48c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cGF0aCBkPSJNMTIgMmw4IDR2NmMwIDUtMy41IDgtOCAxMC00LjUtMi04LTUtOC0xMFY2eiIvPjwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj5FdmVuaW5nIHNlY3VyaXR5IHBhdHJvbDxzcGFuIGNsYXNzPSJzdWIiPnBlcmltZXRlciBsb29wIMK3IGNoZWNrcyBjYW1lcmFzPC9zcGFuPjwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRhc2stYnRuIiBkYXRhLXRhc2s9ImRlbGl2ZXIiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpYyI+PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBhdGggZD0iTTMgN2w5LTQgOSA0djEwbC05IDQtOS00eiIvPjxwYXRoIGQ9Ik0zIDdsOSA0IDktNE0xMiAxMXYxMCIvPjwvc3ZnPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3Bhbj5DYXJyeSB0aGUgcGFja2FnZSB0byB0aGUgZG9vcjxzcGFuIGNsYXNzPSJzdWIiPmRlbGl2ZXJ5IGJvdCDCtyAxNCBsYiBwYXJjZWw8L3NwYW4+PC9zcGFuPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZyIgaWQ9ImxvZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZy1lbXB0eSI+UGljayBhIGpvYi4gVGhlIG1vZGVsIHdpbGwgbG9hZCB0aGUgcHJvcGVydHksIHByZWRpY3QgYSByb3V0ZSwgYW5kIG5hcnJhdGUgZXZlcnkgZGVjaXNpb24gaGVyZS48L2Rpdj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGVsYmFyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibSI+PGRpdiBjbGFzcz0ibXYiIGlkPSJtT2JqIj4zNzwvZGl2PjxkaXYgY2xhc3M9Im1sIj5vYmplY3RzIG1hcHBlZDwvZGl2PjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtIj48ZGl2IGNsYXNzPSJtdiIgaWQ9Im1VcCI+MTQ8L2Rpdj48ZGl2IGNsYXNzPSJtbCI+aW5zdGFsbHMgbG9nZ2VkPC9kaXY+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im0iPjxkaXYgY2xhc3M9Im12IiBpZD0ibUh1bWFuIj4xPC9kaXY+PGRpdiBjbGFzcz0ibWwiPmh1bWFuIGluIGxvb3A8L2Rpdj48L2Rpdj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDwhLS0gaHVtYW4gY2hlY2twb2ludCAtLT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrcG9pbnQiIGlkPSJjaGVja3BvaW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3AtaGVhZCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3AtbW9ubyI+TjwvZGl2PgogICAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcC13aG8iPk5kdTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3Atcm9sZSI+aHVtYW4gY2hlY2twb2ludCDCtyBvbiBjYWxsPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cCBjbGFzcz0iY3AtcSIgaWQ9ImNwUSI+VGhlIGJvdCBmb3VuZCBzb21ldGhpbmcgbm90IGluIHRoZSBtb2RlbC4gSG93IHNob3VsZCBpdCBwcm9jZWVkPzwvcD4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3Atcm93Ij4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjcC1idG4iIGlkPSJjcENvbmZpcm0iPkNvbmZpcm0gJmFtcDsgcmVzdW1lPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3AtYnRuIGFsdCIgaWQ9ImNwUmVyb3V0ZSI+UmVyb3V0ZTwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3AtYXV0byIgaWQ9ImNwQXV0byI+YXV0by1yZXNvbHZpbmcgaW4gNHM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxwIGNsYXNzPSJzdGFnZS1jYXAiPgogICAgICAgIDxzdmcgd2lkdGg9IjE1IiBoZWlnaHQ9IjE1IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxwYXRoIGQ9Ik0xMiAybDMgN2g3bC01LjUgNC41TDE4IDIxbC02LTQtNiA0IDEuNS03LjVMMiA5aDd6Ii8+PC9zdmc+CiAgICAgICAgQSBjb25jZXB0IGRlbW8uIFJlYWwgZGVwbG95bWVudHMgcnVuIHRoZSBzYW1lIGxvb3A6IG1hcCwgc2ltdWxhdGUsIGRlcGxveSwgZXNjYWxhdGUgdG8gYSBwZXJzb24gd2hlbiB0aGUgbW9kZWwgaXMgdW5zdXJlLgogICAgICA8L3A+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9zZWN0aW9uPgoKPCEtLSA9PT09PT09PT09PT0gTExNIHZzIFdPUkxEIE1PREVMID09PT09PT09PT09PSAtLT4KPHNlY3Rpb24gY2xhc3M9ImJsb2NrIiBzdHlsZT0icGFkZGluZy10b3A6IDI0cHg7Ij4KICA8ZGl2IGNsYXNzPSJzaGVsbCI+CiAgICA8cCBjbGFzcz0ic2VjLWV5ZWJyb3ciPlRoZSBzaGlmdCB1bmRlcm5lYXRoIGFsbCBvZiB0aGlzPC9wPgogICAgPGgyIGNsYXNzPSJzZWMtaCI+VHdvIGtpbmRzIG9mIGludGVsbGlnZW5jZS4gT25seSBvbmUgY2FuIHdhbGsgaW50byB5b3VyIGtpdGNoZW4uPC9oMj4KICAgIDxkaXYgY2xhc3M9ImNvbXBhcmUiPgogICAgICA8ZGl2IGNsYXNzPSJjbXAtY2FyZCI+CiAgICAgICAgPHAgY2xhc3M9ImNtcC1raWNrZXIiPkxhcmdlIGxhbmd1YWdlIG1vZGVsPC9wPgogICAgICAgIDxoMyBjbGFzcz0iY21wLWgiPkxlYXJucyBmcm9tIHdoYXQgcGVvcGxlIHNhaWQuPC9oMz4KICAgICAgICA8cCBjbGFzcz0iY21wLXAiPlRyYWluZWQgb24gdGV4dC4gSXQgcHJlZGljdHMgdGhlIG5leHQgd29yZCwgc28gaXQgaXMgYnJpbGxpYW50IGF0IGxhbmd1YWdlLCBrbm93bGVkZ2UsIGFuZCByZWFzb25pbmcuIEJ1dCBpdCBoYXMgbm8gcmVhbCBncmlwIG9uIHBoeXNpY3MuIEl0IGNhbiBkZXNjcmliZSB0aGUgam9iIHBlcmZlY3RseSB3aXRob3V0IGtub3dpbmcgeW91ciBhY3R1YWwgd2FsbC48L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iY21wLWVnIj7igJxUbyBtb3VudCBhIDc1JlByaW1lOyBUViwgbG9jYXRlIHRoZSBzdHVkcywgdXNlIGEgdGlsdGluZyBicmFja2V0LCBhbmQgcm91dGUgdGhlIGNhYmxlIHRocm91Z2ggdGhlIHdhbGwu4oCdIDxicj48YnI+PGI+S25vd3MgdGhlIHJlY2lwZS4gTm90IHRoZSByb29tLjwvYj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImNtcC1jYXJkIHdvcmxkIj4KICAgICAgICA8cCBjbGFzcz0iY21wLWtpY2tlciI+V29ybGQgbW9kZWw8L3A+CiAgICAgICAgPGgzIGNsYXNzPSJjbXAtaCI+TGVhcm5zIGhvdyB0aGUgd29ybGQgYmVoYXZlcy48L2gzPgogICAgICAgIDxwIGNsYXNzPSJjbXAtcCI+VHJhaW5lZCBvbiBzcGFjZSBhbmQgbW90aW9uLiBJdCBjYW4gaW1hZ2luZSB3aGF0IGhhcHBlbnMgbmV4dDogdHVybiBsZWZ0LCB0aGUgc2xvcGUgc3RlZXBlbnMsIHRoZSBjYWJsZSB3aWxsIHNhZy4gVGhpcyBpcyB0aGUgbWlzc2luZyBsYXllciB0aGF0IGxldHMgYSByb2JvdCBhY3QgaW4gYSByZWFsIHJvb20gaW5zdGVhZCBvZiBhIGRlbW8gdmlkZW8uPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImNtcC1lZyI+4oCcU3R1ZHMgYXQgNDEmUHJpbWU7IGFuZCA1NyZQcmltZTsuIE91dGxldCAxMSZQcmltZTsgYmVsb3cgbW91bnQgbGluZS4gQ2FibGUgZHJvcCBjbGVhcnMgdGhlIGJhc2Vib2FyZCB3aXRoIDMmUHJpbWU7IHRvIHNwYXJlLuKAnSA8YnI+PGJyPjxiPktub3dzIHRoZSByb29tLiBQcmVkaWN0cyB0aGUgcmVzdWx0LjwvYj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9zZWN0aW9uPgoKPCEtLSA9PT09PT09PT09PT0gSE9XIFdFIEZJVCA9PT09PT09PT09PT0gLS0+CjxzZWN0aW9uIGNsYXNzPSJibG9jayIgc3R5bGU9InBhZGRpbmctdG9wOiA4cHg7Ij4KICA8ZGl2IGNsYXNzPSJzaGVsbCI+CiAgICA8cCBjbGFzcz0ic2VjLWV5ZWJyb3ciPk91ciBwYXJ0IG9mIGl0PC9wPgogICAgPGgyIGNsYXNzPSJzZWMtaCI+V2UgYXJlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgbW9kZWwuPC9oMj4KICAgIDxwIGNsYXNzPSJzZWMtbGVkZSI+QSByb2JvdCBhcnJpdmVzIGtub3dpbmcgcGh5c2ljcyBpbiBnZW5lcmFsLiBTb21lb25lIGhhcyB0byBncm91bmQgaXQgaW4gb25lIHNwZWNpZmljIHBsYWNlLCBhbmQgc3RheSBhY2NvdW50YWJsZSB3aGVuIHRoZSBtb2RlbCBpcyB3cm9uZy4gVGhhdCBoYXMgYWx3YXlzIGJlZW4gb3VyIGpvYi4gVGhlIHJvYm90cyBqdXN0IG1ha2UgaXQgYmlnZ2VyLjwvcD4KICAgIDxkaXYgY2xhc3M9InN0ZXBzIj4KICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1uIj4wMSAvIE1BUDwvZGl2PgogICAgICAgIDxoMyBjbGFzcz0ic3RlcC1oIj5FdmVyeSBpbnN0YWxsIGJ1aWxkcyB0aGUgbW9kZWwuPC9oMz4KICAgICAgICA8cCBjbGFzcz0ic3RlcC1wIj5BIGNhbWVyYSBoZXJlLCBhIG1lc2ggbm9kZSB0aGVyZSwgYSBsb2NrIG9uIHRoZSBkb29yLiBFYWNoIGpvYiBsZWF2ZXMgYSBzdHJ1Y3R1cmVkIHJlY29yZCBvZiB3aGF0IGlzIHdoZXJlLiBPdmVyIHRpbWUgdGhhdCByZWNvcmQgYmVjb21lcyBhIGxpdmluZyBtYXAgb2YgeW91ciBob21lLCBzbyB0aGUgbmV4dCByb2JvdCBhcnJpdmVzIGFscmVhZHkga25vd2luZyB0aGUgc3BhY2UuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1uIj4wMiAvIFNJTVVMQVRFPC9kaXY+CiAgICAgICAgPGgzIGNsYXNzPSJzdGVwLWgiPlNlZSB0aGUgcGxhbiBiZWZvcmUgaXQgbW92ZXMuPC9oMz4KICAgICAgICA8cCBjbGFzcz0ic3RlcC1wIj5XZSBydW4gdGhlIHRhc2sgaW4gdGhlIG1vZGVsIGZpcnN0LiBUaGUgcm91dGUsIHRoZSBjb3ZlcmFnZSwgdGhlIGNoYXJnZSBjeWNsZXMuIFlvdSBzZWUgaXQsIHlvdSBhcHByb3ZlIGl0LCBhbmQgb25seSB0aGVuIGRvZXMgYW55dGhpbmcgcGh5c2ljYWwgaGFwcGVuLiBObyBzdXJwcmlzZXMgb24gdGhlIGRheSwgbm8gZ3Vlc3NpbmcuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic3RlcCI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3RlcC1uIj4wMyAvIERFUExPWTwvZGl2PgogICAgICAgIDxoMyBjbGFzcz0ic3RlcC1oIj5BIHBlcnNvbiBzdGF5cyBvbiB0aGUgaG9vay48L2gzPgogICAgICAgIDxwIGNsYXNzPSJzdGVwLXAiPlRoZSByb2JvdCBkb2VzIHRoZSB3b3JrLiBXaGVuIGl0IGhpdHMgc29tZXRoaW5nIHRoZSBtb2RlbCBkaWQgbm90IHByZWRpY3QsIGl0IHN0b3BzIGFuZCBjYWxscyBhIGh1bWFuIHdpdGggYSBuYW1lIHlvdSBrbm93LiBUcnVzdCBpcyBlYXJuZWQgb25lIHRhc2sgYXQgYSB0aW1lLCBuZXZlciBhc3N1bWVkLjwvcD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9zZWN0aW9uPgoKPCEtLSA9PT09PT09PT09PT0gUElURkFMTFMgPT09PT09PT09PT09IC0tPgo8c2VjdGlvbiBjbGFzcz0iYmxvY2sgcGl0ZmFsbHMiPgogIDxkaXYgY2xhc3M9InNoZWxsIj4KICAgIDxwIGNsYXNzPSJzZWMtZXllYnJvdyIgc3R5bGU9ImNvbG9yOnZhcigtLWhhbG8tMikiPldlIGFyZSBub3QgZ29pbmcgdG8gcHJldGVuZCB0aGVzZSBhd2F5PC9wPgogICAgPGgyIGNsYXNzPSJzZWMtaCI+VGhlIGhvbmVzdCByaXNrcywgYW5kIHdoZXJlIHdlIHN0YW5kIG9uIGVhY2guPC9oMj4KICAgIDxwIGNsYXNzPSJzZWMtbGVkZSIgc3R5bGU9ImNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjcpIj5BIHdvcmxkIG1vZGVsIGNhbiBiZSBjb25maWRlbnRseSB3cm9uZy4gQW55b25lIHNlbGxpbmcgeW91IHJvYm90cyB3aG8gc2tpcHMgdGhpcyBwYXJ0IGlzIHRoZSB3cm9uZyBwZXJzb24gdG8gaW5zdGFsbCB0aGVtLiBIZXJlIGlzIHRoZSB1bmNvbWZvcnRhYmxlIGxpc3QsIHdpdGggb3VyIGFjdHVhbCBhbnN3ZXIgbmV4dCB0byBpdC48L3A+CiAgICA8ZGl2IGNsYXNzPSJwZi1ncmlkIj4KICAgICAgPGRpdiBjbGFzcz0icGYiPgogICAgICAgIDxwIGNsYXNzPSJwZi1yaXNrIj5Db25maWRlbnRseSB3cm9uZzwvcD4KICAgICAgICA8aDMgY2xhc3M9InBmLWgiPlRoZSBtb2RlbCBjYW4gaGFsbHVjaW5hdGUgYSBjbGVhciBwYXRoLjwvaDM+CiAgICAgICAgPHAgY2xhc3M9InBmLXAiPkl0IGNhbiBtaXNyZWFkIGFuIG9ic3RhY2xlLCBtaXNqdWRnZSBhIHNsb3BlLCBvciBtaXN0aW1lIGEgY3V0LCBhbmQgcmVwb3J0IGhpZ2ggY29uZmlkZW5jZSB0aGUgd2hvbGUgd2F5LiBBIHdyb25nIGFuc3dlciB0aGF0IHNvdW5kcyBzdXJlIGlzIHRoZSBtb3N0IGRhbmdlcm91cyBraW5kLjwvcD4KICAgICAgICA8cCBjbGFzcz0icGYtYW5zIj48Yj5PdXIgc3RhbmQ6PC9iPiB0aGUgbW9kZWwgY2FuIGltYWdpbmUgeW91ciBsaXZpbmcgcm9vbS4gT25seSBhIHBlcnNvbiBjYW4gd2FsayBpbnRvIGl0LiBVbmNlcnRhaW50eSBlc2NhbGF0ZXMgdG8gYSBodW1hbiBiZWZvcmUgYW55dGhpbmcgbW92ZXMuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGYiPgogICAgICAgIDxwIGNsYXNzPSJwZi1yaXNrIj5Qcml2YWN5PC9wPgogICAgICAgIDxoMyBjbGFzcz0icGYtaCI+QSBob21lIG1vZGVsIGlzIGludGltYXRlIGRhdGEuPC9oMz4KICAgICAgICA8cCBjbGFzcz0icGYtcCI+QSBtYXAgb2Ygd2hlcmUgeW91IHNsZWVwLCB3aGVuIHlvdSBsZWF2ZSwgd2hhdCBpcyB3b3J0aCB0YWtpbmcuIFRoYXQgaXMgdGhlIG1vc3Qgc2Vuc2l0aXZlIGZpbGUgeW91IHdpbGwgZXZlciBvd24sIGFuZCBtb3N0IHZlbmRvcnMgcXVpZXRseSB3YW50IHRvIGtlZXAgaXQuPC9wPgogICAgICAgIDxwIGNsYXNzPSJwZi1hbnMiPjxiPk91ciBzdGFuZDo8L2I+IHlvdSBvd24geW91ciBob21l4oCZcyBtb2RlbCwgbm90IHVzLCBub3QgdGhlIHJvYm90IG1ha2VyLiBJdCBpcyBwb3J0YWJsZSwgZXhwb3J0YWJsZSwgYW5kIGRlbGV0YWJsZSBvbiB5b3VyIHdvcmQuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGYiPgogICAgICAgIDxwIGNsYXNzPSJwZi1yaXNrIj5PdmVyLXRydXN0PC9wPgogICAgICAgIDxoMyBjbGFzcz0icGYtaCI+UGVvcGxlIHN0b3Agd2F0Y2hpbmcuPC9oMz4KICAgICAgICA8cCBjbGFzcz0icGYtcCI+VGhlIG1vcmUgcmVsaWFibGUgYXV0b21hdGlvbiBnZXRzLCB0aGUgbGVzcyBhbnlvbmUgcGF5cyBhdHRlbnRpb24sIHJpZ2h0IHVwIHVudGlsIHRoZSBvbmUgdGltZSBpdCBtYXR0ZXJzLiBDb21mb3J0IHF1aWV0bHkgYmVjb21lcyBjb21wbGFjZW5jeS48L3A+CiAgICAgICAgPHAgY2xhc3M9InBmLWFucyI+PGI+T3VyIHN0YW5kOjwvYj4gd2UgZGVzaWduIGZvciB0aGUgaGFuZG9mZiwgbm90IHRoZSBhdXRvcGlsb3QuIFRoZSBzeXN0ZW0gaXMgbG91ZGVzdCBleGFjdGx5IHdoZW4gaXQgaXMgbGVhc3Qgc3VyZSwgYW5kIGEgcGVyc29uIGlzIGFsd2F5cyByZWFjaGFibGUuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0icGYiPgogICAgICAgIDxwIGNsYXNzPSJwZi1yaXNrIj5BY2NvdW50YWJpbGl0eTwvcD4KICAgICAgICA8aDMgY2xhc3M9InBmLWgiPldoZW4gYSBtYWNoaW5lIGVycnMsIHdobyBhbnN3ZXJzPzwvaDM+CiAgICAgICAgPHAgY2xhc3M9InBmLXAiPkEgcm9ib3QgY2Fubm90IGJlIHNvcnJ5LiBJdCBjYW5ub3Qgc3RhbmQgaW4geW91ciBraXRjaGVuIGFuZCBtYWtlIGl0IHJpZ2h0LiBEaWZmdXNlIGJsYW1lIGJldHdlZW4gYSB2ZW5kb3IsIGEgbW9kZWwsIGFuZCBhbiBpbnN0YWxsZXIgaGVscHMgbm8gb25lLjwvcD4KICAgICAgICA8cCBjbGFzcz0icGYtYW5zIj48Yj5PdXIgc3RhbmQ6PC9iPiB0aGUgc2FtZSBwZXJzb24gd2hvIHNpZ25zIHRoZSB3b3JrIGFuc3dlcnMgZm9yIGl0LiBPbmUgbmFtZSwgb25lIG51bWJlciwgYmVmb3JlIGFuZCBhZnRlciB0aGUgcm9ib3Qgc2hvd3MgdXAuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L3NlY3Rpb24+Cgo8IS0tID09PT09PT09PT09PSBDTE9TRSA9PT09PT09PT09PT0gLS0+CjxzZWN0aW9uIGNsYXNzPSJjbG9zZS1jdGEiPgogIDxkaXYgY2xhc3M9InNoZWxsIj4KICAgIDxoMj5UaGUgZnV0dXJlIGluc3RhbGxzIGNsZWFubHksPGJyPm9yIGl0IGRvZXMgbm90IGFycml2ZS48L2gyPgogICAgPHA+V2hhdGV2ZXIgbGFuZHMgaW4geW91ciBob21lIG5leHQsIHNtYXJ0IG9yIGF1dG9ub21vdXMgb3Igc29tZXRoaW5nIHdlIGNhbm5vdCBuYW1lIHlldCwgYSByZWFsIHBlcnNvbiBzaG91bGQgcHV0IGl0IHRoZXJlLiBUaGF0IHBhcnQgaXMgbm90IGNoYW5naW5nLjwvcD4KICAgIDxkaXYgY2xhc3M9ImJ0bi1yb3ciPgogICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBocmVmPSJ3ZWJzaXRlLmh0bWwjZXN0aW1hdG9yIj5HZXQgYSBsaXZlIHF1b3RlPC9hPgogICAgICA8YSBjbGFzcz0iYnRuIGJ0bi1naG9zdCIgaHJlZj0id2Vic2l0ZS5odG1sIj5CYWNrIHRvIHRoZSBzaXRlPC9hPgogICAgPC9kaXY+CiAgPC9kaXY+Cjwvc2VjdGlvbj4KCjxmb290ZXI+CiAgPGRpdiBjbGFzcz0ic2hlbGwiPgogICAgPGRpdiBjbGFzcz0iZm9vdC1ncmlkIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJicmFuZCI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJicmFuZC1tYXJrIiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImJtLXJpbmciIGN4PSI0NiIgY3k9IjQ2IiByPSIzMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIG9wYWNpdHk9Ii4yMiIvPgogICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJibS1yaW5nIiBjeD0iNDYiIGN5PSI0NiIgcj0iMjIiIHN0cm9rZS13aWR0aD0iMiIgb3BhY2l0eT0iLjU1Ii8+CiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImJtLXJpbmciIGN4PSI0NiIgY3k9IjQ2IiByPSIxNCIgc3Ryb2tlLXdpZHRoPSI0LjUiLz4KICAgICAgICAgICAgPGxpbmUgY2xhc3M9ImJtLXRhaWwiIHgxPSI1NCIgeTE9IjU0IiB4Mj0iNzYiIHkyPSI3NiIgc3Ryb2tlLXdpZHRoPSI1LjUiLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPGRpdiBjbGFzcz0iYnJhbmQtdGV4dCI+aW5mcmFzdHJ1PHNwYW4gY2xhc3M9InEtYWNjZW50Ij5RPC9zcGFuPnR1cmU8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0iZm9vdC1icmFuZC10ZXh0Ij5JbnN0YWxsYXRpb24sIGRvbmUgd2l0aCBRdWFsaXR5LiBSZXNpZGVudGlhbCBhbmQgY29tbWVyY2lhbC4gT3BlcmF0aW5nIGFjcm9zcyAyNCBtZXRyb3MsIHBvd2VyZWQgYnkgNSwwMDArIHZldHRlZCB0ZWNobmljaWFucy4gRm9ybWVybHkgSW5zdGFsbFNtYXJ0bHkuPC9wPgogICAgICA8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290LWgiPlNlcnZpY2VzPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdC1saXN0Ij4KICAgICAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCNyZXNpZGVudGlhbCIgdGFyZ2V0PSJfdG9wIj5UViBtb3VudGluZzwvYT4KICAgICAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCNyZXNpZGVudGlhbCIgdGFyZ2V0PSJfdG9wIj5TbWFydCBkb29yYmVsbHM8L2E+CiAgICAgICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjcmVzaWRlbnRpYWwiIHRhcmdldD0iX3RvcCI+V2ktRmkgJiBtZXNoPC9hPgogICAgICAgICAgPGEgaHJlZj0id2Vic2l0ZS5odG1sI3Jlc2lkZW50aWFsIiB0YXJnZXQ9Il90b3AiPkNhbWVyYXM8L2E+CiAgICAgICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjcmVzaWRlbnRpYWwiIHRhcmdldD0iX3RvcCI+VmlldyBhbGwg4oaSPC9hPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290LWgiPkNvbXBhbnk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290LWxpc3QiPgogICAgICAgICAgPGEgaHJlZj0id2Vic2l0ZS5odG1sI3RlYW0iIHRhcmdldD0iX3RvcCI+QWJvdXQ8L2E+CiAgICAgICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjdGVhbSIgdGFyZ2V0PSJfdG9wIj5UZWNobmljaWFuczwvYT4KICAgICAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCN0ZWFtIiB0YXJnZXQ9Il90b3AiPkNhcmVlcnM8L2E+CiAgICAgICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjdGVhbSIgdGFyZ2V0PSJfdG9wIj5QcmVzczwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdC1oIj5IZWxwPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdC1saXN0Ij4KICAgICAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCNlc3RpbWF0b3IiIHRhcmdldD0iX3RvcCI+R2V0IGEgbGl2ZSBxdW90ZTwvYT4KICAgICAgICAgIDxhIGhyZWY9IndlYnNpdGUuaHRtbCNlc3RpbWF0b3IiIHRhcmdldD0iX3RvcCI+VHJhY2sgYSBqb2I8L2E+CiAgICAgICAgICA8YSBocmVmPSJ3ZWJzaXRlLmh0bWwjaG93IiB0YXJnZXQ9Il90b3AiPkZBUTwvYT4KICAgICAgICAgIDxhIGhyZWY9InRlbDorMTUxMjY0OTQ1NjciPkNvbnRhY3QgdXM8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZvb3QtaCI+TGVnYWw8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmb290LWxpc3QiPgogICAgICAgICAgPGEgaHJlZj0idGVybXMuaHRtbCIgdGFyZ2V0PSJfdG9wIj5UZXJtczwvYT4KICAgICAgICAgIDxhIGhyZWY9InByaXZhY3kuaHRtbCIgdGFyZ2V0PSJfdG9wIj5Qcml2YWN5PC9hPgogICAgICAgICAgPGEgaHJlZj0iYWktZGlzY2xvc3VyZS5odG1sIiB0YXJnZXQ9Il90b3AiPkFJIGRpc2Nsb3N1cmU8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJmb290LWJvdHRvbSI+CiAgICAgIDxkaXY+wqkgMjAyNiBpbmZyYXN0cnVRdHVyZSwgSW5jLiDCtyBBdXN0aW4sIFRYIMK3IFNhbWUgY3Jldy4gU2hhcnBlciBuYW1lLjwvZGl2PgogICAgICA8ZGl2PnYyLjAgwrcgVGhlIFEgaXMgZm9yIFF1YWxpdHk8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Zvb3Rlcj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogIGNvbnN0IE5TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJzsKICBjb25zdCBzY2VuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY2VuZScpOwogIGNvbnN0IHJvYm90ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JvYm90Jyk7CiAgY29uc3QgcHJlZGljdGVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWRpY3RlZCcpOwogIGNvbnN0IHRyYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYWlsJyk7CiAgY29uc3QgdW5rbm93biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1bmtub3duJyk7CiAgY29uc3QgbG9nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7CiAgY29uc3QgY29uZk51bSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25mTnVtJyk7CiAgY29uc3QgY2hlY2twb2ludCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVja3BvaW50Jyk7CiAgY29uc3QgY3BRID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NwUScpOwogIGNvbnN0IGNwQXV0byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcEF1dG8nKTsKICBjb25zdCBjcENvbmZpcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3BDb25maXJtJyk7CiAgY29uc3QgY3BSZXJvdXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NwUmVyb3V0ZScpOwogIGNvbnN0IG1IdW1hbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtSHVtYW4nKTsKICBjb25zdCB0YXNrQnRucyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGFzay1idG4nKV07CgogIC8vIC0tLS0gZGV2aWNlcyAoYnVpbHQgaW50byB0aGUgbW9kZWwpIC0tLS0KICBjb25zdCBERVZJQ0VTID0gWwogICAge3g6MjAwLCB5OjM5MiwgbGFiZWw6J2xvY2snfSwgICAvLyBmcm9udCBkb29yCiAgICB7eDoxMjAsIHk6MTUwLCBsYWJlbDonbWVzaCd9LCAgIC8vIGxpdmluZwogICAge3g6Mjg1LCB5OjMwMCwgbGFiZWw6J21lc2gnfSwgICAvLyBvZmZpY2UKICAgIHt4OjQ3MCwgeToxMzAsIGxhYmVsOidjYW0nfSwgICAgLy8gcGF0aW8gY2FtCiAgICB7eDo1NjAsIHk6NDcwLCBsYWJlbDonY2FtJ30gICAgIC8vIHlhcmQgY2FtCiAgXTsKICBjb25zdCBkZXZMYXllciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkZXZpY2VzJyk7CiAgREVWSUNFUy5mb3JFYWNoKChkLGkpPT57CiAgICBjb25zdCByaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKE5TLCdjaXJjbGUnKTsKICAgIHJpbmcuc2V0QXR0cmlidXRlKCdjbGFzcycsJ2Rldi1yaW5nJyk7IHJpbmcuc2V0QXR0cmlidXRlKCdjeCcsZC54KTsgcmluZy5zZXRBdHRyaWJ1dGUoJ2N5JyxkLnkpOyByaW5nLnNldEF0dHJpYnV0ZSgncicsJzcnKTsKICAgIGNvbnN0IGRvdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywnY2lyY2xlJyk7CiAgICBkb3Quc2V0QXR0cmlidXRlKCdjbGFzcycsJ2RldicpOyBkb3Quc2V0QXR0cmlidXRlKCdjeCcsZC54KTsgZG90LnNldEF0dHJpYnV0ZSgnY3knLGQueSk7IGRvdC5zZXRBdHRyaWJ1dGUoJ3InLCczJyk7CiAgICBjb25zdCBwdWxzZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywnY2lyY2xlJyk7CiAgICBwdWxzZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywnZGV2LXB1bHNlJyk7IHB1bHNlLnNldEF0dHJpYnV0ZSgnY3gnLGQueCk7IHB1bHNlLnNldEF0dHJpYnV0ZSgnY3knLGQueSk7IHB1bHNlLnNldEF0dHJpYnV0ZSgncicsJzcnKTsKICAgIHB1bHNlLmlubmVySFRNTCA9IGA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJyIiB2YWx1ZXM9Ijc7MTM7NyIgZHVyPSIzcyIgYmVnaW49IiR7aSowLjR9cyIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiLz48YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiB2YWx1ZXM9Ii41OzA7LjUiIGR1cj0iM3MiIGJlZ2luPSIke2kqMC40fXMiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIi8+YDsKICAgIGRldkxheWVyLmFwcGVuZChyaW5nLCBwdWxzZSwgZG90KTsKICB9KTsKCiAgLy8gLS0tLSB0YXNrIGRlZmluaXRpb25zIC0tLS0KICAvLyBwYXRoOiBTVkcgcGF0aCBzdHJpbmcuIHVua25vd25BdDogZnJhY3Rpb24gYWxvbmcgcGF0aCB3aGVyZSBib3QgbWVldHMgdGhlIHVua25vd24gb2JqZWN0LgogIGZ1bmN0aW9uIHNlcnBlbnRpbmUoeDAseDEseXMpewogICAgbGV0IGQgPSBgTSAkezQxMn0gJHs0MjR9YDsgLy8gc3RhcnQgYXQgZG9jawogICAgZCArPSBgIEwgJHt4MH0gJHt5c1swXX1gOwogICAgbGV0IGxlZnQgPSB0cnVlOwogICAgeXMuZm9yRWFjaCgoeSk9PnsKICAgICAgZCArPSBgIEwgJHtsZWZ0P3gxOngwfSAke3l9YDsKICAgICAgLy8gc3RlcCBkb3duIGhhbmRsZWQgYnkgbmV4dCB5CiAgICAgIGxlZnQgPSAhbGVmdDsKICAgIH0pOwogICAgcmV0dXJuIGQ7CiAgfQoKICBjb25zdCBUQVNLUyA9IHsKICAgIG1vdzogewogICAgICBsYWJlbDogJ01vdyB0aGUgYmFjayBsYXduJywKICAgICAgLy8gYm91c3Ryb3BoZWRvbiBhY3Jvc3MgdGhlIG9wZW4gYmFjayBsYXduIChyaWdodCBvZiBob3VzZSwgY2xlYXIgb2Ygb2FrL2JlZC9wYXRpbykKICAgICAgZDogJ00gNDEyIDQyNCBMIDQxMCA0MTAgTCA2NjAgNDEwIEwgNjYwIDM2MCBMIDQxMCAzNjAgTCA0MTAgMzEwIEwgNjYwIDMxMCBMIDY2MCAyNjAgTCA0MTAgMjYwIEwgNDEwIDIzMCBMIDY2MCAyMzAgTCA0MTIgNDI0JywKICAgICAgZHVyOiAxMjAwMCwKICAgICAgdW5rbm93bkF0OiAwLjQ2LAogICAgICBjb25mOiA5NSwgbG93OiAzOCwKICAgICAgbG9nczogWwogICAgICAgIHtwOjAuMDAsIHQ6JzAwOjAwJywgdGV4dDonTG9hZGluZyBzcGF0aWFsIG1vZGVsIMK3IDEyNDAgQXVyb3JhIEF2ZSd9LAogICAgICAgIHtwOjAuMDQsIHQ6JzAwOjAxJywgdGV4dDonS25vd24gb2JqZWN0czogb2FrIChORSksIGZsb3dlciBiZWQgKFMpLCBwYXRpbyBzZXQnfSwKICAgICAgICB7cDowLjA4LCB0OicwMDowMicsIHRleHQ6J01vd2FibGUgcmVnaW9uOiAwLjQxIGFjcmUgwrcgNiBwYXNzZXMgcGxhbm5lZCd9LAogICAgICAgIHtwOjAuMTIsIHQ6JzAwOjAzJywgdGV4dDonUHJlZGljdGluZyByb3V0ZS4uLiA5NSUgY29uZmlkZW5jZScsIGNsczonJ30sCiAgICAgICAge3A6MC4yMCwgdDonMDA6MDUnLCB0ZXh0OidQYXNzIDEgb2YgNiDCtyBjdXR0aW5nJ30sCiAgICAgICAge3A6MC4zNCwgdDonMDA6MDgnLCB0ZXh0OidQYXNzIDIgb2YgNiDCtyBjbGVhcid9LAogICAgICAgIHtwOjAuNDUsIHQ6JzAwOjExJywgdGV4dDonTmV3IG9iamVjdCBvbiBwYXRoIMK3IG5vdCBpbiBtb2RlbCcsIGNsczond2Fybid9LAogICAgICAgIHtwOjAuNDU1LCB0OicwMDoxMScsIHRleHQ6J0NvbmZpZGVuY2UgZHJvcHBlZCB0byAzOCUnLCBjbHM6J3dhcm4nfSwKICAgICAgICB7cDowLjQ2LCB0OicwMDoxMScsIHRleHQ6J0hvbGRpbmcuIEVzY2FsYXRpbmcgdG8gaHVtYW4gKE5kdSknLCBjbHM6J2h1bWFuJ30sCiAgICAgICAge3A6MC41MCwgdDonUkVTVU1FJywgdGV4dDonSHVtYW4gY29uZmlybWVkOiBnYXJkZW4gaG9zZSwgc2FmZSB0byBza2lwJywgY2xzOidvayd9LAogICAgICAgIHtwOjAuNTIsIHQ6JzAwOjE0JywgdGV4dDonT2JqZWN0IGFkZGVkIHRvIG1vZGVsIMK3IHJvdXRpbmcgYXJvdW5kJywgY2xzOicnfSwKICAgICAgICB7cDowLjcwLCB0OicwMDoxOCcsIHRleHQ6J1Bhc3MgNCBvZiA2IMK3IGNsZWFyJ30sCiAgICAgICAge3A6MC45NiwgdDonMDA6MjQnLCB0ZXh0OidUYXNrIGNvbXBsZXRlIMK3IG1vZGVsIHVwZGF0ZWQgKCsxIG9iamVjdCknLCBjbHM6J29rJ30KICAgICAgXSwKICAgICAgY3BROiAnQSAxNi1pbmNoIG9iamVjdCBpcyBibG9ja2luZyBwYXNzIDMsIH4xMiBpbmNoZXMgb2ZmIHRoZSBwbGFubmVkIGxpbmUuIFRoZSBtb2RlbCBoYXMgbmV2ZXIgc2VlbiBpdCBoZXJlLiBNb3cgYXJvdW5kIGl0IG9yIHN0b3A/JwogICAgfSwKICAgIHBhdHJvbDogewogICAgICBsYWJlbDogJ0V2ZW5pbmcgc2VjdXJpdHkgcGF0cm9sJywKICAgICAgLy8gcGVyaW1ldGVyIGxvb3AganVzdCBvdXRzaWRlIHRoZSBob3VzZSwgc3dlZXBpbmcgdGhlIHlhcmQsIHBhdXNpbmcgbmVhciBnYXRlCiAgICAgIGQ6ICdNIDQxMiA0MjQgTCA0MTIgNTYgTCA2MCA1NiBMIDQ0IDQwMCBMIDE1MCA0NzAgTCA0MTIgNDcwIEwgNjYwIDQ3MCBMIDY4OCAzMzAgTCA2NjAgMjAwIEwgNTQwIDkyIEwgNDEyIDQyNCcsCiAgICAgIGR1cjogMTMwMDAsCiAgICAgIHVua25vd25BdDogMC43NCwKICAgICAgY29uZjogOTMsIGxvdzogMzEsCiAgICAgIGxvZ3M6IFsKICAgICAgICB7cDowLjAwLCB0OicwMDowMCcsIHRleHQ6J0xvYWRpbmcgc3BhdGlhbCBtb2RlbCDCtyBuaWdodCBwcm9maWxlJ30sCiAgICAgICAge3A6MC4wNSwgdDonMDA6MDEnLCB0ZXh0OidDYW1lcmFzIG9ubGluZTogMiDCtyBtZXNoIG5vZGVzOiAyIMK3IGxvY2s6IGFybWVkJ30sCiAgICAgICAge3A6MC4xMCwgdDonMDA6MDInLCB0ZXh0OidQcmVkaWN0aW5nIHBlcmltZXRlciBsb29wLi4uIDkzJSBjb25maWRlbmNlJ30sCiAgICAgICAge3A6MC4zMCwgdDonMDA6MDUnLCB0ZXh0OidOb3J0aCB3YWxsIGNsZWFyIMK3IGNyb3NzLWNoZWNraW5nIHBhdGlvIGNhbSd9LAogICAgICAgIHtwOjAuNTUsIHQ6JzAwOjA5JywgdGV4dDonRHJpdmV3YXkgY2xlYXIgwrcgbG9jayBjb25maXJtZWQgYXJtZWQnfSwKICAgICAgICB7cDowLjcyLCB0OicwMDoxMycsIHRleHQ6J01vdGlvbiBhdCBzaWRlIGdhdGUgwrcgbm90IG1hdGNoZWQgdG8gbW9kZWwnLCBjbHM6J3dhcm4nfSwKICAgICAgICB7cDowLjczLCB0OicwMDoxMycsIHRleHQ6J0NvbmZpZGVuY2UgZHJvcHBlZCB0byAzMSUnLCBjbHM6J3dhcm4nfSwKICAgICAgICB7cDowLjc0LCB0OicwMDoxMycsIHRleHQ6J0hvbGRpbmcgYXQgZ2F0ZS4gRXNjYWxhdGluZyB0byBodW1hbiAoTmR1KScsIGNsczonaHVtYW4nfSwKICAgICAgICB7cDowLjc4LCB0OidSRVNVTUUnLCB0ZXh0OidIdW1hbiBjb25maXJtZWQ6IG5laWdoYm9yXCdzIGNhdC4gU3RhbmQgZG93bicsIGNsczonb2snfSwKICAgICAgICB7cDowLjgyLCB0OicwMDoxNicsIHRleHQ6J1Jlc3VtaW5nIGxvb3AgwrcgbG9nZ2VkIGZvciByZXZpZXcnLCBjbHM6Jyd9LAogICAgICAgIHtwOjAuOTcsIHQ6JzAwOjIxJywgdGV4dDonUGF0cm9sIGNvbXBsZXRlIMK3IGFsbCB6b25lcyBjbGVhcicsIGNsczonb2snfQogICAgICBdLAogICAgICBjcFE6ICdIZWF0IHNpZ25hdHVyZSBhdCB0aGUgc2lkZSBnYXRlLCBtb3ZpbmcsIHRvbyBzbWFsbCB0byBjbGFzc2lmeS4gQ291bGQgYmUgYW4gYW5pbWFsLCBjb3VsZCBiZSBhIHBlcnNvbiBjcm91Y2hpbmcuIFdha2UgeW91LCBvciBrZWVwIHdhdGNoaW5nPycKICAgIH0sCiAgICBkZWxpdmVyOiB7CiAgICAgIGxhYmVsOiAnQ2FycnkgdGhlIHBhY2thZ2UgdG8gdGhlIGRvb3InLAogICAgICBkOiAnTSA0MTIgNDI0IEwgMzAwIDQ3MCBMIDE5NSA0NzAgTCAxOTUgNDA4IEwgMjEyIDQwMCBMIDIxNCA0MDInLAogICAgICBkdXI6IDgwMDAsCiAgICAgIHVua25vd25BdDogMC45MywKICAgICAgY29uZjogOTYsIGxvdzogNDQsCiAgICAgIGxvZ3M6IFsKICAgICAgICB7cDowLjAwLCB0OicwMDowMCcsIHRleHQ6J0xvYWRpbmcgc3BhdGlhbCBtb2RlbCDCtyBhcHByb2FjaDogZnJvbnQgZG9vcid9LAogICAgICAgIHtwOjAuMDgsIHQ6JzAwOjAxJywgdGV4dDonUGFyY2VsOiAxNCBsYiDCtyAyMiDDlyAxNiDDlyAxMCBpbid9LAogICAgICAgIHtwOjAuMTYsIHQ6JzAwOjAyJywgdGV4dDonUHJlZGljdGluZyByb3V0ZSB0byBkb29yLi4uIDk2JSBjb25maWRlbmNlJ30sCiAgICAgICAge3A6MC40NSwgdDonMDA6MDQnLCB0ZXh0OidDcm9zc2luZyBkcml2ZXdheSDCtyBwYXRoIGNsZWFyJ30sCiAgICAgICAge3A6MC43MiwgdDonMDA6MDUnLCB0ZXh0OidPbiB0aGUgZnJvbnQgd2FsayDCtyBhcHByb2FjaGluZyB0aGUgc3RlcCd9LAogICAgICAgIHtwOjAuOTEsIHQ6JzAwOjA3JywgdGV4dDonRG9vciBtYXQgb2NjdXBpZWQgwrcgb2JqZWN0IG5vdCBpbiBtb2RlbCcsIGNsczond2Fybid9LAogICAgICAgIHtwOjAuOTIsIHQ6JzAwOjA3JywgdGV4dDonQ29uZmlkZW5jZSBkcm9wcGVkIHRvIDQ0JScsIGNsczond2Fybid9LAogICAgICAgIHtwOjAuOTMsIHQ6JzAwOjA3JywgdGV4dDonSG9sZGluZyBhdCBzdGVwLiBFc2NhbGF0aW5nIHRvIGh1bWFuIChOZHUpJywgY2xzOidodW1hbid9LAogICAgICAgIHtwOjAuOTYsIHQ6J1JFU1VNRScsIHRleHQ6J0h1bWFuIGNvbmZpcm1lZDogZXhpc3RpbmcgcGFyY2VsLiBTZXQgYmVzaWRlIGl0JywgY2xzOidvayd9LAogICAgICAgIHtwOjAuOTksIHQ6JzAwOjA5JywgdGV4dDonRGVsaXZlcmVkIMK3IHBob3RvIHNlbnQgdG8gaG9tZW93bmVyJywgY2xzOidvayd9CiAgICAgIF0sCiAgICAgIGNwUTogJ1NvbWV0aGluZyBpcyBhbHJlYWR5IG9uIHRoZSBkb29ybWF0IHdoZXJlIHRoZSBkcm9wIHBvaW50IGlzLiBTdGFjayBvbiB0b3AsIG9yIHBsYWNlIGl0IHRvIHRoZSBzaWRlPycKICAgIH0KICB9OwoKICAvLyAtLS0tIGFuaW1hdGlvbiBzdGF0ZSAtLS0tCiAgbGV0IHJhZiA9IG51bGwsIGN1cnJlbnQgPSBudWxsLCBwYXVzZWQgPSBmYWxzZSwgcmVzb2x2ZWQgPSBmYWxzZTsKICBsZXQgZWxhcHNlZCA9IDAsIGxhc3RUcyA9IDAsIGF1dG9UaW1lciA9IG51bGwsIGF1dG9MZWZ0ID0gMCwgYXV0b0ludGVydmFsID0gbnVsbDsKICBsZXQgZW1pdHRlZCA9IG5ldyBTZXQoKTsKCiAgZnVuY3Rpb24gY2xlYXJSdW4oKXsKICAgIGlmIChyYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7IHJhZiA9IG51bGw7CiAgICBpZiAoYXV0b1RpbWVyKSBjbGVhclRpbWVvdXQoYXV0b1RpbWVyKTsKICAgIGlmIChhdXRvSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwoYXV0b0ludGVydmFsKTsKICAgIHBhdXNlZCA9IGZhbHNlOyByZXNvbHZlZCA9IGZhbHNlOyBlbGFwc2VkID0gMDsgbGFzdFRzID0gMDsgZW1pdHRlZCA9IG5ldyBTZXQoKTsKICAgIHVua25vd24uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOwogICAgY2hlY2twb2ludC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7CiAgICByb2JvdC5zdHlsZS5vcGFjaXR5ID0gJzAnOwogICAgcHJlZGljdGVkLnNldEF0dHJpYnV0ZSgnZCcsJycpOwogICAgdHJhaWwuc2V0QXR0cmlidXRlKCdkJywnJyk7CiAgfQoKICBmdW5jdGlvbiBzZXRDb25mKHYsIGxvdyl7CiAgICBjb25mTnVtLnRleHRDb250ZW50ID0gTWF0aC5yb3VuZCh2KSArICclJzsKICAgIGNvbmZOdW0uY2xhc3NMaXN0LnRvZ2dsZSgnbG93JywgISFsb3cpOwogIH0KCiAgZnVuY3Rpb24gYWRkTG9nKGxpbmUpewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICBkaXYuY2xhc3NOYW1lID0gJ2xvZy1saW5lJyArIChsaW5lLmNscyA/ICcgJyArIGxpbmUuY2xzIDogJycpOwogICAgZGl2LmlubmVySFRNTCA9IGA8c3BhbiBjbGFzcz0idCI+JHtsaW5lLnR9PC9zcGFuPjxzcGFuPiR7bGluZS50ZXh0fTwvc3Bhbj5gOwogICAgbG9nRWwuYXBwZW5kKGRpdik7CiAgICBsb2dFbC5zY3JvbGxUb3AgPSBsb2dFbC5zY3JvbGxIZWlnaHQ7CiAgfQoKICBmdW5jdGlvbiBzdGFydCh0YXNrS2V5KXsKICAgIGNsZWFyUnVuKCk7CiAgICBjdXJyZW50ID0gVEFTS1NbdGFza0tleV07CiAgICBsb2dFbC5pbm5lckhUTUwgPSAnJzsKICAgIHRhc2tCdG5zLmZvckVhY2goYiA9PiBiLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWFjdGl2ZScsIGIuZGF0YXNldC50YXNrID09PSB0YXNrS2V5KSk7CiAgICBzZXRDb25mKGN1cnJlbnQuY29uZiwgZmFsc2UpOwoKICAgIC8vIHBsYWNlIHVua25vd24gb2JqZWN0CiAgICAvLyBwbGFubmluZyBwaGFzZTogZHJhdyBwcmVkaWN0ZWQgcGF0aAogICAgcHJlZGljdGVkLnNldEF0dHJpYnV0ZSgnZCcsIGN1cnJlbnQuZCk7CiAgICBjb25zdCB0b3RhbCA9IHByZWRpY3RlZC5nZXRUb3RhbExlbmd0aCgpOwogICAgLy8gcG9zaXRpb24gdGhlIHVua25vd24gb2JqZWN0IGV4YWN0bHkgd2hlcmUgdGhlIHJvYm90IHdpbGwgcGF1c2UKICAgIGNvbnN0IHVwdCA9IHByZWRpY3RlZC5nZXRQb2ludEF0TGVuZ3RoKHRvdGFsICogY3VycmVudC51bmtub3duQXQpOwogICAgdW5rbm93bi5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHt1cHQueC0yM30sICR7dXB0LnktMTd9KWApOwogICAgcHJlZGljdGVkLnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7CiAgICBwcmVkaWN0ZWQuc3R5bGUuc3Ryb2tlRGFzaGFycmF5ID0gdG90YWw7CiAgICBwcmVkaWN0ZWQuc3R5bGUuc3Ryb2tlRGFzaG9mZnNldCA9IHRvdGFsOwogICAgLy8gZm9yY2UgcmVmbG93CiAgICBwcmVkaWN0ZWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBwcmVkaWN0ZWQuc3R5bGUudHJhbnNpdGlvbiA9ICdzdHJva2UtZGFzaG9mZnNldCAxLjFzIGVhc2UnOwogICAgcHJlZGljdGVkLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSAnMCc7CgogICAgYWRkTG9nKGN1cnJlbnQubG9nc1swXSk7IGVtaXR0ZWQuYWRkKDApOwogICAgLy8gYmVnaW4gcnVubmluZyBhZnRlciB0aGUgcGxhbiBpcyBkcmF3bgogICAgc2V0VGltZW91dCgoKT0+ewogICAgICBpZiAoY3VycmVudCAhPT0gVEFTS1NbdGFza0tleV0pIHJldHVybjsKICAgICAgdHJhaWwuc2V0QXR0cmlidXRlKCdkJywgY3VycmVudC5kKTsKICAgICAgLy8gZGFzaGVkIHByZWRpY3RlZCBmYWRlcyB0byBhIGZhaW50IGd1aWRlCiAgICAgIHByZWRpY3RlZC5zdHlsZS50cmFuc2l0aW9uID0gJ3N0cm9rZS1kYXNob2Zmc2V0IDEuMXMgZWFzZSwgb3BhY2l0eSAuNnMnOwogICAgICBwcmVkaWN0ZWQuc3R5bGUub3BhY2l0eSA9ICcuMzUnOwogICAgICBwcmVkaWN0ZWQuc3R5bGUuc3Ryb2tlRGFzaGFycmF5ID0gJzQgOCc7CiAgICAgIHJvYm90LnN0eWxlLm9wYWNpdHkgPSAnMSc7CiAgICAgIGxhc3RUcyA9IHBlcmZvcm1hbmNlLm5vdygpOwogICAgICByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7CiAgICB9LCAxMTUwKTsKICB9CgogIGZ1bmN0aW9uIGxvb3AodHMpewogICAgaWYgKCFjdXJyZW50KSByZXR1cm47CiAgICBjb25zdCBkdCA9IHRzIC0gbGFzdFRzOyBsYXN0VHMgPSB0czsKICAgIGlmICghcGF1c2VkKSBlbGFwc2VkICs9IGR0OwogICAgbGV0IHAgPSBNYXRoLm1pbihlbGFwc2VkIC8gY3VycmVudC5kdXIsIDEpOwoKICAgIC8vIHBhdXNlIGV4YWN0bHkgYXQgdGhlIHVua25vd24gYmVhdCB1bnRpbCByZXNvbHZlZAogICAgaWYgKCFyZXNvbHZlZCAmJiBwID49IGN1cnJlbnQudW5rbm93bkF0KSB7CiAgICAgIHAgPSBjdXJyZW50LnVua25vd25BdDsKICAgICAgaWYgKCFwYXVzZWQpIHRyaWdnZXJDaGVja3BvaW50KCk7CiAgICB9CgogICAgLy8gcG9zaXRpb24gcm9ib3QgKyByZXZlYWwgdHJhaWwKICAgIGNvbnN0IHRvdGFsID0gdHJhaWwuZ2V0VG90YWxMZW5ndGgoKTsKICAgIGNvbnN0IGxlbiA9IHRvdGFsICogcDsKICAgIGNvbnN0IHB0ID0gdHJhaWwuZ2V0UG9pbnRBdExlbmd0aChsZW4pOwogICAgY29uc3QgYWhlYWQgPSB0cmFpbC5nZXRQb2ludEF0TGVuZ3RoKE1hdGgubWluKGxlbiArIDQsIHRvdGFsKSk7CiAgICBjb25zdCBhbmcgPSBNYXRoLmF0YW4yKGFoZWFkLnkgLSBwdC55LCBhaGVhZC54IC0gcHQueCkgKiAxODAgLyBNYXRoLlBJOwogICAgcm9ib3Quc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7cHQueH0sICR7cHQueX0pIHJvdGF0ZSgke2FuZ30pYCk7CiAgICB0cmFpbC5zdHlsZS5zdHJva2VEYXNoYXJyYXkgPSB0b3RhbDsKICAgIHRyYWlsLnN0eWxlLnN0cm9rZURhc2hvZmZzZXQgPSB0b3RhbCAtIGxlbjsKCiAgICAvLyBlbWl0IGxvZ3MKICAgIGN1cnJlbnQubG9ncy5mb3JFYWNoKChsaW5lLCBpKT0+ewogICAgICBpZiAoIWVtaXR0ZWQuaGFzKGkpICYmIHAgPj0gbGluZS5wICYmIGxpbmUudCAhPT0gJ1JFU1VNRScpIHsgYWRkTG9nKGxpbmUpOyBlbWl0dGVkLmFkZChpKTsgfQogICAgfSk7CgogICAgLy8gY29uZmlkZW5jZSBkaXAgYXBwcm9hY2hpbmcgdGhlIGJlYXQKICAgIGlmICghcmVzb2x2ZWQgJiYgcCA+PSBjdXJyZW50LnVua25vd25BdCAtIDAuMDYpIHsKICAgICAgY29uc3QgZGlwVCA9IE1hdGgubWluKChwIC0gKGN1cnJlbnQudW5rbm93bkF0IC0gMC4wNikpIC8gMC4wNiwgMSk7CiAgICAgIHNldENvbmYoY3VycmVudC5jb25mIC0gZGlwVCAqIChjdXJyZW50LmNvbmYgLSBjdXJyZW50LmxvdyksIHRydWUpOwogICAgfQoKICAgIGlmIChwID49IDEpIHsgZmluaXNoKCk7IHJldHVybjsgfQogICAgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOwogIH0KCiAgZnVuY3Rpb24gdHJpZ2dlckNoZWNrcG9pbnQoKXsKICAgIHBhdXNlZCA9IHRydWU7CiAgICB1bmtub3duLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsKICAgIGNwUS50ZXh0Q29udGVudCA9IGN1cnJlbnQuY3BROwogICAgc2V0Q29uZihjdXJyZW50LmxvdywgdHJ1ZSk7CiAgICBzZXRUaW1lb3V0KCgpPT4gY2hlY2twb2ludC5jbGFzc0xpc3QuYWRkKCdzaG93JyksIDI1MCk7CiAgICAvLyBhdXRvLXJlc29sdmUgY291bnRkb3duCiAgICBhdXRvTGVmdCA9IDQ7CiAgICBjcEF1dG8udGV4dENvbnRlbnQgPSBgYXV0by1yZXNvbHZpbmcgaW4gJHthdXRvTGVmdH1zYDsKICAgIGNwQXV0by5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGF1dG9JbnRlcnZhbCA9IHNldEludGVydmFsKCgpPT57CiAgICAgIGF1dG9MZWZ0LS07CiAgICAgIGNwQXV0by50ZXh0Q29udGVudCA9IGF1dG9MZWZ0ID4gMCA/IGBhdXRvLXJlc29sdmluZyBpbiAke2F1dG9MZWZ0fXNgIDogJ3Jlc29sdmluZy4uLic7CiAgICAgIGlmIChhdXRvTGVmdCA8PSAwKSBjbGVhckludGVydmFsKGF1dG9JbnRlcnZhbCk7CiAgICB9LCAxMDAwKTsKICAgIGF1dG9UaW1lciA9IHNldFRpbWVvdXQoKCk9PiByZXNvbHZlQ2hlY2twb2ludChmYWxzZSksIDQwMDApOwogIH0KCiAgZnVuY3Rpb24gcmVzb2x2ZUNoZWNrcG9pbnQocmVyb3V0ZWQpewogICAgaWYgKHJlc29sdmVkKSByZXR1cm47CiAgICByZXNvbHZlZCA9IHRydWU7CiAgICBpZiAoYXV0b1RpbWVyKSBjbGVhclRpbWVvdXQoYXV0b1RpbWVyKTsKICAgIGlmIChhdXRvSW50ZXJ2YWwpIGNsZWFySW50ZXJ2YWwoYXV0b0ludGVydmFsKTsKICAgIGNoZWNrcG9pbnQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpOwogICAgLy8gYnVtcCBodW1hbi1pbi1sb29wIGNvdW50ZXIKICAgIG1IdW1hbi50ZXh0Q29udGVudCA9IChwYXJzZUludChtSHVtYW4udGV4dENvbnRlbnQsMTApICsgMSk7CiAgICAvLyBlbWl0IHRoZSBSRVNVTUUgbG9nIGxpbmUKICAgIGNvbnN0IHJlc3VtZUxpbmUgPSBjdXJyZW50LmxvZ3MuZmluZChsID0+IGwudCA9PT0gJ1JFU1VNRScpOwogICAgaWYgKHJlc3VtZUxpbmUpIHsKICAgICAgaWYgKHJlcm91dGVkKSBhZGRMb2coe3Q6J1JFU1VNRScsIHRleHQ6J0h1bWFuIGNob3NlIHJlcm91dGUgwrcgcGxhbm5pbmcgbmV3IGxpbmUnLCBjbHM6J2h1bWFuJ30pOwogICAgICBhZGRMb2cocmVzdW1lTGluZSk7CiAgICB9CiAgICAvLyByZWNvdmVyIGNvbmZpZGVuY2UKICAgIGxldCBjID0gY3VycmVudC5sb3c7IGNvbnN0IHRhcmdldCA9IGN1cnJlbnQuY29uZiAtIDQ7CiAgICBjb25zdCByZWMgPSBzZXRJbnRlcnZhbCgoKT0+ewogICAgICBjICs9ICh0YXJnZXQgLSBjKSAqIDAuMjU7CiAgICAgIHNldENvbmYoYywgYyA8IDcwKTsKICAgICAgaWYgKHRhcmdldCAtIGMgPCAxKSB7IHNldENvbmYodGFyZ2V0LCBmYWxzZSk7IGNsZWFySW50ZXJ2YWwocmVjKTsgfQogICAgfSwgNDApOwogICAgc2V0VGltZW91dCgoKT0+eyB1bmtub3duLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsgfSwgNjAwKTsKICAgIC8vIHJlc3VtZSBtb3Rpb24KICAgIHBhdXNlZCA9IGZhbHNlOyBsYXN0VHMgPSBwZXJmb3JtYW5jZS5ub3coKTsKICAgIGlmICghcmFmKSByYWYgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7CiAgfQoKICBmdW5jdGlvbiBmaW5pc2goKXsKICAgIGlmIChyYWYpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7IHJhZiA9IG51bGw7CiAgICByb2JvdC5xdWVyeVNlbGVjdG9yKCcucm9ib3QtaGFsbycpLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnIzM2QzI4QicpOwogICAgc2V0Q29uZihjdXJyZW50LmNvbmYsIGZhbHNlKTsKICB9CgogIGNwQ29uZmlybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT4gcmVzb2x2ZUNoZWNrcG9pbnQoZmFsc2UpKTsKICBjcFJlcm91dGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+IHJlc29sdmVDaGVja3BvaW50KHRydWUpKTsKICB0YXNrQnRucy5mb3JFYWNoKGIgPT4gYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT4gc3RhcnQoYi5kYXRhc2V0LnRhc2spKSk7Cn0pKCk7Cjwvc2NyaXB0PgoKPC9ib2R5Pgo8L2h0bWw+Cg==
Leave a Reply