We Build Ai
For Your Needs!
-
Ai Workflow Enhancement & Automation
-
Ai Scaled Marketing & Advertisement
-
Ai Phone and CRM Staff
-
Ai Training and Education
-
Ai Opportunity Scoping
-
Ai Workflow Enhancement & Automation
-
Ai Scaled Marketing & Advertisement
-
Ai Phone and CRM Staff
-
Ai Training and Education
-
Ai Opportunity Scoping
Lets Discuss Your Needs
Select a Date
Select a Time Slot
Enter Your Details
Select Time Zone
Test Post
YGBgaHRtbAo8IS0tIFN0YXJ0IG9mIEludGVyYWN0aXZlIEFuYWx5c2lzIC0tPgo8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1hbmFseXNpcy1jb250YWluZXIiIGlkPSJoZHJfYW5hbHlzaXNfY29udGFpbmVyIj4KPCEtLSBDU1MgU1RZTEVTIC0gU2NvcGVkIHRvIHRoaXMgY29udGFpbmVyIHRvIGF2b2lkIGNvbmZsaWN0cyAtLT4KPHN0eWxlPgpAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Sb2JvdG86d2dodEA0MDA7NzAwJmRpc3BsYXk9c3dhcCcpOwoKI2hkcl9hbmFseXNpc19jb250YWluZXIgewogICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGNvbG9yOiAjMDAwOwogICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtYXgtd2lkdGg6IDkwMHB4OwogICAgbWFyZ2luOiA0MHB4IGF1dG87CiAgICBib3JkZXI6IDJweCBzb2xpZCAjMDAwOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2JhKDAsMCwwLDAuMSk7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgI2hkcl9hbmFseXNpc19jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgICAgbWFyZ2luOiAyMHB4IGF1dG87CiAgICB9Cn0KCi8qIC0tLSBUeXBvZ3JhcGh5IC0tLSAqLwojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciBoMSB7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzAwMDsKICAgIHBhZGRpbmctYm90dG9tOiAxMHB4Owp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIGgyIHsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBtYXJnaW4tdG9wOiA0MHB4OwogICAgbWFyZ2luLWJvdHRvbTogMjBweDsKICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2VlZTsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciBoMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbWFyZ2luLXRvcDogMzBweDsKICAgIG1hcmdpbi1ib3R0b206IDE1cHg7CiAgICBjb2xvcjogIzMzMzsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciBwIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIG1hcmdpbi1ib3R0b206IDE1cHg7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLm1ldGEtaW5mbyB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBjb2xvcjogIzY2NjsKICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OwogICAgcGFkZGluZzogMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgIzY2NjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAjaGRyX2FuYWx5c2lzX2NvbnRhaW5lciBoMSB7IGZvbnQtc2l6ZTogMjhweDsgfQogICAgI2hkcl9hbmFseXNpc19jb250YWluZXIgaDIgeyBmb250LXNpemU6IDIycHg7IH0KICAgICNoZHJfYW5hbHlzaXNfY29udGFpbmVyIGgzIHsgZm9udC1zaXplOiAxOHB4OyB9Cn0KCi8qIC0tLSBJbnRlcmFjdGl2ZSBFbGVtZW50cyAtLS0gKi8KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmN0YS1idXR0b24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogMTJweCAyNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGJvcmRlcjogMnB4IHNvbGlkICMwMDA7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuM3MgZWFzZSwgY29sb3IgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY3RhLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY3RhLXNlY3Rpb24gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICAgIHBhZGRpbmc6IDMwcHg7CiAgICBtYXJnaW4tdG9wOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAycHggc29saWQgI2RkZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY3RhLXNlY3Rpb24gaDIgewogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIG1hcmdpbi10b3A6IDA7Cn0KCi8qIC0tLSBJY29ucyAtLS0gKi8KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmljb24gewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmljb24tc3RyYXRlZ3k6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiAxNHB4OyBoZWlnaHQ6IDE0cHg7IGJvcmRlcjogMnB4IHNvbGlkICMwMDA7IGJvcmRlci1yYWRpdXM6IDUwJTsgcG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDBweDsgbGVmdDogMHB4Owp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5pY29uLXN0cmF0ZWd5OjphZnRlciB7CiAgICBjb250ZW50OiAnJzsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDEycHg7IGxlZnQ6IDEycHg7IHdpZHRoOiA4cHg7IGhlaWdodDogOHB4OyBiYWNrZ3JvdW5kOiAjMDAwOyBib3JkZXItcmFkaXVzOiA1MCU7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmljb24tcm9pOjpiZWZvcmUgewogICAgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyB3aWR0aDogNHB4OyBoZWlnaHQ6IDE2cHg7IGJhY2tncm91bmQ6ICMzMzM7IHBvc2l0aW9uOiByZWxhdGl2ZTsgdG9wOiAycHg7IGxlZnQ6IDJweDsgYm94LXNoYWRvdzogNXB4IC01cHggMCAjNjY2LCAxMHB4IC0xMHB4IDAgIzk5OTsKfQoKLyogLS0tIEFjY29yZGlvbiBmb3IgQ2FzZSBTdHVkaWVzIC0tLSAqLwojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuYWNjb3JkaW9uLWl0ZW0gewogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkICNlZWU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmFjY29yZGlvbi1idXR0b24gewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsKICAgIGNvbG9yOiAjMDAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMThweDsKICAgIHdpZHRoOiAxMDAlOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGJvcmRlcjogbm9uZTsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5hY2NvcmRpb24tYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWYxZjE7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmFjY29yZGlvbi1idXR0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcrJzsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGNvbG9yOiAjNjY2OwogICAgZmxvYXQ6IHJpZ2h0OwogICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5hY2NvcmRpb24tYnV0dG9uLmFjdGl2ZTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmFjY29yZGlvbi1jb250ZW50IHsKICAgIHBhZGRpbmc6IDAgMThweDsKICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgbWF4LWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuM3MgZWFzZS1vdXQ7Cn0KCi8qIC0tLSBIRFJMIEZsb3djaGFydCAtLS0gKi8KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmhkci1mbG93Y2hhcnQtY29udGFpbmVyIHsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5oZHItZmxvd2NoYXJ0LXN2ZyB7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogNzAwcHg7CiAgICBoZWlnaHQ6IGF1dG87Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmZsb3ctbm9kZSB7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlLWluLW91dDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuZmxvdy1ub2RlOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmZsb3ctdGV4dCB7CiAgICBmb250LWZhbWlseTogJ1JvYm90bycsIHNhbnMtc2VyaWY7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgZmlsbDogIzAwMDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuZmxvdy1zdWJ0ZXh0IHsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZmlsbDogIzY2NjsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAudG9vbHRpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgZm9udC1zaXplOiAxNHB4OwogICAgei1pbmRleDogMTAwOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4yczsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgbWF4LXdpZHRoOiAyNTBweDsKfQoKLyogLS0tIFBlcmZvcm1hbmNlIENvbXBhcmlzb24gVGFibGUgLS0tICovCiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5jb21wYXJpc29uLXRhYmxlIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgIG1hcmdpbi10b3A6IDIwcHg7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLmNvbXBhcmlzb24tdGFibGUgdGgsIAojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY29tcGFyaXNvbi10YWJsZSB0ZCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgcGFkZGluZzogMTJweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY29tcGFyaXNvbi10YWJsZSB0aCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY29tcGFyaXNvbi10YWJsZSAubW9kZWwtaGRyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlOGY1ZTk7CiAgICBmb250LXdlaWdodDogNzAwOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5jb21wYXJpc29uLXRhYmxlIC5tb2RlbC1kcWwgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZWJlZTsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY29tcGFyaXNvbi10YWJsZSAuaGlnaGxpZ2h0LWdvb2QgewogICAgY29sb3I6ICMzODhlM2M7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAuY29tcGFyaXNvbi10YWJsZSAuaGlnaGxpZ2h0LWJhZCB7CiAgICBjb2xvcjogI2QzMmYyZjsKfQoKLyogLS0tIFJPSSBDYWxjdWxhdG9yIC0tLSAqLwojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9pLWNhbGN1bGF0b3IgewogICAgYm9yZGVyOiAycHggc29saWQgIzAwMDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtYXJnaW4tdG9wOiAzMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2Y5ZjlmOSwgI2ZmZik7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLnJvaS1jYWxjdWxhdG9yIC5mb3JtLWdyb3VwIHsKICAgIG1hcmdpbi1ib3R0b206IDE1cHg7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLnJvaS1jYWxjdWxhdG9yIGxhYmVsIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luLWJvdHRvbTogNXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9pLWNhbGN1bGF0b3IgaW5wdXRbdHlwZT0icmFuZ2UiXSwKI2hkcl9hbmFseXNpc19jb250YWluZXIgLnJvaS1jYWxjdWxhdG9yIGlucHV0W3R5cGU9Im51bWJlciJdIHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNXB4OwogICAgYm9yZGVyOiAycHggc29saWQgIzAwMDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9pLWNhbGN1bGF0b3IgaW5wdXRbdHlwZT0ibnVtYmVyIl0gewogICAgcGFkZGluZzogMTBweDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9pLWNhbGN1bGF0b3IgLm91dHB1dC12YWx1ZSB7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6ICMzMzM7CiAgICBtYXJnaW4tbGVmdDogMTBweDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAjcm9pLXJlc3VsdCB7CiAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgcGFkZGluZzogMTVweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCAjMDAwOwp9CgovKiAtLS0gSW1wbGVtZW50YXRpb24gUm9hZG1hcCAtLS0gKi8KI2hkcl9hbmFseXNpc19jb250YWluZXIgLnJvYWRtYXAtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmc6IDIwcHggMDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9hZG1hcC1jb250YWluZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgd2lkdGg6IDRweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiAyMHB4Owp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5yb2FkbWFwLXN0ZXAgewogICAgcGFkZGluZzogMTBweCA0MHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZy1sZWZ0OiA2MHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5yb2FkbWFwLXN0ZXA6OmJlZm9yZSB7CiAgICBjb250ZW50OiAnJzsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAyNXB4OwogICAgaGVpZ2h0OiAyNXB4OwogICAgbGVmdDogOHB4OwogICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICBib3JkZXI6IDRweCBzb2xpZCAjMDAwOwogICAgdG9wOiAyMHB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgei1pbmRleDogMTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zczsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9hZG1hcC1zdGVwOmhvdmVyOjpiZWZvcmUgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9hZG1hcC1jb250ZW50IHsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKfQojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAucm9hZG1hcC1jb250ZW50IGgzIHsKICAgIG1hcmdpbi10b3A6IDA7Cn0KI2hkcl9hbmFseXNpc19jb250YWluZXIgLnJvYWRtYXAtZGV0YWlscyB7CiAgICBtYXgtaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRyYW5zaXRpb246IG1heC1oZWlnaHQgMC40cyBlYXNlLWluLW91dCwgcGFkZGluZyAwLjRzIGVhc2UtaW4tb3V0OwogICAgcGFkZGluZzogMCAxNXB4Owp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5yb2FkbWFwLXN0ZXAuYWN0aXZlIC5yb2FkbWFwLWRldGFpbHMgewogICAgbWF4LWhlaWdodDogNTAwcHg7CiAgICBwYWRkaW5nOiAxNXB4Owp9CgovKiAtLS0gRm9vdGVyIC0tLSAqLwojaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAub3dueW91cmFpLWZvb3RlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBtYXJnaW4tdG9wOiA1MHB4OwogICAgcGFkZGluZy10b3A6IDIwcHg7CiAgICBib3JkZXItdG9wOiAycHggc29saWQgI2VlZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiAjNjY2Owp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5vd255b3VyYWktZm9vdGVyIGEgewogICAgY29sb3I6ICMwMDA7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CiNoZHJfYW5hbHlzaXNfY29udGFpbmVyIC5vd255b3VyYWktZm9vdGVyIGE6aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgI2hkcl9hbmFseXNpc19jb250YWluZXIgKiwKICAjaGRyX2FuYWx5c2lzX2NvbnRhaW5lciAqOjpiZWZvcmUsCiAgI2hkcl9hbmFseXNpc19jb250YWluZXIgKjo6YWZ0ZXIgewogICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDsKICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IDEgIWltcG9ydGFudDsKICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50OwogICAgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvICFpbXBvcnRhbnQ7CiAgfQp9Cjwvc3R5bGU+Cgo8aDE+RW50ZXJwcmlzZSBBSSBBbmFseXNpczogQSBIaWVyYXJjaGljYWwgRGVlcCBSZWluZm9yY2VtZW50IExlYXJuaW5nIEZyYW1ld29yayBmb3IgTXVsdGktWWVhciBBc3NldCBNYW5hZ2VtZW50IFVuZGVyIEJ1ZGdldCBDb25zdHJhaW50czwvaDE+Cgo8ZGl2IGNsYXNzPSJtZXRhLWluZm8iPgogICAgPHA+PHN0cm9uZz5PcmlnaW5hbCBQYXBlcjo8L3N0cm9uZz4gSGllcmFyY2hpY2FsIERlZXAgUmVpbmZvcmNlbWVudCBMZWFybmluZyBGcmFtZXdvcmsgZm9yIE11bHRpLVllYXIgQXNzZXQgTWFuYWdlbWVudCBVbmRlciBCdWRnZXQgQ29uc3RyYWludHM8L3A+CiAgICA8cD48c3Ryb25nPkF1dGhvcnM6PC9zdHJvbmc+IEFtaXIgRmFyZCBhbmQgQXJub2xkIFguLVguIFl1YW48L3A+CiAgICA8cD48c3Ryb25nPk93bllvdXJBSS5jb20gQW5hbHlzaXM6PC9zdHJvbmc+IFRoaXMgYXJ0aWNsZSBwcm92aWRlcyBhbiBpbi1kZXB0aCBlbnRlcnByaXNlLWZvY3VzZWQgYW5hbHlzaXMgb2YgdGhlIHBhcGVyJ3MgZmluZGluZ3MuIFdlIHRyYW5zbGF0ZSBpdHMgcG93ZXJmdWwgYWNhZGVtaWMgY29uY2VwdHMgaW50byBhIHByYWN0aWNhbCBibHVlcHJpbnQgZm9yIGJ1c2luZXNzZXMgZmFjaW5nIGNvbXBsZXggcmVzb3VyY2UgYWxsb2NhdGlvbiBjaGFsbGVuZ2VzLCBkZW1vbnN0cmF0aW5nIGhvdyBjdXN0b20gQUkgc29sdXRpb25zIGNhbiBkcml2ZSBzaWduaWZpY2FudCwgc2NhbGFibGUgdmFsdWUuPC9wPgo8L2Rpdj4KCjxoMj5FeGVjdXRpdmUgU3VtbWFyeTogRnJvbSBBY2FkZW1pYyBUaGVvcnkgdG8gRW50ZXJwcmlzZSBSZWFsaXR5PC9oMj4KCjxwPkluIHRoZWlyIHBpdm90YWwgcmVzZWFyY2gsIEZhcmQgYW5kIFl1YW4gdGFja2xlIGEgcHJvYmxlbSB0aGF0IHJlc29uYXRlcyBkZWVwbHkgd2l0aGluIGFueSBsYXJnZS1zY2FsZSBlbnRlcnByaXNlOiA8c3Ryb25nPmhvdyB0byBtYWtlIG9wdGltYWwsIG11bHRpLXllYXIgc3RyYXRlZ2ljIGRlY2lzaW9ucyB1bmRlciBzdHJpY3QsIGNvbXBsZXggYnVkZ2V0IGNvbnN0cmFpbnRzLjwvc3Ryb25nPiBXaGlsZSB0aGVpciBmb2N1cyBpcyBvbiBpbmZyYXN0cnVjdHVyZSBhc3NldCBtYW5hZ2VtZW50LCB0aGUgY29yZSBjaGFsbGVuZ2UgaXMgdW5pdmVyc2FsLiBUcmFkaXRpb25hbCBtZXRob2RzIG9mdGVuIGZhaWwsIGVpdGhlciBieSBiZWluZyB0b28gc2ltcGxpc3RpYyBvciBieSBiZWNvbWluZyBjb21wdXRhdGlvbmFsbHkgaW50cmFjdGFibGUgYXMgdGhlIG51bWJlciBvZiB2YXJpYWJsZXMgKGFzc2V0cywgcHJvamVjdHMsIG1hcmtldGluZyBjaGFubmVscykgZ3Jvd3MuPC9wPgoKPHA+VGhlIHBhcGVyIGludHJvZHVjZXMgYSBncm91bmRicmVha2luZyBIaWVyYXJjaGljYWwgRGVlcCBSZWluZm9yY2VtZW50IExlYXJuaW5nIChIRFJMKSBmcmFtZXdvcmsgdGhhdCBlbGVnYW50bHkgc29sdmVzIHRoaXMgc2NhbGFiaWxpdHkgaXNzdWUuIEl0IGluZ2VuaW91c2x5IGRlY29tcG9zZXMgdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzIGludG8gdHdvIGludGVsbGlnZW50IEFJIGFnZW50czogYSBoaWdoLWxldmVsICJTdHJhdGVnaXN0IiB0aGF0IGFsbG9jYXRlcyB0aGUgYW5udWFsIGJ1ZGdldCwgYW5kIGEgbG93LWxldmVsICJPcGVyYXRpb25hbCBNYW5hZ2VyIiB0aGF0IHByaW9yaXRpemVzIHNwZWNpZmljIGFjdGlvbnMgd2l0aGluIHRoYXQgYnVkZ2V0LiBDcml0aWNhbGx5LCBhIGJ1aWx0LWluICJDb21wbGlhbmNlIEVuZ2luZSIgdXNpbmcgbGluZWFyIHByb2dyYW1taW5nIGVuc3VyZXMgZXZlcnkgZGVjaXNpb24gaXMgbm90IGp1c3Qgc21hcnQsIGJ1dCBhbHNvIDEwMCUgZmVhc2libGUgYW5kIGJ1ZGdldC1jb21wbGlhbnQuPC9wPgoKPHA+T3VyIGFuYWx5c2lzIGF0IE93bllvdXJBSS5jb20gY29uZmlybXMgdGhhdCB0aGlzIEhEUkwgYXBwcm9hY2ggaXMgbW9yZSB0aGFuIGFuIGFjYWRlbWljIGV4ZXJjaXNlOyBpdCdzIGEgYmx1ZXByaW50IGZvciB0aGUgbmV4dCBnZW5lcmF0aW9uIG9mIGVudGVycHJpc2UgQUkuIFRoZSByZXNlYXJjaCBkZW1vbnN0cmF0ZXMgc3VwZXJpb3IgcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIHNjYWxhYmlsaXR5IG92ZXIgY29udmVudGlvbmFsIG1ldGhvZHMuIEZvciBidXNpbmVzc2VzLCB0aGlzIHRyYW5zbGF0ZXMgdG8gbW9yZSByZWxpYWJsZSwgY29zdC1lZmZlY3RpdmUsIGFuZCBkYXRhLWRyaXZlbiBzdHJhdGVnaWMgcGxhbm5pbmcsIHVubG9ja2luZyBzaWduaWZpY2FudCBST0kgYnkgY29uc2lzdGVudGx5IGZpbmRpbmcgbmVhci1vcHRpbWFsIHNvbHV0aW9ucyB0byBwcm9ibGVtcyBwcmV2aW91c2x5IGRlZW1lZCB0b28gY29tcGxleCB0byBzb2x2ZSBlZmZpY2llbnRseS48L3A+Cgo8ZGl2IGNsYXNzPSJjdGEtc2VjdGlvbiI+CiAgICA8aDI+SXMgWW91ciBCdXNpbmVzcyBGYWNpbmcgYSBDb21wbGV4IFJlc291cmNlIEFsbG9jYXRpb24gUHV6emxlPzwvaDI+CiAgICA8cD5UaGlzIGZyYW1ld29yayBjYW4gYmUgY3VzdG9taXplZCBmb3IgcHJvamVjdCBwb3J0Zm9saW8gb3B0aW1pemF0aW9uLCBtYXJrZXRpbmcgYnVkZ2V0IGFsbG9jYXRpb24sIGFuZCBtb3JlLiBMZXQncyBleHBsb3JlIGhvdy48L3A+CiAgICA8YSBocmVmPSJodHRwczovL293bnlvdXJhaS5jb20vI0NhbGVuZGFyIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9ImN0YS1idXR0b24iPkJvb2sgYSBTdHJhdGVneSBTZXNzaW9uPC9hPgo8L2Rpdj4KCgo8aDI+RGVjb25zdHJ1Y3RpbmcgdGhlIEhEUkwgRnJhbWV3b3JrOiBBbiBFbnRlcnByaXNlIEJsdWVwcmludCBmb3IgQ29uc3RyYWluZWQgT3B0aW1pemF0aW9uPC9oMj4KPHA+VGhlIHRydWUgZ2VuaXVzIG9mIHRoZSBGYXJkIGFuZCBZdWFuIHBhcGVyIGxpZXMgaW4gaXRzIGFyY2hpdGVjdHVyZS4gSXQgbWlycm9ycyBob3cgYSB3ZWxsLXJ1biBvcmdhbml6YXRpb24gbWFrZXMgZGVjaXNpb25zOiBhIHN0cmF0ZWdpYyBsYXllciBzZXRzIGJ1ZGdldHMsIGFuIG9wZXJhdGlvbmFsIGxheWVyIGV4ZWN1dGVzLCBhbmQgYSBjb21wbGlhbmNlIGxheWVyIGVuc3VyZXMgcnVsZXMgYXJlIGZvbGxvd2VkLiBXZSd2ZSB2aXN1YWxpemVkIHRoaXMgYXMgYW4gaW50ZXJhY3RpdmUgZW50ZXJwcmlzZSB3b3JrZmxvdy48L3A+Cgo8ZGl2IGNsYXNzPSJoZHItZmxvd2NoYXJ0LWNvbnRhaW5lciI+CiAgICA8aDM+SW50ZXJhY3RpdmUgQUkgRGVjaXNpb24gV29ya2Zsb3c8L2gzPgogICAgPHA+SG92ZXIgb3ZlciBlYWNoIHN0YWdlIHRvIHVuZGVyc3RhbmQgaXRzIGVudGVycHJpc2UtbGV2ZWwgZnVuY3Rpb24uPC9wPgogICAgPHN2ZyBpZD0iaGRyLWZsb3djaGFydCIgY2xhc3M9Imhkci1mbG93Y2hhcnQtc3ZnIiB2aWV3Qm94PSIwIDAgNjAwIDI1MCIgYXJpYS1sYWJlbD0iSGllcmFyY2hpY2FsIERlZXAgUmVpbmZvcmNlbWVudCBMZWFybmluZyBmbG93Y2hhcnQgZm9yIGVudGVycHJpc2UgZGVjaXNpb24gbWFraW5nIj4KICAgICAgICA8IS0tIE5vZGVzIC0tPgogICAgICAgIDxnIGNsYXNzPSJmbG93LW5vZGUiIGRhdGEtdG9vbHRpcD0iVGhlIEFJJ3MgY29tcGxldGUgdmlldyBvZiB0aGUgYnVzaW5lc3MgbGFuZHNjYXBlOiBhc3NldCBjb25kaXRpb25zLCBtYXJrZXQgZGF0YSwgcmVtYWluaW5nIGJ1ZGdldCwgYW5kIHByb2plY3QgdGltZWxpbmVzLiBUaGlzIGlzIHRoZSAnc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCcgZm9yIHN0cmF0ZWdpYyBkZWNpc2lvbnMuIj4KICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9Ijg1IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjcwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJmbG93LXRleHQiPjEuIFN5c3RlbSBTdGF0ZTwvdGV4dD4KICAgICAgICAgICAgPHRleHQgeD0iNzAiIHk9IjEyNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9ImZsb3ctc3VidGV4dCI+KFRoZSAnQmlnIFBpY3R1cmUnKTwvdGV4dD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9ImZsb3ctbm9kZSIgZGF0YS10b29sdGlwPSJUaGUgJ0MtU3VpdGUgU3RyYXRlZ2lzdCcgQUkuIEl0IGFuYWx5emVzIHRoZSBzeXN0ZW0gc3RhdGUgYW5kIG1ha2VzIGEgaGlnaC1sZXZlbCBkZWNpc2lvbjogJ0hvdyBtdWNoIG9mIG91ciB0b3RhbCBtdWx0aS15ZWFyIGJ1ZGdldCBzaG91bGQgd2UgYWxsb2NhdGUgdGhpcyB5ZWFyPycgVGhpcyBpcyBhIGNydWNpYWwgdGVtcG9yYWwgdHJhZGUtb2ZmLiI+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2MCIgeT0iMjAiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiLz4KICAgICAgICAgICAgPHRleHQgeD0iMjIwIiB5PSI0NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9ImZsb3ctdGV4dCI+Mi4gQnVkZ2V0IFBsYW5uZXI8L3RleHQ+CiAgICAgICAgICAgIDx0ZXh0IHg9IjIyMCIgeT0iNjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJmbG93LXN1YnRleHQiPihUaGUgJ1N0cmF0ZWdpc3QnIEFJKTwvdGV4dD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9ImZsb3ctbm9kZSIgZGF0YS10b29sdGlwPSJUaGUgJ09wZXJhdGlvbmFsIE1hbmFnZXInIEFJLiBUYWtpbmcgdGhlIGJ1ZGdldCBmcm9tIHRoZSBTdHJhdGVnaXN0LCBpdCBkZWNpZGVzIHdoaWNoIHNwZWNpZmljIGFzc2V0cywgcHJvamVjdHMsIG9yIGNhbXBhaWducyB0byBmdW5kLiBJdCBnZW5lcmF0ZXMgYSBwcmlvcml0eSBsaXN0LCBub3QgYSBmaW5hbCBwbGFuLiI+CiAgICAgICAgICAgIDxyZWN0IHg9IjE2MCIgeT0iMTUwIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjIyMCIgeT0iMTc1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBjbGFzcz0iZmxvdy10ZXh0Ij4zLiBNYWludGVuYW5jZSBQbGFubmVyPC90ZXh0PgogICAgICAgICAgICA8dGV4dCB4PSIyMjAiIHk9IjE5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9ImZsb3ctc3VidGV4dCI+KFRoZSAnTWFuYWdlcicgQUkpPC90ZXh0PgogICAgICAgIDwvZz4KICAgICAgICA8ZyBjbGFzcz0iZmxvdy1ub2RlIiBkYXRhLXRvb2x0aXA9IlRoZSAnQ29tcGxpYW5jZSBFbmdpbmUnLiBUaGlzIGlzIHRoZSBwYXBlcidzIGtleSBpbm5vdmF0aW9uLiBJdCB0YWtlcyB0aGUgcHJpb3JpdHkgbGlzdCBhbmQgdGhlIGhhcmQgYnVkZ2V0IGFuZCB1c2VzIG9wdGltaXphdGlvbiAoTGluZWFyIFByb2dyYW1taW5nKSB0byBnZW5lcmF0ZSBhIGZpbmFsLCBhY3Rpb25hYmxlIHBsYW4gdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIHdpdGhpbiBhbGwgY29uc3RyYWludHMuIE5vIGJ1ZGdldCBvdmVycnVucy4iPgogICAgICAgICAgICA8cmVjdCB4PSIzMTAiIHk9Ijg1IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjYwIiByeD0iMTAiIGZpbGw9IiNmZmYiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIyIi8+CiAgICAgICAgICAgIDx0ZXh0IHg9IjM3MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBjbGFzcz0iZmxvdy10ZXh0Ij40LiBMUCBQcm9qZWN0aW9uPC90ZXh0PgogICAgICAgICAgICA8dGV4dCB4PSIzNzAiIHk9IjEyNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9ImZsb3ctc3VidGV4dCI+KFRoZSAnQ29tcGxpYW5jZSBFbmdpbmUnKTwvdGV4dD4KICAgICAgICA8L2c+CiAgICAgICAgPGcgY2xhc3M9ImZsb3ctbm9kZSIgZGF0YS10b29sdGlwPSJUaGUgQUkncyBkZWNpc2lvbiBpcyBleGVjdXRlZCBpbiB0aGUgcmVhbCB3b3JsZCBvciBhIHNpbXVsYXRpb24uIFRoZSBlbnZpcm9ubWVudCBzdGF0ZSBjaGFuZ2VzLCBhbmQgdGhlIGJ1c2luZXNzIGltcGFjdCAocGVyZm9ybWFuY2UsIGNvc3QsIGV0Yy4pIGlzIG1lYXN1cmVkLiI+CiAgICAgICAgICAgIDxyZWN0IHg9IjQ2MCIgeT0iODUiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjAiIHJ4PSIxMCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiLz4KICAgICAgICAgICAgPHRleHQgeD0iNTIwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJmbG93LXRleHQiPjUuIEFjdGlvbiAmIFJld2FyZDwvdGV4dD4KICAgICAgICAgICAgPHRleHQgeD0iNTIwIiB5PSIxMjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJmbG93LXN1YnRleHQiPihFeGVjdXRpb24gJiBGZWVkYmFjayk8L3RleHQ+CiAgICAgICAgPC9nPgogICAgICAgIDwhLS0gQXJyb3dzIC0tPgogICAgICAgIDxkZWZzPgogICAgICAgICAgICA8bWFya2VyIGlkPSJhcnJvd2hlYWQiIG1hcmtlcldpZHRoPSIxMCIgbWFya2VySGVpZ2h0PSI3IiByZWZYPSIwIiByZWZZPSIzLjUiIG9yaWVudD0iYXV0byI+CiAgICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjAgMCwgMTAgMy41LCAwIDciIGZpbGw9IiMwMDAiLz4KICAgICAgICAgICAgPC9tYXJrZXI+CiAgICAgICAgPC9kZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xMzAsMTE1IEwxNTUsNTUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYXJyb3doZWFkKSIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMzAsMTE1IEwxNTUsMTc1IiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93aGVhZCkiLz4KICAgICAgICA8cGF0aCBkPSJNMjgwLDUwIEwzMDUsOTAiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIGZpbGw9Im5vbmUiIG1hcmtlci1lbmQ9InVybCgjYXJyb3doZWFkKSIvPgogICAgICAgIDxwYXRoIGQ9Ik0yODAsMTgwIEwzMDUsMTQwIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMS41IiBmaWxsPSJub25lIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93aGVhZCkiLz4KICAgICAgICA8cGF0aCBkPSJNNDMwLDExNSBMNDYwLDExNSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjEuNSIgZmlsbD0ibm9uZSIgbWFya2VyLWVuZD0idXJsKCNhcnJvd2hlYWQpIi8+CiAgICAgICAgPHBhdGggZD0iTTUyMCwxNDUgUTUyMCwyMzAgNzAsMjMwIFEyMCwyMzAgMjAsMTQ1IiBzdHJva2U9IiM2NjYiIHN0cm9rZS13aWR0aD0iMS41IiBmaWxsPSJub25lIiBzdHJva2UtZGFzaGFycmF5PSI1LDUiIG1hcmtlci1lbmQ9InVybCgjYXJyb3doZWFkKSIvPgogICAgICAgIDx0ZXh0IHg9IjI5NSIgeT0iMjQwIiBmb250LXNpemU9IjEwcHgiIGZpbGw9IiM2NjYiPkxlYXJuaW5nIExvb3A6IFVwZGF0ZSBBSSBiYXNlZCBvbiByZXN1bHRzPC90ZXh0PgogICAgPC9zdmc+CiAgICA8ZGl2IGlkPSJmbG93Y2hhcnQtdG9vbHRpcCIgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjwvZGl2Pgo8L2Rpdj4KCjxoMj5LZXkgRmluZGluZ3MgUmVpbWFnaW5lZDogVGhlIEJ1c2luZXNzIFZhbHVlIG9mIFNjYWxhYmlsaXR5IGFuZCBTdGFiaWxpdHk8L2gyPgoKPHA+VGhlIHBhcGVycyByZXN1bHRzIHByb3ZpZGUgY29tcGVsbGluZyBldmlkZW5jZSBmb3Igd2h5IHRoaXMgaGllcmFyY2hpY2FsIGFwcHJvYWNoIGlzIHN1cGVyaW9yIGZvciBlbnRlcnByaXNlIHVzZS4gV2V2ZSByZWJ1aWx0IHRoZWlyIGZpbmRpbmdzIHRvIGhpZ2hsaWdodCB0aGUgYnVzaW5lc3MgaW1wbGljYXRpb25zLjwvcD4KCjxoMz5GaW5kaW5nIDE6IEhEUkwgVGFtZXMgRXhwb25lbnRpYWwgQ29tcGxleGl0eTwvaDM+CjxwPkEgc3RhbmRhcmQgQUkgKGxpa2UgRGVlcCBRLUxlYXJuaW5nLCBvciBEUUwpIG11c3QgY29uc2lkZXIgZXZlcnkgcG9zc2libGUgY29tYmluYXRpb24gb2YgYWN0aW9ucy4gVGhpcyBpcyBsaWtlIGEgbWFuYWdlciB0cnlpbmcgdG8gZXZhbHVhdGUgZXZlcnkgc2luZ2xlIHBvc3NpYmxlIHByb2plY3QgZnVuZGluZyBjb21iaW5hdGlvbml0IHF1aWNrbHkgYmVjb21lcyBpbXBvc3NpYmxlLiBIRFJMJ3MgdHdvLWxldmVsIGFwcHJvYWNoIGF2b2lkcyB0aGlzLiBUaGUgIlN0cmF0ZWdpc3QiIGhhcyBvbmUgc2ltcGxlIHRhc2sgKGRlY2lkZSBidWRnZXQpLCBhbmQgdGhlICJNYW5hZ2VyIiBoYXMgYSB0YXNrIHRoYXQgZ3Jvd3MgbGluZWFybHksIG5vdCBleHBvbmVudGlhbGx5LCB3aXRoIHRoZSBudW1iZXIgb2YgYXNzZXRzLjwvcD4KCjx0YWJsZSBjbGFzcz0iY29tcGFyaXNvbi10YWJsZSI+CiAgICA8Y2FwdGlvbj5UYWJsZSAxOiBTY2FsYWJpbGl0eSBDb21wYXJpc29uIChIRFJMIHZzLiBDb252ZW50aW9uYWwgRFFMKTwvY2FwdGlvbj4KICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD5OZXR3b3JrIFNpemUgKCMgb2YgQXNzZXRzKTwvdGg+CiAgICAgICAgICAgIDx0aD5NZXRob2Q8L3RoPgogICAgICAgICAgICA8dGg+QWN0aW9uIFNwYWNlIFNpemUgKENvbXBsZXhpdHkpPC90aD4KICAgICAgICAgICAgPHRoPlRyYWluaW5nIFRpbWUgKFNlY29uZHMsIEF2Zy4pPC90aD4KICAgICAgICAgICAgPHRoPlNvbHV0aW9uIFF1YWxpdHkgKEF2Zy4gT2JqZWN0aXZlIFZhbHVlKTwvdGg+CiAgICAgICAgPC90cj4KICAgIDwvdGhlYWQ+CiAgICA8dGJvZHk+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+MTA8L3RkPgogICAgICAgICAgICA8dGQgY2xhc3M9Im1vZGVsLWRxbCI+RFFMPC90ZD4KICAgICAgICAgICAgPHRkPjIwIChmaWx0ZXJlZCBmcm9tIDEsMDI0KTwvdGQ+CiAgICAgICAgICAgIDx0ZD4xMTggwrEgNDwvdGQ+CiAgICAgICAgICAgIDx0ZD4xLjQ3NDQ8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9Im1vZGVsLWhkciI+SERSTDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iaGlnaGxpZ2h0LWdvb2QiPjEgKyAxMCAoTGluZWFyKTwvdGQ+CiAgICAgICAgICAgIDx0ZD4yNjQgwrEgNjwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iaGlnaGxpZ2h0LWdvb2QiPjEuNDcyMyAoTmVhci1PcHRpbWFsKTwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4xNTwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0ibW9kZWwtZHFsIj5EUUw8L3RkPgogICAgICAgICAgICA8dGQ+MzY0IChmaWx0ZXJlZCBmcm9tIDMyLDc2OCk8L3RkPgogICAgICAgICAgICA8dGQ+MTc2IMKxIDU8L3RkPgogICAgICAgICAgICA8dGQ+MS42NjI5PC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJtb2RlbC1oZHIiPkhEUkw8L3RkPgogICAgICAgICAgICA8dGQgY2xhc3M9ImhpZ2hsaWdodC1nb29kIj4xICsgMTUgKExpbmVhcik8L3RkPgogICAgICAgICAgICA8dGQ+MzY2IMKxIDY8L3RkPgogICAgICAgICAgICA8dGQgY2xhc3M9ImhpZ2hsaWdodC1nb29kIj4xLjUzNjggKH44JSBCZXR0ZXIpPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiPjIwPC90ZD4KICAgICAgICAgICAgPHRkIGNsYXNzPSJtb2RlbC1kcWwiPkRRTDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iaGlnaGxpZ2h0LWJhZCI+Nyw0NDggKGZpbHRlcmVkIGZyb20gPjFNKTwvdGQ+CiAgICAgICAgICAgIDx0ZD41NzAgwrEgNTwvdGQ+CiAgICAgICAgICAgIDx0ZD4xLjgxMjg8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9Im1vZGVsLWhkciI+SERSTDwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iaGlnaGxpZ2h0LWdvb2QiPjEgKyAyMCAoTGluZWFyKTwvdGQ+CiAgICAgICAgICAgIDx0ZD41ODUgwrEgNzwvdGQ+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iaGlnaGxpZ2h0LWdvb2QiPjEuNTM3NSAofjE1JSBCZXR0ZXIpPC90ZD4KICAgICAgICA8L3RyPgogICAgPC90Ym9keT4KPC90YWJsZT4KPHA+PHN0cm9uZz5FbnRlcnByaXNlIFRha2Vhd2F5Ojwvc3Ryb25nPiBBcyB5b3VyIGJ1c2luZXNzIGdyb3dzIGFuZCB5b3VyIHN0cmF0ZWdpYyBwcm9ibGVtcyBiZWNvbWUgbW9yZSBjb21wbGV4LCBhIERRTC1saWtlIGFwcHJvYWNoIHdpbGwgYnJlYWsgZG93bi4gVGhlIEhEUkwgZnJhbWV3b3JrIGlzIGJ1aWx0IHRvIHNjYWxlLCBlbnN1cmluZyB5b3VyIEFJIGRlY2lzaW9uLXN1cHBvcnQgc3lzdGVtIGdyb3dzIHdpdGggeW91LCBkZWxpdmVyaW5nIGNvbnNpc3RlbnRseSBoaWdoLXF1YWxpdHkgcGxhbnMgd2l0aG91dCBhIG1hc3NpdmUgaW5jcmVhc2UgaW4gY29tcHV0YXRpb25hbCBjb3N0LjwvcD4KCjxoMz5GaW5kaW5nIDI6IEhEUkwgTGVhcm5zIFN0YWJseSBhbmQgUmVsaWFibHk8L2gzPgo8cD5UaGUgcGFwZXIncyB0cmFpbmluZyBncmFwaHMgc2hvdyB0aGF0IHdoaWxlIERRTCdzIHBlcmZvcm1hbmNlIGZsdWN0dWF0ZXMgd2lsZGx5IGR1cmluZyBsZWFybmluZywgSERSTCdzIHBlcmZvcm1hbmNlIGN1cnZlIGlzIHNtb290aCBhbmQgc3RlYWRpbHkgaW1wcm92ZXMuIEZvciBhIGJ1c2luZXNzLCB0aGlzIG1lYW5zIGEgbW9yZSBwcmVkaWN0YWJsZSBhbmQgdHJ1c3R3b3J0aHkgQUkgZGV2ZWxvcG1lbnQgcHJvY2Vzcy4gWW91IGNhbiBoYXZlIGhpZ2hlciBjb25maWRlbmNlIHRoYXQgdGhlIGZpbmFsIHBvbGljeSB3aWxsIGJlIHJvYnVzdCBhbmQgbm90IHRoZSByZXN1bHQgb2YgYSBsdWNreSwgdW5yZXBlYXRhYmxlIHRyYWluaW5nIHJ1bi48L3A+CjxwPjxzdHJvbmc+RW50ZXJwcmlzZSBUYWtlYXdheTo8L3N0cm9uZz4gU3RhYmlsaXR5IGVxdWFscyByZWxpYWJpbGl0eS4gSERSTCBwcm92aWRlcyBhIG1vcmUgZGVwZW5kYWJsZSBwYXRoIHRvIGEgaGlnaC1wZXJmb3JtYW5jZSBBSSwgcmVkdWNpbmcgcHJvamVjdCByaXNrIGFuZCBsZWFkaW5nIHRvIGZhc3RlciwgbW9yZSBjb25maWRlbnQgZGVwbG95bWVudCBvZiBzdHJhdGVnaWMgZGVjaXNpb24tbWFraW5nIHRvb2xzLjwvcD4KCgo8aDI+RW50ZXJwcmlzZSBBcHBsaWNhdGlvbnM6IEJleW9uZCBJbmZyYXN0cnVjdHVyZTwvaDI+CjxwPlRoZSBwb3dlciBvZiB0aGlzIGZyYW1ld29yayBleHRlbmRzIGZhciBiZXlvbmQgc2V3ZXIgbmV0d29ya3MuIEF0IE93bllvdXJBSS5jb20sIHdlIHNlZSBkaXJlY3QgYXBwbGljYXRpb25zIGFjcm9zcyB2YXJpb3VzIGluZHVzdHJpZXMuIEhlcmUgYXJlIGEgZmV3IGh5cG90aGV0aWNhbCBzY2VuYXJpb3MgaW5zcGlyZWQgYnkgdGhlIHBhcGVyJ3MgbWV0aG9kb2xvZ3kuPC9wPgoKPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24taXRlbSI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWNjb3JkaW9uLWJ1dHRvbiI+PHN0cm9uZz5GaW5hbmNlOjwvc3Ryb25nPiBTdHJhdGVnaWMgQ2FwaXRhbCBFeHBlbmRpdHVyZSAoQ2FwRXgpIFBsYW5uaW5nPC9idXR0b24+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQiPgogICAgICAgICAgICA8cD48c3Ryb25nPlRoZSBDaGFsbGVuZ2U6PC9zdHJvbmc+IEEgZ2xvYmFsIGNvcnBvcmF0aW9uIGhhcyBhICQ1MDBNIG11bHRpLXllYXIgYnVkZ2V0IGZvciBmYWN0b3J5IHVwZ3JhZGVzLCBJVCBzeXN0ZW0gcmVwbGFjZW1lbnRzLCBhbmQgbmV3IG1hcmtldCBleHBhbnNpb25zLiBIb3cgc2hvdWxkIGl0IGFsbG9jYXRlIGZ1bmRzIGVhY2ggeWVhciBhbmQgd2hpY2ggc3BlY2lmaWMgcHJvamVjdHMgc2hvdWxkIGl0IGdyZWVubGlnaHQgdG8gbWF4aW1pemUgbG9uZy10ZXJtIFJPSSB3aGlsZSBhZGhlcmluZyB0byBhbm51YWwgY2FzaCBmbG93IGxpbWl0cz88L3A+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+SERSTCBTb2x1dGlvbjo8L3N0cm9uZz48L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkJ1ZGdldCBQbGFubmVyIChTdHJhdGVnaXN0KTo8L3N0cm9uZz4gRGVjaWRlcyB0aGUgdG90YWwgQ2FwRXggZm9yIGEgZ2l2ZW4geWVhciwgYmFsYW5jaW5nIGFnZ3Jlc3NpdmUgZ3Jvd3RoIHdpdGggZmluYW5jaWFsIHBydWRlbmNlLjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5Qcm9qZWN0IFBsYW5uZXIgKE1hbmFnZXIpOjwvc3Ryb25nPiBQcmlvcml0aXplcyBhbGwgcG90ZW50aWFsIHByb2plY3RzIGJhc2VkIG9uIHRoZWlyIHByb2plY3RlZCBOUFYsIHN0cmF0ZWdpYyBhbGlnbm1lbnQsIGFuZCByaXNrIHByb2ZpbGUuPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkxQIFByb2plY3Rpb24gKENvbXBsaWFuY2UpOjwvc3Ryb25nPiBHZW5lcmF0ZXMgdGhlIGZpbmFsLCBhcHByb3ZlZCBwcm9qZWN0IHBvcnRmb2xpbyBmb3IgdGhlIHllYXIsIGVuc3VyaW5nIHRoZSB0b3RhbCBzcGVuZCBpcyB3aXRoaW4gdGhlIGFsbG9jYXRlZCBidWRnZXQgYW5kIG1lZXRzIGFueSBvdGhlciBmaW5hbmNpYWwgY292ZW5hbnRzLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pdGVtIj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24tYnV0dG9uIj48c3Ryb25nPlJldGFpbDo8L3N0cm9uZz4gTXVsdGktQ2hhbm5lbCBNYXJrZXRpbmcgQnVkZ2V0IEFsbG9jYXRpb248L2J1dHRvbj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY2NvcmRpb24tY29udGVudCI+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+VGhlIENoYWxsZW5nZTo8L3N0cm9uZz4gQSBuYXRpb25hbCByZXRhaWxlciBoYXMgYSBxdWFydGVybHkgbWFya2V0aW5nIGJ1ZGdldC4gSXQgbmVlZHMgdG8gZGVjaWRlIGhvdyBtdWNoIHRvIHNwZW5kIG92ZXJhbGwsIGFuZCB0aGVuIGhvdyB0byBkaXN0cmlidXRlIHRoYXQgc3BlbmQgYWNyb3NzIGRvemVucyBvZiBjaGFubmVscyAoZGlnaXRhbCBhZHMsIHNvY2lhbCBtZWRpYSwgcHJpbnQsIFRWKSBpbiBodW5kcmVkcyBvZiByZWdpb25hbCBtYXJrZXRzIHRvIG1heGltaXplIGN1c3RvbWVyIGFjcXVpc2l0aW9uIGFuZCBsaWZldGltZSB2YWx1ZS48L3A+CiAgICAgICAgICAgIDxwPjxzdHJvbmc+SERSTCBTb2x1dGlvbjo8L3N0cm9uZz48L3A+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPkJ1ZGdldCBQbGFubmVyIChTdHJhdGVnaXN0KTo8L3N0cm9uZz4gU2V0cyB0aGUgdG9wLWxpbmUgbWFya2V0aW5nIHNwZW5kIGZvciB0aGUgcXVhcnRlciBiYXNlZCBvbiBzZWFzb25hbGl0eSBhbmQgb3ZlcmFsbCBidXNpbmVzcyBnb2Fscy48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+Q2FtcGFpZ24gUGxhbm5lciAoTWFuYWdlcik6PC9zdHJvbmc+IFNjb3JlcyB0aGUgcG90ZW50aWFsIGVmZmVjdGl2ZW5lc3Mgb2Ygc3BlbmRpbmcgaW4gZWFjaCBjaGFubmVsL21hcmtldCBjb21iaW5hdGlvbi48L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TFAgUHJvamVjdGlvbiAoQ29tcGxpYW5jZSk6PC9zdHJvbmc+IENyZWF0ZXMgdGhlIGRlZmluaXRpdmUgbWFya2V0aW5nIHBsYW4sIGd1YXJhbnRlZWluZyB0aGUgdG90YWwgYWQgc3BlbmQgaGl0cyB0aGUgYnVkZ2V0IHRhcmdldCBwcmVjaXNlbHksIHBvdGVudGlhbGx5IHdpdGggYWRkZWQgY29uc3RyYWludHMgbGlrZSAnYXQgbGVhc3QgMTUlIG9mIHNwZW5kIG11c3QgYmUgb24gZW1lcmdpbmcgY2hhbm5lbHMnLjwvbGk+CiAgICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImFjY29yZGlvbi1pdGVtIj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY2NvcmRpb24tYnV0dG9uIj48c3Ryb25nPk1hbnVmYWN0dXJpbmc6PC9zdHJvbmc+IFByb2FjdGl2ZSBNYWludGVuYW5jZSBTY2hlZHVsaW5nPC9idXR0b24+CiAgICAgICAgPGRpdiBjbGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQiPgogICAgICAgICAgICA8cD48c3Ryb25nPlRoZSBDaGFsbGVuZ2U6PC9zdHJvbmc+IEFuIGF1dG9tb3RpdmUgcGxhbnQgaGFzIHRob3VzYW5kcyBvZiBtYWNoaW5lcywgZWFjaCB3aXRoIGEgZGlmZmVyZW50IGFnZSwgdXNhZ2UgbGV2ZWwsIGFuZCBmYWlsdXJlIHByb2JhYmlsaXR5LiBHaXZlbiBhIGZpeGVkIGFubnVhbCBtYWludGVuYW5jZSBidWRnZXQsIHdoaWNoIG1hY2hpbmVzIHNob3VsZCBiZSBzZXJ2aWNlZCB0byBtaW5pbWl6ZSBwcm9kdWN0aW9uIGRvd250aW1lIGFuZCBjb3N0bHkgZW1lcmdlbmN5IHJlcGFpcnM/PC9wPgogICAgICAgICAgICA8cD48c3Ryb25nPkhEUkwgU29sdXRpb246PC9zdHJvbmc+PC9wPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5CdWRnZXQgUGxhbm5lciAoU3RyYXRlZ2lzdCk6PC9zdHJvbmc+IERldGVybWluZXMgdGhlIG9wdGltYWwgbWFpbnRlbmFuY2Ugc3BlbmQgZm9yIHRoZSB5ZWFyLCBjb25zaWRlcmluZyBwcm9kdWN0aW9uIHRhcmdldHMgYW5kIGxvbmctdGVybSBhc3NldCBoZWFsdGguPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPk1haW50ZW5hbmNlIFBsYW5uZXIgKE1hbmFnZXIpOjwvc3Ryb25nPiBBc3NpZ25zIGEgImNyaXRpY2FsaXR5IHNjb3JlIiB0byBlYWNoIG1hY2hpbmUgYmFzZWQgb24gaXRzIGNvbmRpdGlvbiwgcm9sZSBpbiB0aGUgcHJvZHVjdGlvbiBsaW5lLCBhbmQgY29zdCBvZiBmYWlsdXJlLjwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5MUCBQcm9qZWN0aW9uIChDb21wbGlhbmNlKTo8L3N0cm9uZz4gR2VuZXJhdGVzIHRoZSBmaW5hbCB3b3JrIG9yZGVyIHNjaGVkdWxlLCBtYXhpbWl6aW5nIHRoZSByZWR1Y3Rpb24gaW4gZmFpbHVyZSByaXNrIHdoaWxlIHN0YXlpbmcgc3RyaWN0bHkgd2l0aGluIHRoZSBtYWludGVuYW5jZSwgcmVwYWlyLCBhbmQgb3BlcmF0aW9ucyAoTVJPKSBidWRnZXQuPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxoMj5JbnRlcmFjdGl2ZSBST0kgQ2FsY3VsYXRvcjogRXN0aW1hdGUgWW91ciBQb3RlbnRpYWwgVXBsaWZ0PC9oMj4KPHA+V2hpbGUgZXZlcnkgYnVzaW5lc3MgaXMgdW5pcXVlLCB0aGUgcGFwZXIncyBmaW5kaW5ncyBzdWdnZXN0IHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGdhaW5zIGFyZSBwb3NzaWJsZS4gVXNlIG91ciBjYWxjdWxhdG9yIHRvIGdldCBhIGRpcmVjdGlvbmFsIGVzdGltYXRlIG9mIHRoZSB2YWx1ZSBhbiBIRFJMLWJhc2VkIHNvbHV0aW9uIGNvdWxkIGJyaW5nIHRvIHlvdXIgY29tcGxleCBvcHRpbWl6YXRpb24gcHJvYmxlbXMuIFRoaXMgaXMgYmFzZWQgb24gdGhlIDgtMTUlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IEhEUkwgc2hvd2VkIG92ZXIgY29udmVudGlvbmFsIEFJIGluIGxhcmdlciwgbW9yZSBjb21wbGV4IHNjZW5hcmlvcy48L3A+Cgo8ZGl2IGNsYXNzPSJyb2ktY2FsY3VsYXRvciI+CiAgICA8aDM+Q29uc3RyYWluZWQgT3B0aW1pemF0aW9uIEFJOiBQZXJmb3JtYW5jZSBFc3RpbWF0b3I8L2gzPgogICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgPGxhYmVsIGZvcj0iYXNzZXQtY291bnQiPk51bWJlciBvZiAiQXNzZXRzIiAoUHJvamVjdHMsIENhbXBhaWducywgTWFjaGluZXMpOiA8c3BhbiBpZD0iYXNzZXQtY291bnQtdmFsdWUiIGNsYXNzPSJvdXRwdXQtdmFsdWUiPjUwPC9zcGFuPjwvbGFiZWw+CiAgICAgICAgPGlucHV0IHR5cGU9InJhbmdlIiBpZD0iYXNzZXQtY291bnQiIG1pbj0iMTAiIG1heD0iMTAwMCIgdmFsdWU9IjUwIiBhcmlhLWxhYmVsPSJOdW1iZXIgb2YgYXNzZXRzIj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CiAgICAgICAgPGxhYmVsIGZvcj0iY29tcGxleGl0eSI+UHJvYmxlbSBDb21wbGV4aXR5IChJbnRlcmRlcGVuZGVuY2llcywgQ29uc3RyYWludHMpOiA8c3BhbiBpZD0iY29tcGxleGl0eS12YWx1ZSIgY2xhc3M9Im91dHB1dC12YWx1ZSI+TWVkaXVtPC9zcGFuPjwvbGFiZWw+CiAgICAgICAgPGlucHV0IHR5cGU9InJhbmdlIiBpZD0iY29tcGxleGl0eSIgbWluPSIxIiBtYXg9IjMiIHZhbHVlPSIyIiBhcmlhLWxhYmVsPSJQcm9ibGVtIGNvbXBsZXhpdHkgbGV2ZWwiPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJyb2ktcmVzdWx0IiByb2xlPSJzdGF0dXMiIGFyaWEtbGl2ZT0icG9saXRlIj4KICAgICAgICBFc3RpbWF0ZWQgUGVyZm9ybWFuY2UgVXBsaWZ0IHdpdGggSERSTDogPHN0cm9uZz45LjUlPC9zdHJvbmc+CiAgICA8L2Rpdj4KICAgIDxwIHN0eWxlPSJmb250LXNpemU6MTRweDsgY29sb3I6IzY2NjsgdGV4dC1hbGlnbjpjZW50ZXI7IG1hcmdpbi10b3A6MTVweDsiPlRoaXMgaXMgYW4gaWxsdXN0cmF0aXZlIGVzdGltYXRlLiBUaGUgYWN0dWFsIFJPSSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpY3Mgb2YgeW91ciBidXNpbmVzcyBwcm9ibGVtIGFuZCBkYXRhLjwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJjdGEtc2VjdGlvbiI+CiAgICA8aDI+UmVhZHkgdG8gUXVhbnRpZnkgWW91ciBSZWFsIFJPST88L2gyPgogICAgPHA+T3VyIHRlYW0gY2FuIGhlbHAgeW91IGJ1aWxkIGEgYnVzaW5lc3MgY2FzZSBmb3IgYSBjdXN0b20gQUkgc29sdXRpb24gdGFpbG9yZWQgdG8geW91ciBzcGVjaWZpYyBvcGVyYXRpb25hbCBjb25zdHJhaW50cyBhbmQgZ29hbHMuPC9wPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9vd255b3VyYWkuY29tLyNDYWxlbmRhciIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJjdGEtYnV0dG9uIj5EZXZlbG9wIE15IEJ1c2luZXNzIENhc2U8L2E+CjwvZGl2PgoKPGgyPllvdXIgQ3VzdG9tIEltcGxlbWVudGF0aW9uIFJvYWRtYXAgd2l0aCBPd25Zb3VyQUkuY29tPC9oMj4KPHA+QWRvcHRpbmcgdGhpcyBhZHZhbmNlZCBBSSBmcmFtZXdvcmsgaXMgYSBzdHJ1Y3R1cmVkIHByb2Nlc3MuIEF0IE93bllvdXJBSS5jb20sIHdlIGd1aWRlIG91ciBjbGllbnRzIHRocm91Z2ggYSBwcm92ZW4gcm9hZG1hcCB0byBlbnN1cmUgc3VjY2Vzcy4gQ2xpY2sgb24gZWFjaCBzdGVwIHRvIGxlYXJuIG1vcmUuPC9wPgoKPGRpdiBjbGFzcz0icm9hZG1hcC1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0icm9hZG1hcC1zdGVwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWNvbnRlbnQiPgogICAgICAgICAgICA8aDM+UGhhc2UgMTogRGlzY292ZXJ5ICYgUHJvYmxlbSBGcmFtaW5nPC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hZG1hcC1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxwPlRoaXMgaXMgdGhlIG1vc3QgY3JpdGljYWwgcGhhc2UuIFdlIHdvcmsgd2l0aCB5b3VyIHN0YWtlaG9sZGVycyB0byBkZWVwbHkgdW5kZXJzdGFuZCB0aGUgYnVzaW5lc3MgcHJvYmxlbS4gV2hhdCBhcmUgeW91IG9wdGltaXppbmcgZm9yIChlLmcuLCBwcm9maXQsIGVmZmljaWVuY3ksIHJpc2sgcmVkdWN0aW9uKT8gV2hhdCBhcmUgdGhlIGhhcmQgY29uc3RyYWludHMgKGJ1ZGdldHMsIHJlZ3VsYXRpb25zLCBwaHlzaWNhbCBsaW1pdHMpPyBXZSBpZGVudGlmeSB0aGUgbmVjZXNzYXJ5IGRhdGEgc291cmNlcyB0byBidWlsZCBhICJkaWdpdGFsIHR3aW4iIG9mIHlvdXIgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm9hZG1hcC1zdGVwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWNvbnRlbnQiPgogICAgICAgICAgICA8aDM+UGhhc2UgMjogRW52aXJvbm1lbnQgU2ltdWxhdGlvbjwvaDM+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvYWRtYXAtZGV0YWlscyI+CiAgICAgICAgICAgICAgICA8cD5UaGUgQUkgbmVlZHMgYSBzYWZlIHBsYWNlIHRvIGxlYXJuLiBXZSBjb25zdHJ1Y3QgYSBzaW11bGF0aW9uIG9mIHlvdXIgYnVzaW5lc3MgcHJvY2VzcyBiYXNlZCBvbiBoaXN0b3JpY2FsIGRhdGEuIFRoaXMgImd5bSIgYWxsb3dzIHRoZSBBSSB0byB0ZXN0IG1pbGxpb25zIG9mIHN0cmF0ZWdpZXMgYW5kIGxlYXJuIGZyb20gdGhlIG91dGNvbWVzIHdpdGhvdXQgYW55IHJlYWwtd29ybGQgcmlzay4gRm9yIGFzc2V0IG1hbmFnZW1lbnQsIHRoaXMgaXMgYSBkZXRlcmlvcmF0aW9uIG1vZGVsOyBmb3IgbWFya2V0aW5nLCBpdCdzIGEgY3VzdG9tZXIgcmVzcG9uc2UgbW9kZWwuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm9hZG1hcC1zdGVwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWNvbnRlbnQiPgogICAgICAgICAgICA8aDM+UGhhc2UgMzogQ3VzdG9tIEhEUkwgTW9kZWwgQXJjaGl0ZWN0dXJlPC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hZG1hcC1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxwPldlIGRlc2lnbiB0aGUgdHdvLWxldmVsIEFJIGJyYWluLiBXZSBjdXN0b21pemUgdGhlICJTdHJhdGVnaXN0IiBhbmQgIk1hbmFnZXIiIGFjdG9ycyB0byBmaXQgdGhlIHNwZWNpZmljcyBvZiB5b3VyIGRlY2lzaW9uIGhpZXJhcmNoeS4gV2Ugc2VsZWN0IHRoZSByaWdodCBuZXVyYWwgbmV0d29yayBhcmNoaXRlY3R1cmUgYW5kIHR1bmUgdGhlIGxlYXJuaW5nIGFsZ29yaXRobXMgKGxpa2UgdGhlIFNvZnQgQWN0b3ItQ3JpdGljIHVzZWQgaW4gdGhlIHBhcGVyKSBmb3IgbWF4aW11bSBwZXJmb3JtYW5jZSBvbiB5b3VyIHByb2JsZW0uPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm9hZG1hcC1zdGVwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWNvbnRlbnQiPgogICAgICAgICAgICA8aDM+UGhhc2UgNDogQ29uc3RyYWludCBFbmdpbmUgSW50ZWdyYXRpb248L2gzPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWRldGFpbHMiPgogICAgICAgICAgICAgICAgPHA+SGVyZSB3ZSBidWlsZCB5b3VyIGN1c3RvbSAiQ29tcGxpYW5jZSBFbmdpbmUuIiBXZSBjb2RpZnkgeW91ciBidXNpbmVzcyBydWxlc2J1ZGdldHMsIHJlc291cmNlIGxpbWl0cywgcmVndWxhdG9yeSByZXF1aXJlbWVudHNpbnRvIGEgbWF0aGVtYXRpY2FsIG9wdGltaXphdGlvbiBsYXllciAobGlrZSB0aGUgTGluZWFyIFByb2dyYW1taW5nIHByb2plY3Rpb24pLiBUaGlzIGd1YXJhbnRlZXMgdGhhdCBldmVyeSByZWNvbW1lbmRhdGlvbiB0aGUgQUkgbWFrZXMgaXMgbm90IG9ubHkgaW50ZWxsaWdlbnQgYnV0IGFsc28gMTAwJSBhY3Rpb25hYmxlIGFuZCBjb21wbGlhbnQuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icm9hZG1hcC1zdGVwIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb2FkbWFwLWNvbnRlbnQiPgogICAgICAgICAgICA8aDM+UGhhc2UgNTogVHJhaW5pbmcsIFZhbGlkYXRpb24gJiBEZXBsb3ltZW50PC9oMz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icm9hZG1hcC1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxwPlRoZSBBSSBpcyB0cmFpbmVkIGluIHRoZSBzaW11bGF0aW9uIHVudGlsIGl0IGNvbnNpc3RlbnRseSBwcm9kdWNlcyBoaWdoLXF1YWxpdHksIHN0YWJsZSBwb2xpY2llcy4gV2Ugcmlnb3JvdXNseSB2YWxpZGF0ZSBpdHMgcGVyZm9ybWFuY2UgYWdhaW5zdCBoaXN0b3JpY2FsIGRlY2lzaW9ucyBhbmQgb3RoZXIgYmVuY2htYXJrcy4gRmluYWxseSwgd2UgZGVwbG95IHRoZSBtb2RlbCBhcyBhIGRlY2lzaW9uLXN1cHBvcnQgdG9vbCwgaW50ZWdyYXRpbmcgaXQgaW50byB5b3VyIGV4aXN0aW5nIHdvcmtmbG93cyB0byBwcm92aWRlIGNsZWFyLCBkYXRhLWRyaXZlbiByZWNvbW1lbmRhdGlvbnMgdG8geW91ciB0ZWFtLjwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cgo8aDI+Q29uY2x1c2lvbjogVGhlIEZ1dHVyZSBvZiBFbnRlcnByaXNlIFN0cmF0ZWd5IGlzIENvbnN0cmFpbnQtQXdhcmUgQUk8L2gyPgo8cD5UaGUgcmVzZWFyY2ggYnkgRmFyZCBhbmQgWXVhbiBtYXJrcyBhIHNpZ25pZmljYW50IHN0ZXAgZm9yd2FyZCBpbiBhcHBsaWVkIEFJLiBJdCBwcm92aWRlcyBhIHJvYnVzdCwgc2NhbGFibGUsIGFuZCB0cnVzdHdvcnRoeSBtZXRob2QgZm9yIHNvbHZpbmcgdGhlIGtpbmQgb2YgbWVzc3ksIGNvbnN0cmFpbmVkLCBoaWdoLXN0YWtlcyBwcm9ibGVtcyB0aGF0IGJ1c2luZXNzZXMgZmFjZSBldmVyeSBkYXkuIEJ5IHNlcGFyYXRpbmcgc3RyYXRlZ2ljIGJ1ZGdldC1zZXR0aW5nIGZyb20gb3BlcmF0aW9uYWwgcHJpb3JpdGl6YXRpb24gYW5kIGVuZm9yY2luZyBmZWFzaWJpbGl0eSB3aXRoIGEgbWF0aGVtYXRpY2FsIGNvbXBsaWFuY2UgbGF5ZXIsIHRoZSBIRFJMIGZyYW1ld29yayBvdmVyY29tZXMgdGhlIGNyaXRpY2FsIGxpbWl0YXRpb25zIG9mIG9sZGVyIEFJIGFwcHJvYWNoZXMuPC9wPgoKPHA+QXQgT3duWW91ckFJLmNvbSwgb3VyIGV4cGVydGlzZSBsaWVzIGluIHRyYW5zbGF0aW5nIHRoaXMgcG93ZXJmdWwgYWNhZGVtaWMgcmVzZWFyY2ggaW50byB0YW5naWJsZSBidXNpbmVzcyB2YWx1ZS4gV2UgYmVsaWV2ZSB0aGUgZnV0dXJlIG9mIGNvbXBldGl0aXZlIGFkdmFudGFnZSBsaWVzIG5vdCBqdXN0IGluIHVzaW5nIEFJLCBidXQgaW4gdXNpbmcgdGhlICpyaWdodCBraW5kKiBvZiBBSUFJIHRoYXQgdW5kZXJzdGFuZHMgYW5kIHJlc3BlY3RzIHRoZSBjb21wbGV4IHJlYWxpdGllcyBvZiB5b3VyIGJ1c2luZXNzLiBUaGlzIGZyYW1ld29yayBpcyBhIHByaW1lIGV4YW1wbGUgb2Ygc3VjaCBhbiBhcHByb2FjaCwgYW5kIHdlIGFyZSBlcXVpcHBlZCB0byBjdXN0b21pemUgYW5kIGRlcGxveSBpdCB0byBzb2x2ZSB5b3VyIG1vc3QgcHJlc3Npbmcgc3RyYXRlZ2ljIGNoYWxsZW5nZXMuPC9wPgoKPGRpdiBjbGFzcz0ib3dueW91cmFpLWZvb3RlciI+CiAgICA8cD5FeHBlcnQgYW5hbHlzaXMgYW5kIGN1c3RvbSBzb2x1dGlvbnMgYnkgPGEgaHJlZj0iaHR0cHM6Ly9vd255b3VyYWkuY29tIiB0YXJnZXQ9Il9ibGFuayI+T3duWW91ckFJLmNvbTwvYT48L3A+CiAgICA8cD5MZXQncyBidWlsZCB5b3VyIGludGVsbGlnZW50LCBjb25zdHJhaW50LWF3YXJlIGZ1dHVyZSwgdG9nZXRoZXIuPC9wPgo8L2Rpdj4KCjwvZGl2Pgo8c2NyaXB0PgooZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGRyX2FuYWx5c2lzX2NvbnRhaW5lcicpOwogICAgaWYgKCFjb250YWluZXIpIHJldHVybjsKCiAgICAvLyBBY2NvcmRpb24gTG9naWMKICAgIGNvbnN0IGFjY29yZGlvbkJ0bnMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmFjY29yZGlvbi1idXR0b24nKTsKICAgIGFjY29yZGlvbkJ0bnMuZm9yRWFjaChidXR0b24gPT4gewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpOwogICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5uZXh0RWxlbWVudFNpYmxpbmc7CiAgICAgICAgICAgIGlmIChjb250ZW50LnN0eWxlLm1heEhlaWdodCkgewogICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29udGVudC5zdHlsZS5tYXhIZWlnaHQgPSBjb250ZW50LnNjcm9sbEhlaWdodCArICdweCc7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0pOwoKICAgIC8vIEZsb3djaGFydCBUb29sdGlwIExvZ2ljCiAgICBjb25zdCBmbG93Y2hhcnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2hkci1mbG93Y2hhcnQnKTsKICAgIGNvbnN0IHRvb2x0aXAgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2Zsb3djaGFydC10b29sdGlwJyk7CiAgICBjb25zdCBub2RlcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZmxvdy1ub2RlJyk7CiAgICBpZiAoZmxvd2NoYXJ0ICYmIHRvb2x0aXAgJiYgbm9kZXMpIHsKICAgICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gewogICAgICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbHRpcCcpOwogICAgICAgICAgICAgICAgdG9vbHRpcC50ZXh0Q29udGVudCA9IHRvb2x0aXBUZXh0OwogICAgICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS5vcGFjaXR5ID0gJzEnOwogICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgIHRvb2x0aXAuc3R5bGUubGVmdCA9IChlLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQgKyAxNSkgKyAncHgnOwogICAgICAgICAgICAgICAgdG9vbHRpcC5zdHlsZS50b3AgPSAoZS5jbGllbnRZIC0gY29udGFpbmVyUmVjdC50b3AgKyAxNSkgKyAncHgnOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB0b29sdGlwLnN0eWxlLm9wYWNpdHkgPSAnMCc7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vIFJPSSBDYWxjdWxhdG9yIExvZ2ljCiAgICBjb25zdCBhc3NldENvdW50U2xpZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNhc3NldC1jb3VudCcpOwogICAgY29uc3QgY29tcGxleGl0eVNsaWRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY29tcGxleGl0eScpOwogICAgY29uc3Qgcm9pUmVzdWx0ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNyb2ktcmVzdWx0Jyk7CiAgICBjb25zdCBhc3NldENvdW50VmFsdWUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2Fzc2V0LWNvdW50LXZhbHVlJyk7CiAgICBjb25zdCBjb21wbGV4aXR5VmFsdWUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NvbXBsZXhpdHktdmFsdWUnKTsKCiAgICBmdW5jdGlvbiB1cGRhdGVSb2koKSB7CiAgICAgICAgaWYgKCFhc3NldENvdW50U2xpZGVyIHx8ICFjb21wbGV4aXR5U2xpZGVyIHx8ICFyb2lSZXN1bHQpIHJldHVybjsKICAgICAgICAKICAgICAgICBjb25zdCBhc3NldHMgPSBwYXJzZUludChhc3NldENvdW50U2xpZGVyLnZhbHVlKTsKICAgICAgICBjb25zdCBjb21wbGV4aXR5ID0gcGFyc2VJbnQoY29tcGxleGl0eVNsaWRlci52YWx1ZSk7CiAgICAgICAgCiAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXkgdmFsdWVzCiAgICAgICAgYXNzZXRDb3VudFZhbHVlLnRleHRDb250ZW50ID0gYXNzZXRzOwogICAgICAgIGNvbnN0IGNvbXBsZXhpdHlMYWJlbHMgPSBbJ0xvdycsICdNZWRpdW0nLCAnSGlnaCddOwogICAgICAgIGNvbXBsZXhpdHlWYWx1ZS50ZXh0Q29udGVudCA9IGNvbXBsZXhpdHlMYWJlbHNbY29tcGxleGl0eS0xXTsKCiAgICAgICAgLy8gQmFzZSB1cGxpZnQgZnJvbSBwYXBlciAoOCUgdG8gMTUlKQogICAgICAgIGNvbnN0IGJhc2VNaW5VcGxpZnQgPSAwLjA4OwogICAgICAgIGNvbnN0IGJhc2VNYXhVcGxpZnQgPSAwLjE1OwogICAgICAgIAogICAgICAgIC8vIFNjYWxlIHVwbGlmdCBiYXNlZCBvbiBjb21wbGV4aXR5IGFuZCBhc3NldCBjb3VudCAobW9yZSBjb21wbGV4L21vcmUgYXNzZXRzID0gaGlnaGVyIHBvdGVudGlhbCBnYWluKQogICAgICAgIGxldCBjb21wbGV4aXR5RmFjdG9yID0gKGNvbXBsZXhpdHkgLSAxKSAvIDI7IC8vIDAgZm9yIGxvdywgMC41IGZvciBtZWQsIDEgZm9yIGhpZ2gKICAgICAgICBsZXQgYXNzZXRGYWN0b3IgPSBNYXRoLm1pbigxLCAoYXNzZXRzIC0gMTApIC8gKDEwMDAgLSAxMCkpOyAvLyBTY2FsZSBmcm9tIDAgdG8gMQoKICAgICAgICBsZXQgZmluYWxVcGxpZnQgPSBiYXNlTWluVXBsaWZ0ICsgKGJhc2VNYXhVcGxpZnQgLSBiYXNlTWluVXBsaWZ0KSAqIChjb21wbGV4aXR5RmFjdG9yICogMC42ICsgYXNzZXRGYWN0b3IgKiAwLjQpOwogICAgICAgIAogICAgICAgIHJvaVJlc3VsdC5pbm5lckhUTUwgPSBgRXN0aW1hdGVkIFBlcmZvcm1hbmNlIFVwbGlmdCB3aXRoIEhEUkw6IDxzdHJvbmc+JHsoZmluYWxVcGxpZnQgKiAxMDApLnRvRml4ZWQoMSl9JTwvc3Ryb25nPmA7CiAgICB9CgogICAgaWYgKGFzc2V0Q291bnRTbGlkZXIgJiYgY29tcGxleGl0eVNsaWRlcikgewogICAgICAgIGFzc2V0Q291bnRTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB1cGRhdGVSb2kpOwogICAgICAgIGNvbXBsZXhpdHlTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCB1cGRhdGVSb2kpOwogICAgICAgIHVwZGF0ZVJvaSgpOyAvLyBJbml0aWFsIGNhbGN1bGF0aW9uCiAgICB9CgogICAgLy8gUm9hZG1hcCBMb2dpYwogICAgY29uc3Qgcm9hZG1hcFN0ZXBzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5yb2FkbWFwLXN0ZXAnKTsKICAgIHJvYWRtYXBTdGVwcy5mb3JFYWNoKHN0ZXAgPT4gewogICAgICAgIHN0ZXAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gQ2xvc2Ugb3RoZXIgc3RlcHMKICAgICAgICAgICAgcm9hZG1hcFN0ZXBzLmZvckVhY2gocyA9PiB7CiAgICAgICAgICAgICAgICBpZiAocyAhPT0gdGhpcykgewogICAgICAgICAgICAgICAgICAgIHMuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICAgICAgICAgICAgICAgICAgcy5xdWVyeVNlbGVjdG9yKCcucm9hZG1hcC1kZXRhaWxzJykuc3R5bGUubWF4SGVpZ2h0ID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICBzLnF1ZXJ5U2VsZWN0b3IoJy5yb2FkbWFwLWRldGFpbHMnKS5zdHlsZS5wYWRkaW5nID0gJzAgMTVweCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgLy8gVG9nZ2xlIHRoaXMgc3RlcAogICAgICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpOwogICAgICAgICAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5xdWVyeVNlbGVjdG9yKCcucm9hZG1hcC1kZXRhaWxzJyk7CiAgICAgICAgICAgIGlmIChkZXRhaWxzLnN0eWxlLm1heEhlaWdodCkgewogICAgICAgICAgICAgICAgZGV0YWlscy5zdHlsZS5tYXhIZWlnaHQgPSBudWxsOwogICAgICAgICAgICAgICAgZGV0YWlscy5zdHlsZS5wYWRkaW5nID0gJzAgMTVweCc7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkZXRhaWxzLnN0eWxlLm1heEhlaWdodCA9IGRldGFpbHMuc2Nyb2xsSGVpZ2h0ICsgJ3B4JzsKICAgICAgICAgICAgICAgIGRldGFpbHMuc3R5bGUucGFkZGluZyA9ICcxNXB4JzsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSk7CiAgICAKICAgIC8vIENUQSBsaW5rcwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2N0YS1idXR0b24nKSkgewogICAgICAgICAgICBjb25zdCB1cmwgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTsKICAgICAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCn0pKCk7Cjwvc2NyaXB0Pgo8IS0tIEVuZCBvZiBJbnRlcmFjdGl2ZSBBbmFseXNpcyAtLT4KYGBg