Want to know more about our gum disease treatments? Or why maintaining healthy gums is so important? Download our FREE guide here!
Your Guide to Gum Disease
![](https://pacificperio.com.au/wp-content/uploads/2018/05/gum-disease-guide-mockup.png)
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8tLS0tLS0gSkFWQVNDUklQVCBIT09LIEZVTkNUSU9OUyBGT1IgR1JBVklUWSBGT1JNUyAtLS0tLS0tCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCAhIGdmb3JtICkgewoJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2dmb3JtX21haW5fc2NyaXB0c19sb2FkZWQnLCBmdW5jdGlvbigpIHsgZ2Zvcm0uc2NyaXB0c0xvYWRlZCA9IHRydWU7IH0gKTsKCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdnZm9ybS90aGVtZS9zY3JpcHRzX2xvYWRlZCcsIGZ1bmN0aW9uKCkgeyBnZm9ybS50aGVtZVNjcmlwdHNMb2FkZWQgPSB0cnVlOyB9ICk7Cgl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCBmdW5jdGlvbigpIHsgZ2Zvcm0uZG9tTG9hZGVkID0gdHJ1ZTsgfSApOwoKCXZhciBnZm9ybSA9IHsKCQlkb21Mb2FkZWQ6IGZhbHNlLAoJCXNjcmlwdHNMb2FkZWQ6IGZhbHNlLAoJCXRoZW1lU2NyaXB0c0xvYWRlZDogZmFsc2UsCgkJaXNGb3JtRWRpdG9yOiAoKSA9PiB0eXBlb2YgSW5pdGlhbGl6ZUVkaXRvciA9PT0gJ2Z1bmN0aW9uJywKCgkJLyoqCgkJICogQGRlcHJlY2F0ZWQgMi45IHRoZSB1c2Ugb2YgaW5pdGlhbGl6ZU9uTG9hZGVkIGluIHRoZSBmb3JtIGVkaXRvciBjb250ZXh0IGlzIGRlcHJlY2F0ZWQuCgkJICogQHJlbW92ZS1pbiAzLjEgdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBjaGVjayBmb3IgZ2Zvcm0uaXNGb3JtRWRpdG9yKCkuCgkJICovCgkJY2FsbElmTG9hZGVkOiBmdW5jdGlvbiAoIGZuICkgewoJCQlpZiAoIGdmb3JtLmRvbUxvYWRlZCAmJiBnZm9ybS5zY3JpcHRzTG9hZGVkICYmICggZ2Zvcm0udGhlbWVTY3JpcHRzTG9hZGVkIHx8IGdmb3JtLmlzRm9ybUVkaXRvcigpICkgKSB7CgkJCQlpZiAoIGdmb3JtLmlzRm9ybUVkaXRvcigpICkgewoJCQkJCWNvbnNvbGUud2FybiggJ1RoZSB1c2Ugb2YgZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCkgaXMgZGVwcmVjYXRlZCBpbiB0aGUgZm9ybSBlZGl0b3IgY29udGV4dCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIEdyYXZpdHkgRm9ybXMgMy4xLicgKTsKCQkJCX0KCQkJCWZuKCk7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfSwKCgkJLyoqCgkJICogQ2FsbCBhIGZ1bmN0aW9uIHdoZW4gYWxsIHNjcmlwdHMgYXJlIGxvYWRlZAoJCSAqCgkJICogQHBhcmFtIGZ1bmN0aW9uIGZuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYWxsIHNjcmlwdHMgYXJlIGxvYWRlZAoJCSAqCgkJICogQHJldHVybnMgdm9pZAoJCSAqLwoJCWluaXRpYWxpemVPbkxvYWRlZDogZnVuY3Rpb24oIGZuICkgewoJCQlpZiAoICEgZ2Zvcm0uY2FsbElmTG9hZGVkKCBmbiApICkgewoJCQkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggJ2dmb3JtX21haW5fc2NyaXB0c19sb2FkZWQnLCAoKSA9PiB7IGdmb3JtLnNjcmlwdHNMb2FkZWQgPSB0cnVlOyBnZm9ybS5jYWxsSWZMb2FkZWQoIGZuICk7IH0gKTsKCQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoICdnZm9ybS90aGVtZS9zY3JpcHRzX2xvYWRlZCcsICgpID0+IHsgZ2Zvcm0udGhlbWVTY3JpcHRzTG9hZGVkID0gdHJ1ZTsgZ2Zvcm0uY2FsbElmTG9hZGVkKCBmbiApOyB9ICk7CgkJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7IGdmb3JtLmRvbUxvYWRlZCA9IHRydWU7IGdmb3JtLmNhbGxJZkxvYWRlZCggZm4gKTsgfSApOwoJCQl9CgkJfSwKCgkJaG9va3M6IHsgYWN0aW9uOiB7fSwgZmlsdGVyOiB7fSB9LAoJCWFkZEFjdGlvbjogZnVuY3Rpb24oIGFjdGlvbiwgY2FsbGFibGUsIHByaW9yaXR5LCB0YWcgKSB7CgkJCWdmb3JtLmFkZEhvb2soICdhY3Rpb24nLCBhY3Rpb24sIGNhbGxhYmxlLCBwcmlvcml0eSwgdGFnICk7CgkJfSwKCQlhZGRGaWx0ZXI6IGZ1bmN0aW9uKCBhY3Rpb24sIGNhbGxhYmxlLCBwcmlvcml0eSwgdGFnICkgewoJCQlnZm9ybS5hZGRIb29rKCAnZmlsdGVyJywgYWN0aW9uLCBjYWxsYWJsZSwgcHJpb3JpdHksIHRhZyApOwoJCX0sCgkJZG9BY3Rpb246IGZ1bmN0aW9uKCBhY3Rpb24gKSB7CgkJCWdmb3JtLmRvSG9vayggJ2FjdGlvbicsIGFjdGlvbiwgYXJndW1lbnRzICk7CgkJfSwKCQlhcHBseUZpbHRlcnM6IGZ1bmN0aW9uKCBhY3Rpb24gKSB7CgkJCXJldHVybiBnZm9ybS5kb0hvb2soICdmaWx0ZXInLCBhY3Rpb24sIGFyZ3VtZW50cyApOwoJCX0sCgkJcmVtb3ZlQWN0aW9uOiBmdW5jdGlvbiggYWN0aW9uLCB0YWcgKSB7CgkJCWdmb3JtLnJlbW92ZUhvb2soICdhY3Rpb24nLCBhY3Rpb24sIHRhZyApOwoJCX0sCgkJcmVtb3ZlRmlsdGVyOiBmdW5jdGlvbiggYWN0aW9uLCBwcmlvcml0eSwgdGFnICkgewoJCQlnZm9ybS5yZW1vdmVIb29rKCAnZmlsdGVyJywgYWN0aW9uLCBwcmlvcml0eSwgdGFnICk7CgkJfSwKCQlhZGRIb29rOiBmdW5jdGlvbiggaG9va1R5cGUsIGFjdGlvbiwgY2FsbGFibGUsIHByaW9yaXR5LCB0YWcgKSB7CgkJCWlmICggdW5kZWZpbmVkID09IGdmb3JtLmhvb2tzW2hvb2tUeXBlXVthY3Rpb25dICkgewoJCQkJZ2Zvcm0uaG9va3NbaG9va1R5cGVdW2FjdGlvbl0gPSBbXTsKCQkJfQoJCQl2YXIgaG9va3MgPSBnZm9ybS5ob29rc1tob29rVHlwZV1bYWN0aW9uXTsKCQkJaWYgKCB1bmRlZmluZWQgPT0gdGFnICkgewoJCQkJdGFnID0gYWN0aW9uICsgJ18nICsgaG9va3MubGVuZ3RoOwoJCQl9CgkJCWlmKCBwcmlvcml0eSA9PSB1bmRlZmluZWQgKXsKCQkJCXByaW9yaXR5ID0gMTA7CgkJCX0KCgkJCWdmb3JtLmhvb2tzW2hvb2tUeXBlXVthY3Rpb25dLnB1c2goIHsgdGFnOnRhZywgY2FsbGFibGU6Y2FsbGFibGUsIHByaW9yaXR5OnByaW9yaXR5IH0gKTsKCQl9LAoJCWRvSG9vazogZnVuY3Rpb24oIGhvb2tUeXBlLCBhY3Rpb24sIGFyZ3MgKSB7CgoJCQkvLyBzcGxpY2UgYXJncyBmcm9tIG9iamVjdCBpbnRvIGFycmF5IGFuZCByZW1vdmUgZmlyc3QgaW5kZXggd2hpY2ggaXMgdGhlIGhvb2sgbmFtZQoJCQlhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncywgMSk7CgoJCQlpZiAoIHVuZGVmaW5lZCAhPSBnZm9ybS5ob29rc1tob29rVHlwZV1bYWN0aW9uXSApIHsKCQkJCXZhciBob29rcyA9IGdmb3JtLmhvb2tzW2hvb2tUeXBlXVthY3Rpb25dLCBob29rOwoJCQkJLy9zb3J0IGJ5IHByaW9yaXR5CgkJCQlob29rcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbInByaW9yaXR5Il0tYlsicHJpb3JpdHkiXX0pOwoKCQkJCWhvb2tzLmZvckVhY2goIGZ1bmN0aW9uKCBob29rSXRlbSApIHsKCQkJCQlob29rID0gaG9va0l0ZW0uY2FsbGFibGU7CgoJCQkJCWlmKHR5cGVvZiBob29rICE9ICdmdW5jdGlvbicpCgkJCQkJCWhvb2sgPSB3aW5kb3dbaG9va107CgkJCQkJaWYgKCAnYWN0aW9uJyA9PSBob29rVHlwZSApIHsKCQkJCQkJaG9vay5hcHBseShudWxsLCBhcmdzKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlhcmdzWzBdID0gaG9vay5hcHBseShudWxsLCBhcmdzKTsKCQkJCQl9CgkJCQl9ICk7CgkJCX0KCQkJaWYgKCAnZmlsdGVyJz09aG9va1R5cGUgKSB7CgkJCQlyZXR1cm4gYXJnc1swXTsKCQkJfQoJCX0sCgkJcmVtb3ZlSG9vazogZnVuY3Rpb24oIGhvb2tUeXBlLCBhY3Rpb24sIHByaW9yaXR5LCB0YWcgKSB7CgkJCWlmICggdW5kZWZpbmVkICE9IGdmb3JtLmhvb2tzW2hvb2tUeXBlXVthY3Rpb25dICkgewoJCQkJdmFyIGhvb2tzID0gZ2Zvcm0uaG9va3NbaG9va1R5cGVdW2FjdGlvbl07CgkJCQlob29rcyA9IGhvb2tzLmZpbHRlciggZnVuY3Rpb24oaG9vaywgaW5kZXgsIGFycikgewoJCQkJCXZhciByZW1vdmVIb29rID0gKHVuZGVmaW5lZD09dGFnfHx0YWc9PWhvb2sudGFnKSAmJiAodW5kZWZpbmVkPT1wcmlvcml0eXx8cHJpb3JpdHk9PWhvb2sucHJpb3JpdHkpOwoJCQkJCXJldHVybiAhcmVtb3ZlSG9vazsKCQkJCX0gKTsKCQkJCWdmb3JtLmhvb2tzW2hvb2tUeXBlXVthY3Rpb25dID0gaG9va3M7CgkJCX0KCQl9Cgl9Owp9Cjwvc2NyaXB0PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZ2ZfYnJvd3Nlcl9nZWNrbyBnZm9ybV93cmFwcGVyIGdmb3JtX2xlZ2FjeV9tYXJrdXBfd3JhcHBlciBnZm9ybS10aGVtZS0tbm8tZnJhbWV3b3JrIGNvbnRhY3QtZm9ybXNfd3JhcHBlciBncGxhY2Vob2xkZXJfd3JhcHBlcicgZGF0YS1mb3JtLXRoZW1lPSdsZWdhY3knIGRhdGEtZm9ybS1pbmRleD0nMCcgaWQ9J2dmb3JtX3dyYXBwZXJfMTEnID48ZGl2IGlkPSdnZl8xMScgY2xhc3M9J2dmb3JtX2FuY2hvcicgdGFiaW5kZXg9Jy0xJz48L2Rpdj48Zm9ybSBtZXRob2Q9J3Bvc3QnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnIHRhcmdldD0nZ2Zvcm1fYWpheF9mcmFtZV8xMScgaWQ9J2dmb3JtXzExJyBjbGFzcz0nY29udGFjdC1mb3JtcyBncGxhY2Vob2xkZXInIGFjdGlvbj0nL3doeS1jaG9vc2UtdXMvb3VyLXRlYW0vYW5uYS1wdGFrLyNnZl8xMScgZGF0YS1mb3JtaWQ9JzExJyBub3ZhbGlkYXRlPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybS1ib2R5IGdmb3JtX2JvZHknPjx1bCBpZD0nZ2Zvcm1fZmllbGRzXzExJyBjbGFzcz0nZ2Zvcm1fZmllbGRzIHRvcF9sYWJlbCBmb3JtX3N1YmxhYmVsX2JlbG93IGRlc2NyaXB0aW9uX2JlbG93IHZhbGlkYXRpb25fYmVsb3cnPjxsaSBpZD0iZmllbGRfMTFfMTAiIGNsYXNzPSJnZmllbGQgZ2ZpZWxkLS10eXBlLXRleHQgZ2ZpZWxkX2NvbnRhaW5zX3JlcXVpcmVkIGZpZWxkX3N1YmxhYmVsX2JlbG93IGdmaWVsZC0tbm8tZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgaGlkZGVuX2xhYmVsIGZpZWxkX3ZhbGlkYXRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF8xMV8xMCIgPjxsYWJlbCBjbGFzcz0nZ2ZpZWxkX2xhYmVsIGdmb3JtLWZpZWxkLWxhYmVsJyBmb3I9J2lucHV0XzExXzEwJz5Zb3VyIE5hbWU8c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIj48c3BhbiBjbGFzcz0iZ2ZpZWxkX3JlcXVpcmVkIGdmaWVsZF9yZXF1aXJlZF9hc3RlcmlzayI+Kjwvc3Bhbj48L3NwYW4+PC9sYWJlbD48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfdGV4dCc+PGlucHV0IG5hbWU9J2lucHV0XzEwJyBpZD0naW5wdXRfMTFfMTAnIHR5cGU9J3RleHQnIHZhbHVlPScnIGNsYXNzPSdsYXJnZScgICB0YWJpbmRleD0nNTAnIHBsYWNlaG9sZGVyPSdZb3VyIE5hbWUgKicgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSIgICAvPjwvZGl2PjwvbGk+PGxpIGlkPSJmaWVsZF8xMV8zIiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS1lbWFpbCBnZmllbGRfY29udGFpbnNfcmVxdWlyZWQgZmllbGRfc3VibGFiZWxfYmVsb3cgZ2ZpZWxkLS1uby1kZXNjcmlwdGlvbiBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBoaWRkZW5fbGFiZWwgZmllbGRfdmFsaWRhdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlIiAgZGF0YS1qcy1yZWxvYWQ9ImZpZWxkXzExXzMiID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbCcgZm9yPSdpbnB1dF8xMV8zJz5Zb3VyIEVtYWlsPHNwYW4gY2xhc3M9ImdmaWVsZF9yZXF1aXJlZCI+PHNwYW4gY2xhc3M9ImdmaWVsZF9yZXF1aXJlZCBnZmllbGRfcmVxdWlyZWRfYXN0ZXJpc2siPio8L3NwYW4+PC9zcGFuPjwvbGFiZWw+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX2VtYWlsJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSdpbnB1dF8zJyBpZD0naW5wdXRfMTFfMycgdHlwZT0nZW1haWwnIHZhbHVlPScnIGNsYXNzPSdsYXJnZScgdGFiaW5kZXg9JzUxJyAgcGxhY2Vob2xkZXI9J1lvdXIgRW1haWwgKicgYXJpYS1yZXF1aXJlZD0idHJ1ZSIgYXJpYS1pbnZhbGlkPSJmYWxzZSIgIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvbGk+PGxpIGlkPSJmaWVsZF8xMV8xNyIgY2xhc3M9ImdmaWVsZCBnZmllbGQtLXR5cGUtaGlkZGVuIGdmb3JtX2hpZGRlbiBmaWVsZF9zdWJsYWJlbF9iZWxvdyBnZmllbGQtLW5vLWRlc2NyaXB0aW9uIGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGZpZWxkX3ZhbGlkYXRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF8xMV8xNyIgPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl90ZXh0Jz48aW5wdXQgbmFtZT0naW5wdXRfMTcnIGlkPSdpbnB1dF8xMV8xNycgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyAgYXJpYS1pbnZhbGlkPSJmYWxzZSIgdmFsdWU9JzEyNDUnIC8+PC9kaXY+PC9saT48bGkgaWQ9ImZpZWxkXzExXzE1IiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS1oaWRkZW4gZ2Zvcm1faGlkZGVuIGZpZWxkX3N1YmxhYmVsX2JlbG93IGdmaWVsZC0tbm8tZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZmllbGRfdmFsaWRhdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlIiAgZGF0YS1qcy1yZWxvYWQ9ImZpZWxkXzExXzE1IiA+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3RleHQnPjxpbnB1dCBuYW1lPSdpbnB1dF8xNScgaWQ9J2lucHV0XzExXzE1JyB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nICBhcmlhLWludmFsaWQ9ImZhbHNlIiB2YWx1ZT0nR3VtIERpc2Vhc2UgR3VpZGUnIC8+PC9kaXY+PC9saT48bGkgaWQ9ImZpZWxkXzExXzE2IiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS1oaWRkZW4gZ2Zvcm1faGlkZGVuIGZpZWxkX3N1YmxhYmVsX2JlbG93IGdmaWVsZC0tbm8tZGVzY3JpcHRpb24gZmllbGRfZGVzY3JpcHRpb25fYmVsb3cgZmllbGRfdmFsaWRhdGlvbl9iZWxvdyBnZmllbGRfdmlzaWJpbGl0eV92aXNpYmxlIiAgZGF0YS1qcy1yZWxvYWQ9ImZpZWxkXzExXzE2IiA+PGRpdiBjbGFzcz0nZ2lucHV0X2NvbnRhaW5lciBnaW5wdXRfY29udGFpbmVyX3RleHQnPjxpbnB1dCBuYW1lPSdpbnB1dF8xNicgaWQ9J2lucHV0XzExXzE2JyB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nICBhcmlhLWludmFsaWQ9ImZhbHNlIiB2YWx1ZT0nJyAvPjwvZGl2PjwvbGk+PGxpIGlkPSJmaWVsZF8xMV8xOCIgY2xhc3M9ImdmaWVsZCBnZmllbGQtLXR5cGUtaGlkZGVuIGdmb3JtX2hpZGRlbiBmaWVsZF9zdWJsYWJlbF9iZWxvdyBnZmllbGQtLW5vLWRlc2NyaXB0aW9uIGZpZWxkX2Rlc2NyaXB0aW9uX2JlbG93IGZpZWxkX3ZhbGlkYXRpb25fYmVsb3cgZ2ZpZWxkX3Zpc2liaWxpdHlfdmlzaWJsZSIgIGRhdGEtanMtcmVsb2FkPSJmaWVsZF8xMV8xOCIgPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXIgZ2lucHV0X2NvbnRhaW5lcl90ZXh0Jz48aW5wdXQgbmFtZT0naW5wdXRfMTgnIGlkPSdpbnB1dF8xMV8xOCcgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyAgYXJpYS1pbnZhbGlkPSJmYWxzZSIgdmFsdWU9JycgLz48L2Rpdj48L2xpPjxsaSBpZD0iZmllbGRfMTFfMjAiIGNsYXNzPSJnZmllbGQgZ2ZpZWxkLS10eXBlLWhpZGRlbiBnZm9ybV9oaWRkZW4gZmllbGRfc3VibGFiZWxfYmVsb3cgZ2ZpZWxkLS1uby1kZXNjcmlwdGlvbiBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBmaWVsZF92YWxpZGF0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5X3Zpc2libGUiICBkYXRhLWpzLXJlbG9hZD0iZmllbGRfMTFfMjAiID48ZGl2IGNsYXNzPSdnaW5wdXRfY29udGFpbmVyIGdpbnB1dF9jb250YWluZXJfdGV4dCc+PGlucHV0IG5hbWU9J2lucHV0XzIwJyBpZD0naW5wdXRfMTFfMjAnIHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgIGFyaWEtaW52YWxpZD0iZmFsc2UiIHZhbHVlPScnIC8+PC9kaXY+PC9saT48bGkgaWQ9ImZpZWxkXzExXzIxIiBjbGFzcz0iZ2ZpZWxkIGdmaWVsZC0tdHlwZS1ob25leXBvdCBnZm9ybV92YWxpZGF0aW9uX2NvbnRhaW5lciBmaWVsZF9zdWJsYWJlbF9iZWxvdyBnZmllbGQtLWhhcy1kZXNjcmlwdGlvbiBmaWVsZF9kZXNjcmlwdGlvbl9iZWxvdyBmaWVsZF92YWxpZGF0aW9uX2JlbG93IGdmaWVsZF92aXNpYmlsaXR5X3Zpc2libGUiICBkYXRhLWpzLXJlbG9hZD0iZmllbGRfMTFfMjEiID48bGFiZWwgY2xhc3M9J2dmaWVsZF9sYWJlbCBnZm9ybS1maWVsZC1sYWJlbCcgZm9yPSdpbnB1dF8xMV8yMSc+UGhvbmU8L2xhYmVsPjxkaXYgY2xhc3M9J2dpbnB1dF9jb250YWluZXInPjxpbnB1dCBuYW1lPSdpbnB1dF8yMScgaWQ9J2lucHV0XzExXzIxJyB0eXBlPSd0ZXh0JyB2YWx1ZT0nJyBhdXRvY29tcGxldGU9J25ldy1wYXNzd29yZCcvPjwvZGl2PjxkaXYgY2xhc3M9J2dmaWVsZF9kZXNjcmlwdGlvbicgaWQ9J2dmaWVsZF9kZXNjcmlwdGlvbl8xMV8yMSc+VGhpcyBmaWVsZCBpcyBmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcyBhbmQgc2hvdWxkIGJlIGxlZnQgdW5jaGFuZ2VkLjwvZGl2PjwvbGk+PC91bD48L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSdnZm9ybS1mb290ZXIgZ2Zvcm1fZm9vdGVyIHRvcF9sYWJlbCc+IAoJCTxkaXYgY2xhc3M9InNlY3Rpb24tYnV0dG9uIj4KCSAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGlkPSJnZm9ybV9zdWJtaXRfYnV0dG9uXzExIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij4KCQkgICAgICAgIERvd25sb2FkIG5vdwoJCQk8L2J1dHRvbj4KCQk8L2Rpdj4KICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdnZm9ybV9hamF4JyB2YWx1ZT0nZm9ybV9pZD0xMSZhbXA7dGl0bGU9JmFtcDtkZXNjcmlwdGlvbj0mYW1wO3RhYmluZGV4PTUwJmFtcDt0aGVtZT1sZWdhY3kmYW1wO3N0eWxlcz1bXSZhbXA7aGFzaD1lMjgyZDZjM2Y5NjA2MzVkYzY3OGI2Nzg2MTdkNDQ3MCcgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWlzc2lvbl9tZXRob2QnIGRhdGEtanM9J2dmb3JtX3N1Ym1pc3Npb25fbWV0aG9kXzExJyB2YWx1ZT0naWZyYW1lJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90aGVtZScgZGF0YS1qcz0nZ2Zvcm1fdGhlbWVfMTEnIGlkPSdnZm9ybV90aGVtZV8xMScgdmFsdWU9J2xlZ2FjeScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3R5bGVfc2V0dGluZ3MnIGRhdGEtanM9J2dmb3JtX3N0eWxlX3NldHRpbmdzXzExJyBpZD0nZ2Zvcm1fc3R5bGVfc2V0dGluZ3NfMTEnIHZhbHVlPSdbXScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0naXNfc3VibWl0XzExJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc3VibWl0JyB2YWx1ZT0nMTEnIC8+CiAgICAgICAgICAgIAogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV91bmlxdWVfaWQnIHZhbHVlPScnIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGNsYXNzPSdnZm9ybV9oaWRkZW4nIG5hbWU9J3N0YXRlXzExJyB2YWx1ZT0nV3lKYlhTSXNJbVUwTVdGbU0yUm1OREl3TW1RMk5tWXhPV0U0WkRNMk9UUXlObVk0WkdZMElsMD0nIC8+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGF1dG9jb21wbGV0ZT0nb2ZmJyBjbGFzcz0nZ2Zvcm1faGlkZGVuJyBuYW1lPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfMTEnIGlkPSdnZm9ybV90YXJnZXRfcGFnZV9udW1iZXJfMTEnIHZhbHVlPScwJyAvPgogICAgICAgICAgICA8aW5wdXQgdHlwZT0naGlkZGVuJyBhdXRvY29tcGxldGU9J29mZicgY2xhc3M9J2dmb3JtX2hpZGRlbicgbmFtZT0nZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzExJyBpZD0nZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzExJyB2YWx1ZT0nMScgLz4KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nZ2Zvcm1fZmllbGRfdmFsdWVzJyB2YWx1ZT0nZWJvb2tfaWQ9MTI0NSZhbXA7ZWJvb2tfYWN0aXZlX2NhbXBhaWduX3RhZz1HdW0rRGlzZWFzZStHdWlkZScgLz4KICAgICAgICAgICAgCiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgkJICAgICAgICAgICAgICAgIDxpZnJhbWUgc3R5bGU9J2Rpc3BsYXk6bm9uZTt3aWR0aDowcHg7aGVpZ2h0OjBweDsnIHNyYz0nYWJvdXQ6YmxhbmsnIG5hbWU9J2dmb3JtX2FqYXhfZnJhbWVfMTEnIGlkPSdnZm9ybV9hamF4X2ZyYW1lXzExJyB0aXRsZT0nVGhpcyBpZnJhbWUgY29udGFpbnMgdGhlIGxvZ2ljIHJlcXVpcmVkIHRvIGhhbmRsZSBBamF4IHBvd2VyZWQgR3Jhdml0eSBGb3Jtcy4nPjwvaWZyYW1lPgoJCSAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8qIDwhW0NEQVRBWyAqLwogZ2Zvcm0uaW5pdGlhbGl6ZU9uTG9hZGVkKCBmdW5jdGlvbigpIHtnZm9ybUluaXRTcGlubmVyKCAxMSwgJ2h0dHBzOi8vcGFjaWZpY3BlcmlvLmNvbS5hdS93cC1jb250ZW50L3BsdWdpbnMvZ3Jhdml0eWZvcm1zL2ltYWdlcy9zcGlubmVyLnN2ZycsIHRydWUgKTtqUXVlcnkoJyNnZm9ybV9hamF4X2ZyYW1lXzExJykub24oJ2xvYWQnLGZ1bmN0aW9uKCl7dmFyIGNvbnRlbnRzID0galF1ZXJ5KHRoaXMpLmNvbnRlbnRzKCkuZmluZCgnKicpLmh0bWwoKTt2YXIgaXNfcG9zdGJhY2sgPSBjb250ZW50cy5pbmRleE9mKCdHRl9BSkFYX1BPU1RCQUNLJykgPj0gMDtpZighaXNfcG9zdGJhY2spe3JldHVybjt9dmFyIGZvcm1fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV93cmFwcGVyXzExJyk7dmFyIGlzX2NvbmZpcm1hdGlvbiA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJyNnZm9ybV9jb25maXJtYXRpb25fd3JhcHBlcl8xMScpLmxlbmd0aCA+IDA7dmFyIGlzX3JlZGlyZWN0ID0gY29udGVudHMuaW5kZXhPZignZ2Zvcm1SZWRpcmVjdCgpeycpID49IDA7dmFyIGlzX2Zvcm0gPSBmb3JtX2NvbnRlbnQubGVuZ3RoID4gMCAmJiAhIGlzX3JlZGlyZWN0ICYmICEgaXNfY29uZmlybWF0aW9uO3ZhciBtdCA9IHBhcnNlSW50KGpRdWVyeSgnaHRtbCcpLmNzcygnbWFyZ2luLXRvcCcpLCAxMCkgKyBwYXJzZUludChqUXVlcnkoJ2JvZHknKS5jc3MoJ21hcmdpbi10b3AnKSwgMTApICsgMTAwO2lmKGlzX2Zvcm0pe2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMTEnKS5odG1sKGZvcm1fY29udGVudC5odG1sKCkpO2lmKGZvcm1fY29udGVudC5oYXNDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpKXtqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzExJykuYWRkQ2xhc3MoJ2dmb3JtX3ZhbGlkYXRpb25fZXJyb3InKTt9IGVsc2Uge2pRdWVyeSgnI2dmb3JtX3dyYXBwZXJfMTEnKS5yZW1vdmVDbGFzcygnZ2Zvcm1fdmFsaWRhdGlvbl9lcnJvcicpO31zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsgLyogZGVsYXkgdGhlIHNjcm9sbCBieSA1MCBtaWxsaXNlY29uZHMgdG8gZml4IGEgYnVnIGluIGNocm9tZSAqLyBqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZm9ybV93cmFwcGVyXzExJykub2Zmc2V0KCkudG9wIC0gbXQpOyB9LCA1MCApO2lmKHdpbmRvd1snZ2Zvcm1Jbml0RGF0ZXBpY2tlciddKSB7Z2Zvcm1Jbml0RGF0ZXBpY2tlcigpO31pZih3aW5kb3dbJ2dmb3JtSW5pdFByaWNlRmllbGRzJ10pIHtnZm9ybUluaXRQcmljZUZpZWxkcygpO312YXIgY3VycmVudF9wYWdlID0galF1ZXJ5KCcjZ2Zvcm1fc291cmNlX3BhZ2VfbnVtYmVyXzExJykudmFsKCk7Z2Zvcm1Jbml0U3Bpbm5lciggMTEsICdodHRwczovL3BhY2lmaWNwZXJpby5jb20uYXUvd3AtY29udGVudC9wbHVnaW5zL2dyYXZpdHlmb3Jtcy9pbWFnZXMvc3Bpbm5lci5zdmcnLCB0cnVlICk7alF1ZXJ5KGRvY3VtZW50KS50cmlnZ2VyKCdnZm9ybV9wYWdlX2xvYWRlZCcsIFsxMSwgY3VycmVudF9wYWdlXSk7d2luZG93WydnZl9zdWJtaXR0aW5nXzExJ10gPSBmYWxzZTt9ZWxzZSBpZighaXNfcmVkaXJlY3Qpe3ZhciBjb25maXJtYXRpb25fY29udGVudCA9IGpRdWVyeSh0aGlzKS5jb250ZW50cygpLmZpbmQoJy5HRl9BSkFYX1BPU1RCQUNLJykuaHRtbCgpO2lmKCFjb25maXJtYXRpb25fY29udGVudCl7Y29uZmlybWF0aW9uX2NvbnRlbnQgPSBjb250ZW50czt9alF1ZXJ5KCcjZ2Zvcm1fd3JhcHBlcl8xMScpLnJlcGxhY2VXaXRoKGNvbmZpcm1hdGlvbl9jb250ZW50KTtqUXVlcnkoZG9jdW1lbnQpLnNjcm9sbFRvcChqUXVlcnkoJyNnZl8xMScpLm9mZnNldCgpLnRvcCAtIG10KTtqUXVlcnkoZG9jdW1lbnQpLnRyaWdnZXIoJ2dmb3JtX2NvbmZpcm1hdGlvbl9sb2FkZWQnLCBbMTFdKTt3aW5kb3dbJ2dmX3N1Ym1pdHRpbmdfMTEnXSA9IGZhbHNlO3dwLmExMXkuc3BlYWsoalF1ZXJ5KCcjZ2Zvcm1fY29uZmlybWF0aW9uX21lc3NhZ2VfMTEnKS50ZXh0KCkpO31lbHNle2pRdWVyeSgnI2dmb3JtXzExJykuYXBwZW5kKGNvbnRlbnRzKTtpZih3aW5kb3dbJ2dmb3JtUmVkaXJlY3QnXSkge2dmb3JtUmVkaXJlY3QoKTt9fWpRdWVyeShkb2N1bWVudCkudHJpZ2dlcigiZ2Zvcm1fcHJlX3Bvc3RfcmVuZGVyIiwgW3sgZm9ybUlkOiAiMTEiLCBjdXJyZW50UGFnZTogImN1cnJlbnRfcGFnZSIsIGFib3J0OiBmdW5jdGlvbigpIHsgdGhpcy5wcmV2ZW50RGVmYXVsdCgpOyB9IH1dKTsgICAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHsgICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgIH0gICAgICAgIGNvbnN0IGdmb3JtV3JhcHBlckRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCAiZ2Zvcm1fd3JhcHBlcl8xMSIgKTsgICAgICAgIGlmICggZ2Zvcm1XcmFwcGVyRGl2ICkgeyAgICAgICAgICAgIGNvbnN0IHZpc2liaWxpdHlTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggInNwYW4iICk7ICAgICAgICAgICAgdmlzaWJpbGl0eVNwYW4uaWQgPSAiZ2Zvcm1fdmlzaWJpbGl0eV90ZXN0XzExIjsgICAgICAgICAgICBnZm9ybVdyYXBwZXJEaXYuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCAiYWZ0ZXJlbmQiLCB2aXNpYmlsaXR5U3BhbiApOyAgICAgICAgfSAgICAgICAgY29uc3QgdmlzaWJpbGl0eVRlc3REaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggImdmb3JtX3Zpc2liaWxpdHlfdGVzdF8xMSIgKTsgICAgICAgIGxldCBwb3N0UmVuZGVyRmlyZWQgPSBmYWxzZTsgICAgICAgICAgICAgICAgZnVuY3Rpb24gdHJpZ2dlclBvc3RSZW5kZXIoKSB7ICAgICAgICAgICAgaWYgKCBwb3N0UmVuZGVyRmlyZWQgKSB7ICAgICAgICAgICAgICAgIHJldHVybjsgICAgICAgICAgICB9ICAgICAgICAgICAgcG9zdFJlbmRlckZpcmVkID0gdHJ1ZTsgICAgICAgICAgICBqUXVlcnkoIGRvY3VtZW50ICkudHJpZ2dlciggJ2dmb3JtX3Bvc3RfcmVuZGVyJywgWzExLCBjdXJyZW50X3BhZ2VdICk7ICAgICAgICAgICAgZ2Zvcm0udXRpbHMudHJpZ2dlciggeyBldmVudDogJ2dmb3JtL3Bvc3RSZW5kZXInLCBuYXRpdmU6IGZhbHNlLCBkYXRhOiB7IGZvcm1JZDogMTEsIGN1cnJlbnRQYWdlOiBjdXJyZW50X3BhZ2UgfSB9ICk7ICAgICAgICAgICAgZ2Zvcm0udXRpbHMudHJpZ2dlciggeyBldmVudDogJ2dmb3JtL3Bvc3RfcmVuZGVyJywgbmF0aXZlOiBmYWxzZSwgZGF0YTogeyBmb3JtSWQ6IDExLCBjdXJyZW50UGFnZTogY3VycmVudF9wYWdlIH0gfSApOyAgICAgICAgICAgIGlmICggdmlzaWJpbGl0eVRlc3REaXYgKSB7ICAgICAgICAgICAgICAgIHZpc2liaWxpdHlUZXN0RGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHZpc2liaWxpdHlUZXN0RGl2ICk7ICAgICAgICAgICAgfSAgICAgICAgfSAgICAgICAgZnVuY3Rpb24gZGVib3VuY2UoIGZ1bmMsIHdhaXQsIGltbWVkaWF0ZSApIHsgICAgICAgICAgICB2YXIgdGltZW91dDsgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgICAgICAgICAgICAgICAgdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gbnVsbDsgICAgICAgICAgICAgICAgICAgIGlmICggIWltbWVkaWF0ZSApIGZ1bmMuYXBwbHkoIGNvbnRleHQsIGFyZ3MgKTsgICAgICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgdmFyIGNhbGxOb3cgPSBpbW1lZGlhdGUgJiYgIXRpbWVvdXQ7ICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCggdGltZW91dCApOyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCggbGF0ZXIsIHdhaXQgKTsgICAgICAgICAgICAgICAgaWYgKCBjYWxsTm93ICkgZnVuYy5hcHBseSggY29udGV4dCwgYXJncyApOyAgICAgICAgICAgIH07ICAgICAgICB9ICAgICAgICBjb25zdCBkZWJvdW5jZWRUcmlnZ2VyUG9zdFJlbmRlciA9IGRlYm91bmNlKCBmdW5jdGlvbigpIHsgICAgICAgICAgICB0cmlnZ2VyUG9zdFJlbmRlcigpOyAgICAgICAgfSwgMjAwICk7ICAgICAgICBpZiAoIHZpc2liaWxpdHlUZXN0RGl2ICYmIHZpc2liaWxpdHlUZXN0RGl2Lm9mZnNldFBhcmVudCA9PT0gbnVsbCApIHsgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCAoIG11dGF0aW9ucyApID0+IHsgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goICggbXV0YXRpb24gKSA9PiB7ICAgICAgICAgICAgICAgICAgICBpZiAoIG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJyAmJiB2aXNpYmlsaXR5VGVzdERpdi5vZmZzZXRQYXJlbnQgIT09IG51bGwgKSB7ICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkVHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7ICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgIH0pOyAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUoIGRvY3VtZW50LmJvZHksIHsgICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwgICAgICAgICAgICAgICAgY2hpbGRMaXN0OiBmYWxzZSwgICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSwgICAgICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbICdzdHlsZScsICdjbGFzcycgXSwgICAgICAgICAgICB9KTsgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgdHJpZ2dlclBvc3RSZW5kZXIoKTsgICAgICAgIH0gICAgfSApO30gKTsgCi8qIF1dPiAqLwo8L3NjcmlwdD4K