button flyout offcanvas contact3
button flyout offcanvas subscribe3

Contact Us

Don’t hesitate to let us know how we can help you. We are here to answer any questions you might have or assist you with a project.

CAPTCHA
Please wait...

Subscribe

Join our mailing list and stay up to date on the latest smart technology news and events.

* indicates required
Call for an appointment today 1-877-546-8540   |   4087 Harvester Road Unit 7 Burlington, Ontario L7L5M3   |   Login
          
Phand Corporation

Automation artistry.
User simplicity.

Want to easily monitor your home while you’re not there? Or seamlessly integrate the audio, video, conferencing and security in your corporate space?

With PHAND, you can control everything with an intuitive, centralized system right in the palm of your hand, whether you’re there or not. Let us show you what’s possible in home and office automation. We’ll bring all the benefits of technology to your life – and none of the frustrations!

Learn More

work teaser 1

Home Automation

With one reliable and user-friendly device, anyone in your family can operate the media, lights, thermostats, shades and more.

Learn More
work teaser 1

Image Gallery

Get ideas and inspiration for your next project. See how our integrated smart technology systems can benefit every space.

Learn More
work teaser 1

Commercial Automation

Intelligent audio and video control throughout your facility with simple commands from a tablet, touch panel or keypad.

Learn More
 
 
 







 

Expect the best service.

Experience service focused on excellence, from conception to completion to support. Learn More
Expect the best service
CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZl9icm93c2VyX3Vua25vd24gZ2Zvcm1fd3JhcHBlcicgaWQ9J2dmb3JtX3dyYXBwZXJfMicgPjxhIGlkPSdnZl8yJyBjbGFzcz0nZ2Zvcm1fYW5jaG9yJyA+PC9hPjxmb3JtIG1ldGhvZD0ncG9zdCcgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YScgdGFyZ2V0PSdnZm9ybV9hamF4X2ZyYW1lXzInIGlkPSdnZm9ybV8yJyAgYWN0aW9uPScvI2dmXzInPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9ib2R5Jz48dWwgaWQ9J2dmb3JtX2ZpZWxkc18yJyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93Jz48bGkgaWQ9J2ZpZWxkXzJfMScgY2xhc3M9J2dmaWVsZCBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZScgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsIGdmaWVsZF9sYWJlbF9iZWZvcmVfY29tcGxleCcgZm9yPSdpbnB1dF8yXzFfMycgPk5hbWU8c3BhbiBjbGFzcz0nZ2ZpZWxkX3JlcXVpcmVkJz4qPC9zcGFuPjwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbXBsZXggZ2lucHV0X2NvbnRhaW5lciBub19wcmVmaXggaGFzX2ZpcnN0X25hbWUgbm9fbWlkZGxlX25hbWUgaGFzX2xhc3RfbmFtZSBub19zdWZmaXggZ2ZfbmFtZV9oYXNfMiBnaW5wdXRfY29udGFpbmVyX25hbWUgZ2ZpZWxkX3RyaWdnZXJfY2hhbmdlJyBpZD0naW5wdXRfMl8xJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2lucHV0XzJfMV8zX2NvbnRhaW5lcicgY2xhc3M9J25hbWVfZmlyc3QnID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdpbnB1dF8xLjMnIGlkPSdpbnB1dF8yXzFfMycgdmFsdWU9JycgYXJpYS1sYWJlbD0nRmlyc3QgbmFtZScgdGFiaW5kZXg9JzInICBhcmlhLXJlcXVpcmVkPSJ0cnVlIiBhcmlhLWludmFsaWQ9ImZhbHNlIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0naW5wdXRfMl8xXzMnID5GaXJzdDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9J2lucHV0XzJfMV82X2NvbnRhaW5lcicgY2xhc3M9J25hbWVfbGFzdCcgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2lucHV0XzEuNicgaWQ9J2lucHV0XzJfMV82JyB2YWx1ZT0nJyBhcmlhLWxhYmVsPSdMYXN0IG5hbWUnIHRhYmluZGV4PSc0JyAgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9J2lucHV0XzJfMV82JyA+TGFzdDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfMl8yJyBjbGFzcz0nZ2ZpZWxkIGdmX2xlZnRfaGFsZiBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZScgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzJfMicgPkVtYWlsPHNwYW4gY2xhc3M9J2dmaWVsZF9yZXF1aXJlZCc+Kjwvc3Bhbj48L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9lbWFpbCc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0naW5wdXRfMicgaWQ9J2lucHV0XzJfMicgdHlwZT0ndGV4dCcgdmFsdWU9JycgY2xhc3M9J21lZGl1bScgdGFiaW5kZXg9JzYnICAgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC9saT48bGkgaWQ9J2ZpZWxkXzJfMycgY2xhc3M9J2dmaWVsZCBnZl9yaWdodF9oYWxmIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5X3Zpc2libGUnID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCcgZm9yPSdpbnB1dF8yXzMnID5QaG9uZTwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3Bob25lJz48aW5wdXQgbmFtZT0naW5wdXRfMycgaWQ9J2lucHV0XzJfMycgdHlwZT0ndGV4dCcgdmFsdWU9JycgY2xhc3M9J21lZGl1bScgdGFiaW5kZXg9JzcnICAgIGFyaWEtaW52YWxpZD0iZmFsc2UiIC8+PC9kaXY+PC9saT48bGkgaWQ9J2ZpZWxkXzJfNCcgY2xhc3M9J2dmaWVsZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfMl80JyA+Q29tcGFueSBOYW1lIChPcHRpb25hbCk8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl90ZXh0Jz48aW5wdXQgbmFtZT0naW5wdXRfNCcgaWQ9J2lucHV0XzJfNCcgdHlwZT0ndGV4dCcgdmFsdWU9JycgY2xhc3M9J2xhcmdlJyAgdGFiaW5kZXg9JzgnICAgIGFyaWEtaW52YWxpZD0iZmFsc2UiIC8+PC9kaXY+PC9saT48bGkgaWQ9J2ZpZWxkXzJfNScgY2xhc3M9J2dmaWVsZCBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZScgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzJfNScgPldoYXQgdHlwZSBvZiBzcGFjZSBhcmUgeW91IG1vc3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBzb2x1dGlvbnMgZm9yPzxzcGFuIGNsYXNzPSdnZmllbGRfcmVxdWlyZWQnPio8L3NwYW4+PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfc2VsZWN0Jz48c2VsZWN0IG5hbWU9J2lucHV0XzUnIGlkPSdpbnB1dF8yXzUnICBjbGFzcz0nbGFyZ2UgZ2ZpZWxkX3NlbGVjdCcgdGFiaW5kZXg9JzknICBhcmlhLXJlcXVpcmVkPSJ0cnVlIiBhcmlhLWludmFsaWQ9ImZhbHNlIj48b3B0aW9uIHZhbHVlPScnIHNlbGVjdGVkPSdzZWxlY3RlZCcgY2xhc3M9J2dmX3BsYWNlaG9sZGVyJz5TZWxlY3QgdGhlIG9wdGlvbjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0hvbWUnID5Ib21lPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQ29tbWVyY2lhbCcgPkNvbW1lcmNpYWw8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdNYXJpbmUnID5NYXJpbmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdMdXh1cnkgVHJhbnNwb3J0YXRpb24nID5MdXh1cnkgVHJhbnNwb3J0YXRpb248L29wdGlvbj48L3NlbGVjdD48L2Rpdj48L2xpPjxsaSBpZD0nZmllbGRfMl82JyBjbGFzcz0nZ2ZpZWxkIGdmaWVsZF9jb250YWluc19yZXF1aXJlZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfMl82JyA+V2hhdCBiZXN0IGRlc2NyaWJlcyB5b3U/PHNwYW4gY2xhc3M9J2dmaWVsZF9yZXF1aXJlZCc+Kjwvc3Bhbj48L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9zZWxlY3QnPjxzZWxlY3QgbmFtZT0naW5wdXRfNicgaWQ9J2lucHV0XzJfNicgIGNsYXNzPSdsYXJnZSBnZmllbGRfc2VsZWN0JyB0YWJpbmRleD0nMTAnICBhcmlhLXJlcXVpcmVkPSJ0cnVlIiBhcmlhLWludmFsaWQ9ImZhbHNlIj48b3B0aW9uIHZhbHVlPScnIHNlbGVjdGVkPSdzZWxlY3RlZCcgY2xhc3M9J2dmX3BsYWNlaG9sZGVyJz5TZWxlY3QgdGhlIG9wdGlvbjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J093bmVyJyA+T3duZXI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdBcmNoaXRlY3QnID5BcmNoaXRlY3Q8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdCdWlsZGVyIC8gQ29udHJhY3RvcicgPkJ1aWxkZXIgLyBDb250cmFjdG9yPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSW50ZXJpb3IgRGVzaWduZXInID5JbnRlcmlvciBEZXNpZ25lcjwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J0xpZ2h0aW5nIERlc2lnbmVyJyA+TGlnaHRpbmcgRGVzaWduZXI8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdQcmVzcyAvIE1lZGlhJyA+UHJlc3MgLyBNZWRpYTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J1N0dWRlbnQnID5TdHVkZW50PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nT3RoZXInID5PdGhlcjwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF8yXzcnIGNsYXNzPSdnZmllbGQgZ2ZfbGVmdF9oYWxmIGdmaWVsZF9jb250YWluc19yZXF1aXJlZCBmaWVsZF9zdWJsYWJlbF9iZWxvdyBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlJyA+PGxhYmVsIGNsYXNzPSdnZmllbGRfbGFiZWwnIGZvcj0naW5wdXRfMl83JyA+V2hhdCBiZXN0IGRlc2NyaWJlcyB5b3VyIHJlYXNvbiBmb3IgdmlzaXRpbmc/PHNwYW4gY2xhc3M9J2dmaWVsZF9yZXF1aXJlZCc+Kjwvc3Bhbj48L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9zZWxlY3QnPjxzZWxlY3QgbmFtZT0naW5wdXRfNycgaWQ9J2lucHV0XzJfNycgIGNsYXNzPSdtZWRpdW0gZ2ZpZWxkX3NlbGVjdCcgdGFiaW5kZXg9JzExJyAgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSI+PG9wdGlvbiB2YWx1ZT0nJyBzZWxlY3RlZD0nc2VsZWN0ZWQnIGNsYXNzPSdnZl9wbGFjZWhvbGRlcic+U2VsZWN0IHRoZSBvcHRpb248L29wdGlvbj48b3B0aW9uIHZhbHVlPSdJJiMwMzk7bSBpbiB0aGUgZGVzaWduIHBoYXNlIG9mIGEgcHJvamVjdCcgPkkmIzAzOTttIGluIHRoZSBkZXNpZ24gcGhhc2Ugb2YgYSBwcm9qZWN0PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSSBoYXZlIHByb2plY3QgdW5kZXIgY29uc3RydWN0aW9uJyA+SSBoYXZlIHByb2plY3QgdW5kZXIgY29uc3RydWN0aW9uPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSSYjMDM5O20gaW50ZXJlc3RlZCBpbiByZXRyb2ZpdCBzb2x1dGlvbnMgZm9yIGFuIGV4aXN0aW5nIHNwYWNlJyA+SSYjMDM5O20gaW50ZXJlc3RlZCBpbiByZXRyb2ZpdCBzb2x1dGlvbnMgZm9yIGFuIGV4aXN0aW5nIHNwYWNlPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSSYjMDM5O2QgbGlrZSB0byBsZWFybiBtb3JlIG5vdyBhbmQgbWF5IGhhdmUgYSBwcm9qZWN0IGluIHRoZSBmdXR1cmUnID5JJiMwMzk7ZCBsaWtlIHRvIGxlYXJuIG1vcmUgbm93IGFuZCBtYXkgaGF2ZSBhIHByb2plY3QgaW4gdGhlIGZ1dHVyZTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF8yXzgnIGNsYXNzPSdnZmllbGQgZ2ZfcmlnaHRfaGFsZiBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZScgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzJfOCcgPldoYXQgdGltZSBvZiBkYXkgd291bGQgeW91IGxpa2UgdG8gdmlzaXQ/PHNwYW4gY2xhc3M9J2dmaWVsZF9yZXF1aXJlZCc+Kjwvc3Bhbj48L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl9zZWxlY3QnPjxzZWxlY3QgbmFtZT0naW5wdXRfOCcgaWQ9J2lucHV0XzJfOCcgIGNsYXNzPSdtZWRpdW0gZ2ZpZWxkX3NlbGVjdCcgdGFiaW5kZXg9JzEyJyAgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSI+PG9wdGlvbiB2YWx1ZT0nJyBzZWxlY3RlZD0nc2VsZWN0ZWQnIGNsYXNzPSdnZl9wbGFjZWhvbGRlcic+U2VsZWN0IHRoZSBvcHRpb248L29wdGlvbj48b3B0aW9uIHZhbHVlPSdNb3JuaW5nJyA+TW9ybmluZzwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J01pZC1kYXknID5NaWQtZGF5PC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nQWZ0ZXJub29uJyA+QWZ0ZXJub29uPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0nSSYjMDM5O20gZmxleGlibGUnID5JJiMwMzk7bSBmbGV4aWJsZTwvb3B0aW9uPjwvc2VsZWN0PjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF8yXzknIGNsYXNzPSdnZmllbGQgZmllbGRfc3VibGFiZWxfYmVsb3cgZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZScgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzJfOScgPldoYXQgd291bGQgeW91IGxpa2UgdG8gc2VlIGR1cmluZyB5b3VyIHZpc2l0PzwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3RleHRhcmVhJz48dGV4dGFyZWEgbmFtZT0naW5wdXRfOScgaWQ9J2lucHV0XzJfOScgY2xhc3M9J3RleHRhcmVhIGxhcmdlJyB0YWJpbmRleD0nMTMnICAgIGFyaWEtaW52YWxpZD0iZmFsc2UiICAgcm93cz0nMTAnIGNvbHM9JzUwJz48L3RleHRhcmVhPjwvZGl2PjwvbGk+PGxpIGlkPSdmaWVsZF8yXzEwJyBjbGFzcz0nZ2ZpZWxkIGdmb3JtX3ZhbGlkYXRpb25fY29udGFpbmVyIGZpZWxkX3N1YmxhYmVsX2JlbG93IGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5XycgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsJyBmb3I9J2lucHV0XzJfMTAnID5FbWFpbDwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lcic+PGlucHV0IG5hbWU9J2lucHV0XzEwJyBpZD0naW5wdXRfMl8xMCcgdHlwZT0ndGV4dCcgdmFsdWU9JycgLz48L2Rpdj48ZGl2IGNsYXNzPSdnZmllbGRfZGVzY3JpcHRpb24nPlRoaXMgZmllbGQgaXMgZm9yIHZhbGlkYXRpb24gcHVycG9zZXMgYW5kIHNob3VsZCBiZSBsZWZ0IHVuY2hhbmdlZC48L2Rpdj48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybV9mb290ZXIgdG9wX2xhYmVsJz4gPGlucHV0IHR5cGU9J3N1Ym1pdCcgaWQ9J2dmb3JtX3N1Ym1pdF9idXR0b25fMicgY2xhc3M9J2dmb3JtX2J1dHRvbiBidXR0b24nIHZhbHVlPSdTdWJtaXQnIHRhYmluZGV4PScxNCcgb25jbGljaz0naWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzIiXSl7cmV0dXJuIGZhbHNlO30gIHdpbmRvd1siZ2Zfc3VibWl0dGluZ18yIl09dHJ1ZTsgICcgb25rZXlwcmVzcz0naWYoIGV2ZW50LmtleUNvZGUgPT0gMTMgKXsgaWYod2luZG93WyJnZl9zdWJtaXR0aW5nXzIiXSl7cmV0dXJuIGZhbHNlO30gd2luZG93WyJnZl9zdWJtaXR0aW5nXzIiXT10cnVlOyAgalF1ZXJ5KCIjZ2Zvcm1fMiIpLnRyaWdnZXIoInN1Ym1pdCIsW3RydWVdKTsgfScgLz4gPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fYWpheCcgdmFsdWU9J2Zvcm1faWQ9MiZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2lzX3N1Ym1pdF8yJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nMicgLz4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J2dmb3JtX3VuaXF1ZV9pZCcgdmFsdWU9JycgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nc3RhdGVfMicgdmFsdWU9J1d5SmJYU0lzSWprMFptWTBOek5rT0RrNE9UZzRZelV6TmpGa05XWmpObVEzWVRFellUZ3pJbDA9JyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfMicgaWQ9J2dmb3JtX3RhcmdldF9wYWdlX251bWJlcl8yJyB2YWx1ZT0nMCcgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzInIGlkPSdnZm9ybV9zb3VyY2VfcGFnZV9udW1iZXJfMicgdmFsdWU9JzEnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIG5hbWU9J2dmb3JtX2ZpZWxkX3ZhbHVlcycgdmFsdWU9JycgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8aWZyYW1lIHN0eWxlPSdkaXNwbGF5Om5vbmU7d2lkdGg6MHB4O2hlaWdodDowcHg7JyBzcmM9J2Fib3V0OmJsYW5rJyBuYW1lPSdnZm9ybV9hamF4X2ZyYW1lXzInIGlkPSdnZm9ybV9hamF4X2ZyYW1lXzInPlRoaXMgaWZyYW1lIGNvbnRhaW5zIHRoZSBsb2dpYyByZXF1aXJlZCB0byBoYW5kbGUgQUpBWCBwb3dlcmVkIEdyYXZpdHkgRm9ybXMuPC9pZnJhbWU+CiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+alF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKXtnZm9ybUluaXRTcGlubmVyKCAyLCAnaHR0cHM6Ly93d3cucGhhbmQuY2Evd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KCcjZ2Zvcm1fYWpheF9mcmFtZV8yJykubG9hZCggZnVuY3Rpb24oKXt2YXIgY29udGVudHMgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcqJykuaHRtbCgpO3ZhciBpc19wb3N0YmFjayA9IGNvbnRlbnRzLmluZGV4T2YoJ0dGX0FKQVhfUE9TVEJBQ0snKSA+PSAwO2lmKCFpc19wb3N0YmFjayl7cmV0dXJuO312YXIgZm9ybV9jb250ZW50ID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnI2dmb3JtX3dyYXBwZXJfMicpO3ZhciBpc19jb25maXJtYXRpb24gPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1fY29uZmlybWF0aW9uX3dyYXBwZXJfMicpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMicpLmh0bWwoZm9ybV9jb250ZW50Lmh0bWwoKSk7aWYoZm9ybV9jb250ZW50Lmhhc0NsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJykpe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMicpLmFkZENsYXNzKCdnZm9ybV92YWxpZGF0aW9uX2Vycm9yJyk7fSBlbHNlIHtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzInKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzInKS5vZmZzZXQoKS50b3ApOyB9LCA1MCApO2lmKHdpbmRvd1snZ2Zvcm1Jbml0RGF0ZXBpY2tlciddKSB7Z2Zvcm1Jbml0RGF0ZXBpY2tlcigpO31pZih3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10pIHtnZm9ybUluaXRQcmljZUZpZWxkcygpO312YXIgY3VycmVudF9wYWdlID0galF1ZXJ5KCcjZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzInKS52YWwoKTtnZm9ybUluaXRTcGlubmVyKCAyLCAnaHR0cHM6Ly93d3cucGhhbmQuY2Evd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5naWYnICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFsyLCBjdXJyZW50X3BhZ2VdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfMiddID0gZmFsc2U7fWVsc2UgaWYoIWlzX3JlZGlyZWN0KXt2YXIgY29uZmlybWF0aW9uX2NvbnRlbnQgPSBqUXVlcnkodGhpcykuY29udGVudHMoKS5maW5kKCcjZ2Zvcm1zX2NvbmZpcm1hdGlvbl9tZXNzYWdlXzInKS5odG1sKCk7aWYoIWNvbmZpcm1hdGlvbl9jb250ZW50KXtjb25maXJtYXRpb25fY29udGVudCA9IGNvbnRlbnRzO31zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8yJykucmVwbGFjZVdpdGgoJzwnICsgJ2RpdiBpZD1cJ2dmb3Jtc19jb25maXJtYXRpb25fbWVzc2FnZV8yXCcgY2xhc3M9XCdnZm9ybV9jb25maXJtYXRpb25fbWVzc2FnZV8yIGdmb3Jtc19jb25maXJtYXRpb25fbWVzc2FnZVwnJyArICc+JyArIGNvbmZpcm1hdGlvbl9jb250ZW50ICsgJzwnICsgJy9kaXYnICsgJz4nKTtqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybXNfY29uZmlybWF0aW9uX21lc3NhZ2VfMicpLm9mZnNldCgpLnRvcCk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9jb25maXJtYXRpb25fbG9hZGVkJywgWzJdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfMiddID0gZmFsc2U7fSwgNTApO31lbHNle2pRdWVyeSgnI2dmb3JtXzInKS5hcHBlbmQoY29udGVudHMpO2lmKHdpbmRvd1snZ2Zvcm1SZWRpcmVjdCddKSB7Z2Zvcm1SZWRpcmVjdCgpO319alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wb3N0X3JlbmRlcicsIFsyLCBjdXJyZW50X3BhZ2VdKTt9ICk7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4gaWYodHlwZW9mIGdmX2dsb2JhbCA9PSAndW5kZWZpbmVkJykgdmFyIGdmX2dsb2JhbCA9IHsiZ2ZfY3VycmVuY3lfY29uZmlnIjp7Im5hbWUiOiJDYW5hZGlhbiBEb2xsYXIiLCJzeW1ib2xfbGVmdCI6IiQiLCJzeW1ib2xfcmlnaHQiOiJDQUQiLCJzeW1ib2xfcGFkZGluZyI6IiAiLCJ0aG91c2FuZF9zZXBhcmF0b3IiOiIsIiwiZGVjaW1hbF9zZXBhcmF0b3IiOiIuIiwiZGVjaW1hbHMiOjJ9LCJiYXNlX3VybCI6Imh0dHBzOlwvXC93d3cucGhhbmQuY2FcL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3JtcyIsIm51bWJlcl9mb3JtYXRzIjpbXSwic3Bpbm5lclVybCI6Imh0dHBzOlwvXC93d3cucGhhbmQuY2FcL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2dyYXZpdHlmb3Jtc1wvaW1hZ2VzXC9zcGlubmVyLmdpZiJ9O2pRdWVyeShkb2N1bWVudCkuYmluZCgnZ2Zvcm1fcG9zdF9yZW5kZXInLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBjdXJyZW50UGFnZSl7aWYoZm9ybUlkID09IDIpIHtpZih0eXBlb2YgUGxhY2Vob2xkZXJzICE9ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgUGxhY2Vob2xkZXJzLmVuYWJsZSgpOwogICAgICAgICAgICAgICAgICAgIH1pZighLyhhbmRyb2lkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpe2pRdWVyeSgnI2lucHV0XzJfMycpLm1hc2soJyg5OTkpIDk5OS05OTk5JykuYmluZCgna2V5cHJlc3MnLCBmdW5jdGlvbihlKXtpZihlLndoaWNoID09IDEzKXtqUXVlcnkodGhpcykuYmx1cigpO30gfSApO319IH0gKTtqUXVlcnkoZG9jdW1lbnQpLmJpbmQoJ2dmb3JtX3Bvc3RfY29uZGl0aW9uYWxfbG9naWMnLCBmdW5jdGlvbihldmVudCwgZm9ybUlkLCBmaWVsZHMsIGlzSW5pdCl7fSApOzwvc2NyaXB0PjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4galF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe2pRdWVyeShkb2N1bWVudCkudHJpZ2dlcignZ2Zvcm1fcG9zdF9yZW5kZXInLCBbMiwgMV0pIH0gKTsgPC9zY3JpcHQ+